avatar

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

一、模型介绍

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

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

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

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

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

1、算法思想

   GBDT的前向分布算法为:

   在前向分布算法的第m步,给定当前模型$ f_{m-1}(X)$ ,我们要求解:

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

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

   首先初始化$ f_0(x)=0$ ,初始化第一个残差数据集$ r_i=y_i-f_0(x_i)$ (原数据集),根据原数据建立一颗回归树$ T(x;\Theta_0)$ ,根据回归树得到的结果,再次计算残差,将这次得到的残差作为下一颗回归树的数据集,得到回归树$ T(x;\Theta_m)$ ,并且更新$ f_m(x) = f_{m-1}(x)+T(x;\Theta_m)$ ,不断地迭代,我们就能够得到最终的集成模型:

1


2、GDBT对提升树的优化

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

   首先初始化$ f_0(x) =c$ ,即初始化它为能够使损失函数最小的一个常数值。第二步,将损失函数的负梯度作为当前模型的值,将它作为残差的估计,拟合一个树。得到这棵树的叶节点区域$ R_{mj}$ ,之后利用线性搜索来估计叶节点区域的值$ c_{mj}$,使损失函数最小化(这一步的意思就是,给叶子节点分配合适的值,使得损失函数最小化)。然后更新回归树$ f_m(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、注意

   当我们直接使用残差来拟合回归树时,很容易造成过拟合。为了减少过拟合的危险,我们会给残差加一个学习率$ \alpha$ ,即在构建一个新的决策树时,我们使用的训练集为$ \alpha ·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
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论