机器学习面试——XGBoost,GBDT,RF(上)

1、常见的集成思想

bagging:基学习器之间并行训练,且学习器之间没有依赖,像是集体决策的过程,每个个体都进行单独学习,再通过投票的方式做最后的集体决策。常见的算法有随机森林

boosting:基学习器之间串行训练,且学习器之间存在依赖,将基学习器层层叠加,每一层在训练的时候,对前一层基学习器分错的样本给予更高的权重。类似于人类的学习过程,对于错误,进行加强学习,直到犯错误的次数减少到很低的程度。常见的算法有AdaBoost、GBDT、XGBoost

Stacking:首先使用原始数据训练出一级学习器,将一级学习器的输出作为输入并使用对应原始标记作为新标记,组成新的数据集来训练二级学习器(结合学习器)。常用于模型融合。

2、从偏差和方差的角度解释Bagging和Boosting

偏差是由于分类器的表达能力有限导致的系统性错误;

方差是由于分类器对于样本分布过于敏感,导致在训练样本数较少时,产生过拟合;

bagging是采用分而治之策略,通过对训练样本进行多次采样,并分别训练出不同模型,然后做综合,减小集成分类器之间的方差。

boosting是通过逐步聚焦于基学习器分错的样本,减小集成分类器的偏差。

2、随机森林的随机性?

数据集:有放回随机取样

特征:随机选取特征,进行分割点计算

3、Adboost、提升树(boosting tree),梯度提升树的异同?

相同:

  • 加法模型:模型是基学习器进行累加,得到一个最终的加法模型。
  • 前向分步算法:从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,简化优化的复杂度。

区别:

Adaboost的实现步骤:

(1)初始化权重分布,假设模型有均匀的权值分布。D_{1}={w_{11},w_{12},...,w_{1n}}

(2)对数据进行学习,计算Gm(分类器)在训练数据集上的分类误差率,

(3)计算Gm(分类器)系数,系数代表在最终分类器上的重要性。

(4)更新权重D_{m+1}(m步的权重分布),D_{1}={w_{m1},w_{m2},...,w_{mn}}

(5)对基学习器进行累加,组成线性组合,得到最终的分类器:

注释:I(x)是指示函数,sign(x)是符号函数。

I_{A}(x)=\left \{\begin{matrix} 1 , x\in A \\ 0,x\notin A \end{matrix} \right.,sign(x)=\left \{ \begin{matrix} -1,x<0\\ 0,x=0\\ 1,x>0 \end{matrix} \right.

提升树(Boosting Tree)的实现步骤:

提升方法实际采用加法模型和前向分布算法,以决策树为基函数的提升方法称为提升树,对分类问题决策树是二叉分类树,损失函数时指数损失,对于回归问题决策树是二叉回归树,损失函数是均方损失。

分析:

其中,r是当前模型拟合数据的残差。

梯度提升树(Gradient boosting DT):

将当前模型损失函数的负梯度作为残差的近似替换值。

4、RF和GBDT的区别

相同点:都用了集成思想

不同点:

  • RF是bagging思想,减小了方差,GBDT是boosting思想,减小了偏差
  • RF是串行,GBDT是并行
  • RF是分类和回归树,GBDT只能回归树
  • RF是采用投票进行最终决策,GBDT是多棵树累加决策
  • RF对异常值不敏感,且不需要归一化,GBDT对异常值敏感(串行),需要归一化(GBDT的树是在上一颗树的基础上通过梯度下降求解最优解,归一化能收敛的更快,而随机森林本来就是通过减少方差提高性能的,树之间建立关系是独立的,不需要归一化)

5、GBDT的缺点?

  • 在高维稀疏的数据集上,表现性不好。
  • 训练过程是串行,需要在决策树内部采用一些局部并行的手段提高训练速度。

6、GBDT和XGBoost的异同?

不同:

  • GBDT用了一阶导数信息,XGBoost用了一阶、二阶导数信息
  • GBDT不执行并行化,XGBoost在数据和特征方便增加了并行化处理,(数据采样、特征重要性排序)
  • GBDT对异常值敏感,XGBoost新增了缺失值处理策略
  • GBDT只能是树模型,XGBoost可以自定义基学习器
  • XGBoost增加了正则化的策略

7、Xgboost 如何寻找最优特征?是有放回还是无放回呢?

Xgboost在训练的过程中给出各个特征的增益评分,最大增益的特征会被选出来作为分裂依据,从而记忆了每个特征对在模型训练时的重要性。从根到叶子中间节点涉及某特征的次数作为该特征重要性排序。Xgboost是不放回,还支持子采样和列采样。

8、Xgboost为什么要用泰勒展开,优势在哪里?

XGBoost使用了一阶和二阶偏导,二阶导数有利于梯度下降的更快更准,使用泰勒展开取得函数做自变量的二阶导数形式,可以再不选定损失函数具体形式的情况下,仅仅依靠输入数据的值就可以进行叶子分裂优化算法,本质上将损失函数的选取和模型算法优化/参数选择分开,这种去耦合增强了XGBoost的适用性,使得模型按需选取损失函数。

9、RF如何处理缺失值?

方法一:将数值型变量中的缺失值用其所对应类别中的中位数替换。把描述型变量缺失的部分用所对应类别出现最多的数值替代。

方法二:在方法一的基础上做了升级,引入了权重变量,即对需要替换的数据先和其他数据做相似度测量,如果是分类变量,则用没有缺失的观测实例相似度的权重投票,如果是连续型变量,则用加权平均和进行填充

10、XGBoost如何处理缺失值?

xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。

11、随机森林如何评估特征重要性?

12、XGBoost如何给特征评分?

在CART树中,通过基尼指数选取分离点的特征,一个特征被选中的次数越多,该特征的评分就越高。

在XGboost中,枚举不同的树结构,利用打分函数来寻找最优的结构树。从树深度0开始,每个节点遍历所有特征,对于单个特征,首先对特征的值进行排序,然后线性扫描该特征进行选择最好的切割点,再比较所有的特征,选择信息增益增高的特征为当前节点。

假设年龄这个特征,我们首先对年龄进行排序,设定阈值a,将小于阈值a的分为一类,大于阈值a的分为一类,计算该特征的基尼指数,若存在多个阈值,就会出现多个基尼指数值,选择最大的那个为当前的阈值,并计算所有特征(年龄、性别、职业等),选择最大的gini指数的特征为当前节点。这种只看到当前节点的思想就是greddy exact。

引入新叶子的惩罚项是为了优化目标函数,对应了树的剪枝,当分割阈值小于惩罚项,就忽略这个分割。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

听说有人不了解柔性数组

1 引言 定长数组包在平时的开发中&#xff0c;缓冲区数据收发时&#xff0c;如果采用缓冲区定长包&#xff0c;假定大小是 1k&#xff0c;MAX_LENGTH 为 1024。结构体如下&#xff1a;// 定长缓冲区 struct max_buffer {int len;char data[MAX_LENGTH]; };数据结构的大小 &…

Transformer模型拆解分析

资源来自&#xff1a;DataWhale 学习资料 最近看了DataWhale 的Transformer图解&#xff0c;突然对Transformer的结构图有了更加清晰的理解&#xff0c;特此记录。 1、大框架 Transformer是由6个encoder和6个decoder组成&#xff0c;模型的具体实现是model变量里边&#xff0…

设计模式学习笔记六:.NET反射工厂

1&#xff0e; 简述 通过前面的学习&#xff0c;我们以传统的方式实现了简单工厂&#xff0c;工厂方法和抽象工厂&#xff0c;但是有些场合下如此处理&#xff0c;代码会变得冗余并且难以维护。假设我们要创建交通工具。可以是汽车&#xff0c;火车&#xff0c;轮船等&#xff…

在unity 中,使用http请求,下载文件到可读可写路径

在这里我用了一个线程池&#xff0c;线程池参数接收一个带有object参数的&#xff0c;无返回值的委托 &#xff0c;下载用到的核心代码&#xff0c;网上拷贝的&#xff0c;他的核心就是发起一个web请求&#xff0c;然后得到请求的响应&#xff0c;读取响应的流 剩下的都是常见的…

在tinyalsa上抓取音频

我们经常会遇到这样的问题&#xff0c;应用读取到的音频有问题&#xff0c;需要在tinyalsa里面读取音频来确认是底层音频有问题&#xff0c;还是应用处理之后存在的问题。所以&#xff0c;这个patch就出现了代码的逻辑很简单&#xff0c;主要是在pcm_read的时候&#xff0c;同时…

STM32——GPIO(1)

STM32——GPIO 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 【对单片机的操作就是控制IO口】 一、GPIO&#xff08;通用输入输出口&#xff09; 1、选定需要的引脚&#xff08;对应哪一个IO口&#xff09;&#xff1b; 2、配置需要的功能&#xf…

【opencv学习笔记八】创建TrackBar轨迹条

createTrackbar这个函数我们以后会经常用到&#xff0c;它创建一个可以调整数值的轨迹条&#xff0c;并将轨迹条附加到指定的窗口上&#xff0c;使用起来很方便。首先大家要记住&#xff0c;它往往会和一个回调函数配合起来使用。先看下他的函数原型&#xff1a; int createTra…

父母悄悄给自己买房,我很生气,要怎么调整心态?

——问题我是独生子&#xff0c;今年满24岁刚上研一&#xff08;普通211&#xff09;。家庭四川小城市&#xff0c;情况一般&#xff0c;父母二人体制内月薪总计一万元以内&#xff0c;家里积蓄20W-30W&#xff0c;公积金情况不清楚。从小母子关系比较僵硬&#xff0c;母亲小学…

语音处理入门——语音的声学处理

语音的声学处理通常称为特征提取或者信号分析&#xff0c;特征是表示语音信号的一个时间片的矢量。常见的特征类型有LPC&#xff08;线性预测编码&#xff09;特征和PLP&#xff08;感知线性预测编码&#xff09;&#xff0c;该特征称为声谱特征&#xff0c;使用形成波形的不同…

基础呀基础,用二极管防止反接,你学会了吗?

使用新的电源&#xff0c;第一次给设备供电时&#xff0c;要特别注意电源的正负极性标注。比如电源适配器&#xff0c;铭牌上面有标注插头的极性。这个符号说明插头的里面是正极&#xff0c;外面是负极&#xff0c;即“内正外负”。但是也有反过来的&#xff0c;下面这款是“内…

李宏毅的可解释模型——三个任务

1、问题 观看了李宏毅老师的机器学习进化课程之可解释的机器学习&#xff0c;课程中对主要是针对黑盒模型进行白盒模型转化的技巧和方法进行了简单介绍&#xff0c;详细细节可以参考《Interpretable Machine Learning》。像一些线性模型、树形模型是可解释的ML model&#xff…

柔性数组和环形队列之间的故事

之前的文章&#xff0c;讲解了柔性数组&#xff0c;有很多人留言&#xff0c;提到一些问题。刚好&#xff0c;之前发关于环形队列的文章有些问题&#xff0c;这次刚好拿出来一起说一下&#xff0c;并用柔性数组实现一个环形队列。柔性数组的上一篇文章环形队列C语言实现文章1、…

STM32——时钟系统

STM32——时钟系统 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、时钟树 普通的MCU&#xff0c;一般只要配置好GPIO 的寄存器&#xff0c;就可以使用了。STM32为了实现低功耗&#xff0c;设计了非常复杂的时钟系统&#xff0c;必须开启外设时钟才…

目标检测发展路程(一)——Two stage

目标检测是计算机视觉领域中非常重要的一个研究方向&#xff0c;它是将图像或者视频中目标与其他不感兴趣的部分进行区分&#xff0c;判断是否存在目标&#xff0c;确定目标位置&#xff0c;识别目标种类的任务&#xff0c;即定位分类。传统的目标检测模型有VJ.Det[1,2],HOG.De…

都2021年了,c/c++开发竟然还能继续吃香??

年后就迎来了金三银四&#xff0c;你准备好2021年的跳槽涨薪计划了吗&#xff1f;今天我就来给大家分享&#xff0c;c/c作为老牌开发常青树&#xff0c;还能与java/python/go较较劲的岗位和技术在哪里&#xff01;同时&#xff0c;给大家整理了2021年系统全面技术学习资料。文末…

目标检测模型——One stage(YOLO v5的模型解析及应用)

1. 简介 目标检测分为Two stage和One stage,只使用一个网络同时产生候选区域并预测出物体的类别和位置&#xff0c;所以它们通常被叫做单阶段检测算法&#xff08;One stage&#xff09;。本篇文章只讲One stage模型&#xff0c;常见的模型有YOLO&#xff0c;SSD。 目标检测发…

腾讯回应QQ读取用户浏览器历史记录

腾讯QQ官方认证账号在知乎回应“QQ扫描读取所有浏览器的历史记录”表示&#xff0c;PC QQ存在读取浏览器历史用以判断用户登录安全风险的情况&#xff0c;读取的数据用于在PC QQ的本地客户端中判断是否恶意登录。所有相关数据不会上传至云端&#xff0c;不会储存&#xff0c;也…

OCR系列——总体概述

最近参加了百度Paddle的动手学OCR课程&#xff0c;特此做一个学习总结。 1. 简介 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是计算机视觉重要方向&#xff0c;传统的OCR一般面向扫描文档类对象&#xff0c;现在的OCR是指场景文字识…

STM32——系统滴答定时器

STM32——系统滴答定时器 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、SysTick【内核中】 【风格&#xff1a;先描述一下库对寄存器的封装&#xff0c;再举例实现某些功能】 SysTick定时器被捆绑在NVIC中&#xff0c;用于产生SysTick异常&#…

你会用while(1)还是for(;;)写循环代码?

看代码看到for(;;)&#xff0c;然后觉得为什么不写成while(1)呢&#xff0c;所以就做了下面的测试。网上有解释&#xff0c;因为while需要做一次判断&#xff0c;理论上执行会花费的时间更久&#xff0c;for(;;)只是执行了两次空语句&#xff0c;执行会更快for.c#include <s…