1.GBDT也是Boosting思想的一个应用,分成梯度提升和决策树
2.把梯度下降法的学习率从人工设定变成由算法决定,这称最速下降法,也称直线搜索
3.把加法模型和最速下降法结合,就产生了梯度提升算法。
4.梯度提升算法的核心是:每次弱学习器拟合值是负梯度方向,这样每次迭代损失函数值是下降的
4.梯度提升算法分两步求解,第一步求解弱学习器参数,第二步利用直线搜索求解最佳步长
5.梯度提升算法结合决策树,就是梯度提升树(GBDT),利用不同的损失函数可以得到不同的算法
6.回归树采取均方误差做损失,则GBDT拟合的负梯度就是残差,也称伪残差
7.分类树采取指数损失,GBDT退化为AdaBoost
8.防止GBDT过拟合有三种方法:加学习率,设置子采样比例,决策树的剪枝
9.GBDT还可以用来做特征组合
10.从泰勒展开角度看GBDT,还能引申另外一个算法:XGBoost
本篇我们介绍集成学习Boosting思想的应用:GBDT(Gradient Boost Decision Tree),也就是梯度提升决策树。它由两部分组成,一个是Gradient Boost,梯度提升,另一个是Decision Tree,也就是决策树。决策树我们已经详细介绍过决策树之原理与调参,因此,只要理解了梯度提升,就能理解GBDT。它跟上一篇集成学习(三)介绍的AdaBoost算法都是属于Boost类的集成学习,但是它们关注的点不一样:AdaBoost关注的是样本权值的更新,而Gradient Boost则是对目标值y做文章。
注:本篇需要用到的知识梯度下降法,机器学习之模型评估(损失函数)
最速下降法
梯度提升算法是从梯度下降法思想来的,我们复习一下梯度下降法的结论,详细推导见梯度下降法。
梯度下降的迭代公式(优化目标是求函数f(x)的最小值):
其中,α是学习率(步长),由人工设定。
如果对梯度下降法做一些改进,使得学习率由算法决定,自适应变化,这就是最速下降法。记梯度为
则步长为下面一元函数优化问题的解
这称为直线搜索,它沿着最速下降方向搜索最佳步长
梯度提升算法
梯度提升算法可以看做是梯度下降法与加法模型的结合,它的思想是:用当前已经训练出来的强学习器F(x)对训练样本进行预测,然后计算损失函数对F(x)的负梯度值,如果下一个弱学习器h(x)的预测值指向该负梯度方向,根据梯度下降法的原理,加上这个弱学习器,即向前走一步之后损失函数值是下降的。
通过一个生活案例来理解这个思想——打高尔夫。如果球距离洞口很远,通过一杆进洞几乎是不可能的,通常的做法就是打好多杆,每一次都比前一杆距洞更近,最终把球打进去。
梯度提升算法采用了这种思想-逐步求精,在前面几杆的基础上打下一杆。每打一杆时,要确定方向和力度的大小,这里的方向就是我们要拟合的弱学习器,力度就是其系数。
把问题模型化,我们要最小化最终强学习器与真实标签y的损失函数:
最终强学习器是前面所有预测结果的累计:
根据最速下降法我们把式子变为:
步长α由直线搜索确定,即寻找使得函数值下降最快的梯度步长
引进训练样本和参数化弱学习器h,损失函数变为优化弱学习器的参数和系数,有:
对于上面的损失函数直接优化非常困难,难的点就在于弱学习器fk的拟合方向和值无法确定。一般先拟合学习器,再确定系数。如果采用最速下降法近似求解,则弱学习器拟合的目标就是负梯度。换句话说,每次迭代过程,让弱学习器的输出值对准所有样本的负梯度方向(因为这是使得损失函数下降最快的方向):
用当前弱学习器逼近负梯度值,相比于上面使用损失函数L的情况,这个问题要容易求解得多。得到弱学习器后,执行直线搜索
从而确定步长β,最终更新预测函数
综上,我们可以得到梯度提升算法框架流程:
step1:初始化学习器F0
依次循环训练k=1,2,...,K学习器
step2:计算负梯度
step3:训练弱学习器
step4:直线搜索
step5:更新学习器
梯度提升决策树
GBDT是基于梯度提升算法框架的,只不过学习器是决策树,所以称为梯度提升决策树,简称梯度提升树。
梯度提升+回归树
回归决策树采用均方误差(mse)作为评价指标:
每次拟合的负梯度可以化简为:
可以看到,利用均方误差作为损失函数时,GBDT的弱学习器拟合的负梯度实际是残差,我们通常也称伪残差。
我们知道,决策树由J个叶子节点组成,那么对应的回归树加法模型为:
bj为回归树第j个叶子节点的预测值(均值),其实对应Gradient Boost算法的γ 参数
I是指示函数
Rj表示决策树中叶子节点预测值集合所对应的的特征空间
结合Gradient Boost算法,我们有:
于是得到GBDT回归树的算法流程
第二步的b步骤,是训练决策树过程,c步骤,可以理解为对应梯度提升算法的直线搜索,目标找到r,使得损失最小。
梯度提升+分类树
对于分类决策树,分二分类和多分类,这里只介绍二分类的情况,损失函数一般有两种,一种是指数损失,一种是交叉熵损失。采用前者,GBDT退化为AdaBoost,对于后者,我们有:
计算负梯度
生成决策树后,各个叶子节点最佳拟合为:
该式难优化,我们用近似值替代
除了负梯度计算与直线搜索不同,其他过程与回归树一样
当然,损失函数还有其他更多种,不同的损失函数会有不一样的算法,详情件参考资料
GBDT正则化
GBDT也有防止过拟合的方法,一共三种。
加入步长v
对于同样的训练集学习效果,较小的νν意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
子采样比例(subsample)
子采样是不放回抽样,取值为(0,1],选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低,一般使用0.5~0.8之间
决策树剪枝
GBDT是由决策树构成的,可以通过剪枝防止过拟合,详情见决策树sklearn包细节讲解
GBDT的特征构建
GBDT除了在提高模型性能有显著作用外,也可以用于特征构建。主要是做特征组合(因子分解机也能做特征组合,小编以后专题介绍)。
我们来看看GBDT是怎么做特征组合的。我们通过一张图来说明
假设使用GBDT生成了两颗树,绿色树Tree1一共3个叶子节点,红色树Tree2一共2个叶子节点。我们可以依次构建五个维度的特征,每个维度代表一个叶子节点,样本落在这个叶子节点上面的话那么值为1,没有落在该叶子节点的话,那么值为0.
例如对于样本x我们可以得到一个向量[0,1,0,1,0] 作为该样本的组合特征
关于GBDT的介绍,还可以从泰勒展开角度分析,由此又引出了另外一个改进算法:XGBoost。我们下一篇继续介绍
参考资料
https://www.cnblogs.com/pinard/p/6140514.html
https://mp.weixin.qq.com/s/xV0LnPEofxB3PjsNqeh8Iw
https://mp.weixin.qq.com/s/K3XEz7bTViXASi7gKXxsqQ
https://mp.weixin.qq.com/s/OU5EvylkjqvMdeHJp1uhpQ
https://blog.csdn.net/program_developer/article/details/79404581