Processing math: 100%
avatar

机器学习(九)集成学习之GDBT

一、模型介绍

   提升树模型是以分类树或回归树为基本分类器的提升方法,其采用加法模型前向分布算法。基于处理过程中所使用的损失函数的不同,我们有用平方误差损失函数的回归问题,使用指数损失函数的分类问题,以及一般损失函数的一般决策问题

   GDBT(Gradient Descent Boosting Tree),梯度提升树,是以回归树为基本分类器的提升方法。是一种基于残差的处理方法,常用来处理回归类问题

   提升树模型可以表示为决策树的加法模型

fM(x)=Mm=1T(x;Θm)

   其中,T(x;Θm) 表示第m颗决策树,Θm 表示决策树的参数,M 表示树的个数。

   在GDBT中采用的损失函数为平方差损失函数

L(y,f(x))=(yf(x))2

1、算法思想

   GBDT的前向分布算法为:

f0(x)=0fm(x)=fm1(x)+T(x;Θm),m=1,2,...,MfM(x)=Mm=1T(x;Θm)

   在前向分布算法的第m步,给定当前模型fm1(X) ,我们要求解:

Θm=argminΘNi=1L(yi,fm1(xi)+T(xi;Θm))

   当我们采用平方误差损失函数是,我们要求求解的目标为:

L(yi,fm1(xi)+T(xi;Θm))=[yfm1(x)T(x;Θm)]2=[rT(x;Θm)]2

   这里,我们记r=yfm1(x) ,就是当前模型拟合数据的残差,所以,对于回归问题的提升树算法来说,我们只需要简单的拟合当前模型的残差就行。那么回归问题的提升树算法叙述如下:

   首先初始化f0(x)=0 ,初始化第一个残差数据集ri=yif0(xi) (原数据集),根据原数据建立一颗回归树T(x;Θ0) ,根据回归树得到的结果,再次计算残差,将这次得到的残差作为下一颗回归树的数据集,得到回归树T(x;Θm) ,并且更新fm(x)=fm1(x)+T(x;Θm) ,不断地迭代,我们就能够得到最终的集成模型:

1


2、GDBT对提升树的优化

   上面我们所提到的其实只是提升树在回归问题的求解过程而已,并不是真正的GDBT,对于提升树而言,当损失函数是平方损失或指数损失函数时,每一步的优化是很简单的,但是对于一般的损失函数而言,他的优化过程就比较难,我们很难找到最优的Θm ,此时,我们就是用梯度下降的近似方法来近似其最优解。修改后的算法过程如下:

   首先初始化f0(x)=c ,即初始化它为能够使损失函数最小的一个常数值。第二步,将损失函数的负梯度作为当前模型的值,将它作为残差的估计,拟合一个树。得到这棵树的叶节点区域Rmj ,之后利用线性搜索来估计叶节点区域的值cmj,使损失函数最小化(这一步的意思就是,给叶子节点分配合适的值,使得损失函数最小化)。然后更新回归树fm(x) ,不断地迭代,直到输出最终模型。

2


3、示例

   我们所做的工作是年龄预测,所用到的用户特征包括购物金额、上网时长、上网时间、百度提问等等。 为了简单起见,我们的训练集只有四个人,A,B,C,D。他们的年龄分别是14,16,24,26。以这个为例,我们来看一下GDBT是如何运作的。

   第一步:我们使用原始数据建立一个回归树

3

   我们可以根据回归的结果,计算这A、B、C、D的残差,分别是14-15=-1、16-15=1、24-25=-1、26-25=1,将残差作为训练集训练下一颗回归树

4

   根据回归的结果,计算这A、B、C、D的残差,发现都是0,我们可以退出迭代了。

   在这一个提升书的构建过程中,我们只迭代了两次,使用了两个树,得到了我们的集成模型,下面我们看看,我们如何根绝模型得到结果。

   将A作为输入,模型的第一棵树输出15,然后模型的第二棵树输出-1。最后对A的预测结果为15+(-1)=14。因此我们的模型对A的预测结果为14。

   至此,GBDT终


4、注意

   当我们直接使用残差来拟合回归树时,很容易造成过拟合。为了减少过拟合的危险,我们会给残差加一个学习率α ,即在构建一个新的决策树时,我们使用的训练集为α·r ,通过这样多次迭代的方式,来最终生成我们的集成模型

参考链接

  • 李航老师的《统计机器学习》
  • GBDT详解
文章作者: 白丁
文章链接: http://baidinghub.github.io/2020/04/03/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%B9%9D%EF%BC%89%E9%9B%86%E6%88%90%E5%AD%A6%E4%B9%A0%E4%B9%8BGDBT/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BaiDing's blog
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论
0 条评论
未登录用户
支持 Markdown 语法

来做第一个留言的人吧!