一、AdaBoost
1 AdaBoost与GBDT比较
AdaBoost的迭代是重点拟合那些之前分错的样本。GBDT是在拟合残差。
相同点:1 加性模型+前向分步算法 2 每一步训练一个弱学习器以弥补前面模型的不足,都不能并行计算 3 都是减小偏差
不同点:1 AdaBoost中,当前学习器的“不足”由样本权重来决定 2 GBDT中当前学习器的不足“由”梯度决定
AdaBoost一般用于分类,GBDT一般用于回归,所以损失函数也不同。
AdaBoost存在对异常值敏感的问题,异常值被分类错误将会得到较大的权重,使得训练权重出现偏差。
2 AdaBoost几种基本机器学习算法哪个抗噪能力强,哪个对重采样不敏感?
提升方法包括AdaBoost,GBDT,随机森林等。AdaBoost算法可将弱分类器,例如决策树,LR,SVM等进行组合,提高预测能力。
AdaBoost与SVM算法的抗噪能力强,SVM作为弱分类器。
3 AdaBoost与随机森林的区别
对于提升方法,有两个问题需要回答:1 每一轮如何改变训练数据的权值或概率分布?2 如何将弱分类器组合成一个强分类器?
AdaBoost:提高被前一轮弱分类器错误分类的样本的权值,而降低那些被正确分类的样本的权值。加权多数表决方法,加大分类误差率小的弱分类器的权值,使其在表决中起较大作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
随机森林:训练样本随机选取。虽然每一棵树的训练样本个数都是样本总数N,但是每一个样本的随机选取都是有放回的选取。这样,每一颗树的训练样本几乎都不相同。特征随机选取,假设训练数据有M个特征,随机森林的每一棵树只选取m(m < M)个特征用于构建决策树。每一棵树选取的特征可能都不完全相同。
强调:随机森林不进行剪枝。决策树剪枝是为了防止过拟合,而随机森林的“随机”已经防止了过拟合,因此不需要剪枝。
补充:随机森林有两个参数需要人为控制,一个是森林中树的数量,一般建议取很大。另一个是m的大小,推荐m的值为M的均方根。
4 boosting算法的思路是什么?
boosting的核心思想不同于bagging,它在基于样本预测结果对照与真实值的差距,进行修正,再预测再修正,逐步靠近正确值。
5 简述一下AdaBoost的权值更新方法
6 训练过程中,每轮训练一直存在分类错误的问题,整个AdaBoost却能快速收敛,为何?
每轮训练结束后,AdaBoost会对样本的权重进行调整,调整的结果是越到后面被错误分类的样本权重会越高。而后面的分类器为了达到较低的带权分类误差,会把样本权重高的样本分类正确。这样造成的结果是,虽然每个弱分类器可能都有分错的样本,然而整个AdaBoost却能保证对每个样本进行正确分类,从而实现快速收敛。
7 AdaBoost的优缺点?
优点:能够基于泛化性能相当弱的学习器构建出很强的集成,不容易发生过拟合
缺点:对异常样本比较敏感,异常样本在迭代过程中会获得较高的权值,影响最终学习器的性能表现
二、GBDT
https://blog.csdn.net/qq_24519677/article/details/82020863
GBDT的思想类似于数值优化中梯度下降求参方法,参数沿着梯度的负方向以小步长前进,最终逐步逼近参数的局部最优解。在GB中,模型每次拟合残差,逐步逼近最终结果。
GBDT全称梯度下降树,在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一,在前几年深度学习还没有大行其道之前,GBDT在各种竞赛是大放异彩。
GBDT主要由三个概念组成:回归决策树(即DT),Gradient Boosting(即GB),Shrinkage
Shrinkage:每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。Shrinkage仍然以残差作为学习目标,但对于残差学习出来的结果,只累加一小部分(step*残差)逐步逼近目标,step一般都比较小,如0.01~0.001()
1 GBDT的算法流程?
GBDT是通过采用加法模型(基函数的线性组合),不断减小训练过程产生的残差来达到将数据分类或回归的算法。针对一般损失函数优化困难问题,利用损失函数的负梯度在当前模型的值作为残差的近似值进行求解。
2 GBDT如何选择、构建特征?
GBDT选择特征的细节就是问你CART生成的过程。GBDT的弱分类器模型选择的是CART。CART生成的过程其实就是一个选择特征的过程。假设我们目前共有M个特征。第一步,我们需要从中选择出一个特征j,作为二叉树的第一个节点。然后对特征j的值选择一个切分点m,一个样本的特征j的值如果小于m,则分成一类,如果大于m,则分成另一类。如此便构建了CART树的一个节点。其他节点的生成过程和这个是一样的。
那么在每轮迭代的时候,如何选择这个特征j,以及如何选择特征j的切分点m?
回归树——最小二乘回归树生成法:
- 历训练样本的所有的特征,对于特征j,我们遍历特征j所有特征值的切分点c.
- 找到可以让下面这个式子最小的特征j以及切分点c:
(构建):将样本输入到GBDT生成的树中,所有树的叶子节点可以构建一个向量,输入样本可以获得一个关于叶子节点的0-1向量,将这个向量作为该样本的组合特征,和原来的特征一起输入到逻辑回归当中训练。
3 GBDT如何用于分类?
GBDT无论用于分类还是回归一直都是使用的CART回归树。
这里面的核心是因为GBDT每轮的训练是在上一轮的训练的残差基础之上进行训练的。
这里的残差就是当前模型的负梯度值。这个要求每轮迭代的时候,弱分类器的输出的结果相减是有意义的。残差相减是有意义的。而类别结果相减是无意义的,因此需要数值结果进行相减,所以使用CART回归树。
具体例子:
具体到分类这个任务上面来,我们假设样本X总共有K类。来了一个样本x,我们需要使用GBDT来判断x属于样本的哪一类。
第一步,在训练的时候,针对样本X每个可能的类都训练一个分类回归树。假如目前样本有三类,即K=3。样本X属于第二类。那么针对该样本x的分类结果,其实我们可以用一个三维向量 [0, 1, 0] 来表示。0表示样本不属于该类,1表示样本属于该类。
针对样本有三类的情况,我们实质上是在每轮的训练的时候同时训练三棵树。第一棵树针对样本x的第一类,输入为(x, 0)。第二棵树输入针对样本x的第二类,输入为(x,1)。第三棵树针对样本x的第三类,输入为(x, 0)。
这里我们每棵树的训练过程就是CART的生成过程。我们参照之前的生成树的程序可以解出三棵树,以三棵树对x类别的预测值f1(x), f2(x), f3(x)。那么在此类训练中,我们仿照多分类的逻辑回归,使用softmax来产生概率,则属于类别1的概率:
并且,我们可以针对类别1求出残差 y11(x) = 0 - p1(x);类别2残差 y22(x) = 1 - p2(x);类别3残差 y33(x) = 0 - p3(x)。然后开始第二轮训练,针对第一类输入为(x, y11(x)),针对第二类输入为(x, y22(x)),针对第三类输入为(x, y33(x))。继续训练出三棵树。一直迭代M轮。每轮构建三棵树。
当训练完毕以后,新来一个样本x1,我们需要预测该样本的类别的时候,可以有这三个式子产生三个值,f1(x),f2(x),f3(x)。样本属于某个类别c的概率为:
4 GBDT通过什么方式减少误差?
每棵树都是在拟合当前模型的预测值和真实值之间的误差,GBDT是通过不断迭代来使得误差减小的过程。
5 GBDT的效果相比于传统的LR / SVM效果为什么好一些?
GBDT基于树模型,继承了树模型的优点(对异常值鲁棒、不相关的特征干扰低(LR需要加正则)、可以很好地处理缺失值、受噪音的干扰小)
6 GBDT如何加速训练?
小数据集使用True,可以加快训练。是否预排序,预排序可以加速查找最佳分裂点。
7 GBDT的参数有哪些,如何调参?
8 GBDT实战中遇到的一些问题?
9 GBDT的优缺点
优点:
可以灵活处理各种类型的数据,包括连续纸和离散值。
在相对少的调参时间情况下,预测的准备率也可以比较高。这个是
缺点:由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过子采样的SGBT来达到部分并行。
10 GBDT如何进行正则化
11 GBDT中哪些部分可以并行
12 如何防止过拟合
三、XGBoost
1 XGBoost与GBDT相比有哪些区别
(1) 传统GBDT以CART作为基分类器,XGBoost还支持线性分类器
(2) 传统GBDT在优化时只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数
(3) XGBoost在代价函数里加入了正则项,用于控制模型的复杂度