集成学习(四)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

整得咔咔响

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值