提升树和梯度提升算法

根据《统计学习方法》中所描述对于”强可学习“和”弱可学习“的概念:在PCA框架中,对于一个概念(一个类)来说,如果存在一个多项式的学习算法能够学习他,并且正确率很高,那么就称这个概念是 强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。

所以对于更常见更容易发现的“弱学习算法”,如果可以通过一些手段和途径将它提升(Boost)为“强学习算法”,那么正确率就会大大提高。于是就产生了Boosting提升方法。最具代表性的是AdaBoost算法(AdaBoost algorithm)。

Boosting基本概念

提升(Boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。
提升方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。

对于提升方法来说,两个问题最值得注意:(1)在每一轮如何改变训练数据的权值或概率分布?(2)如何将弱分类器组合成一个强分类器? 根据书上所说,对于第一个问题:AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。                  至于第二个问题:弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。


我们今天所说的提升树,就是以分类树和回归树作为基本分类器的提升方法,提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树(Boosting Tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。

2.前向分步加法模型请添加图片描述

3.提升树

提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。

3.1 提升树模型

提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树(Boosting Tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。提升树模型可以表示为决策树的加法模型:
请添加图片描述
在这里插入图片描述
分为二叉分类提升树和二叉回归提升树,这里主要详述二叉回归提升树:请添加图片描述
对回归问题的提升树算法来说,只需简单地拟合当前模型的残差。这样,算法是相当简单的。主要就是使用向前分布算法,在要做在前向分步算法的第m步,给定当前模型fm-1(x),      如 f m ( x ) = f m − 1 ( x ) + T ( x ; θ m ) \begin{aligned}f_{m}\left( x\right) =f_{m-1}\left( x\right) +T\left( x;\theta m\right) \end{aligned} fm(x)=fm1(x)+T(x;θm),m=1,2,…,M,
                       f M ( x ) = ∑ m = 1 M T ( x ; θ m ) f_{M}\left( x\right) =\sum ^{M}_{m=1}T\left( x;\theta _{m}\right) fM(x)=m=1MT(x;θm), 需要我们去求解:请添加图片描述
得到 θ ^ m \widehat{\theta }_{m} θ m,即第m棵树的参数。

4. 回归提升树示例

例题来自统计学习方法中的例题,如下表的数据所示,x的取值范围为区间[0.5,10.5],y的取值范围为区间[5.0, 10.0],学习这个回归问题的提升树模型,考虑只用树桩作为基函数。请添加图片描述

(1)首先求训练数据的切分点

假设我们的切分点为:

1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5,所以对于各个切分点,去求出相应的R1,R2,c1,c2和m(s),m(s)计算公式如下:请添加图片描述对于当切分点s=1.5时,此时 R1中有 1,R2中有2~10,所以请添加图片描述
将所有m(s)计算结果如下图所示:请添加图片描述

(2)求回归树

从上面的表我们可以看到,当s=6.5时,m(s)达到最小值,此时 R1中包含 1-6,R2中包含7-10,此时:请添加图片描述
所以此时的回归树T1(x)
请添加图片描述
此时的假发模型为:f1(x) = T1(x),对于残差的计算方法是 r2i = yi-f1(xi) ,i=1,2,…10。那么对于f1(x)的残差如下表所示:请添加图片描述
回归树T1(x) 我们已经构成,那么继续往下求回归树T2(x) ,方法与上面一致只是此时拟合的是上面的残差表的数据。
我们仍从s=1.5开始,此时还是R1中有 1,R2中有2~10,所以请添加图片描述
m(s)计算结果如下图所示:请添加图片描述
根据上表所知s=3.5时m(s)达到最小值,此时回归树 T2(x) 为:请添加图片描述
我们在利用加法模型得到现在的 f2(x)请添加图片描述
此时的残差表就变为请添加图片描述
之后的步骤就是一直不断的重复构建回归树,直到全部完成或者定义一个误差值,直到满足误差为止。剩下的回归树如下图所示请添加图片描述
上述过程就是提升树利用加法模型与前向分歩算法实现学习的优化过程。但是这是对于损失函数是平方误差损失函数和指数损失函数来说,每一步的优化都较于简单,因为我们所要求的残差是由 ri = yi-f1(xi) 求得的,但是对于一般损失函数并没有这么容易就求得,所以为了满足一般损失函数而言,我们要用梯度提升算法(gradient boosting)它的思想借鉴于梯度下降法,其基本原理是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。采用决策树作为弱分类器的Gradient Boosting算法被称为GBDT。

这里再描述一下梯度下降的基本步骤

请添加图片描述

梯度提升算法

在这里插入图片描述
我们在梯度下降算法是在多维参数空间中的负梯度方向,变量是参数。但是在梯度提升算法中,变量是函数,更新函数通过当前函数的负梯度方向来修正模型,使模型更优,最后累加的模型为近似最优函数。
请添加图片描述

梯度提升原理推导

请添加图片描述
所以我们观察到在提升树算法中,残差 y-Ft-1(x) 是损失函数 1/2(y-F(x))2 的负梯度方向,因此可以将其推广到其他不是平方误差(分类或是排序问题)的损失函数。也就是说,梯度提升算法是一种梯度下降算法,不同之处在于更改损失函数和求其负梯度就能将其推广。即,可以将结论推广为对于一般损失函数也可以利用损失函数的负梯度近似拟合残差。

补充:

因为在GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。所以在这里补充一下泰勒公式和用泰勒公式推导梯度下降法请添加图片描述
用泰勒公式推导梯度下降法:
请添加图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值