3. 梯度提升决策树(GBDT)详解

一、提升树

        以决策树为基函数的提升方法称为提升树。其中,分类问题采用二叉分类树,回归问题采用二叉回归树。sklearn中的提升树采用的是CART树。模型可以表示为决策树的加法模型:

f_M(x) = \sum_{m=1}^{M} T(x;\Theta _m)

 其中,T(x;\Theta _m)表示决策树,\Theta _m为决策树的参数,M为树的个数。       

提升树算法采用前向分步算法。首先,初始确定初始提升树为f_0(x) = 0。第m步的模型是f_m(x) = f_{m-1}(x) + T(x; \Theta _m)

其中,f_{m-1}(x)为当前模型,通过经验风险极小化确定下一棵决策树的参数\Theta _m

arg \ min_{\Theta _m} \sum_{i=1}^{N}L(y_i, f_{m-1}(x_i) + T(x_i; \Theta _m))

        由于树的线性组合能很好地拟合训练数据,即使数据中的输入与输出关系很复杂也是如此,所以提升树是一个高功能的学习算法。

        不同提升树算法的区别在于所采用的损失函数不同。例如,分类树采用指数损失函数;回归树采用平方误差损失函数;一般决策树采用一般损失函数。

       

        1. 回归问题提升树

        在之前的文章中已经介绍过二叉回归树,在这里不在进行赘述。对于回归问题,提升树采用平方误差损失函数,即

L(y, f(x)) = [y-f(x)]^2

带入第m步得到的提升树模型,得到

\begin{aligned} L(y, f(x)) &= [y - f(x)]^2 \\&=[y - f_{m-1}(x) - T(x; \Theta _m)]^2 \\ & =[r - T(x;\Theta _m)]^2 \end{aligned}

其中,r = y - f_{m-1}(x)为训练数据真实值与当前模型取值的差,即拟合数据的残差。要是上述的损失函数最小,只需训练的模型更好地拟合当前模型的残差即可。

        回归问题的提升树算法可描述如下:

        输入:训练数据集D

        输出:提升树f_M(x)

        训练过程:

        ① 初始化f_0(x) = 0 

        ② 对m = 1, \2,\ ...\ , \ M

               (a)计算残差

r_{mi} = y_i - f_{m-1}(x_i), \ \ \ \ i=1, \ 2, \ ..., \ N

               (b)拟合残差r_{mi},学习一个二叉回归树,得到T(x;\Theta _m)

               (c)更新f_m = f_{m-1} + T(x; \Theta _m)

        ③ 得到回归问题提升树

f_M(x) = \sum_{m=1}^{M} T(x; \Theta _m)

        

        2. 分类问题提升树  

        对于二分类问题,只需要将AdaBoost算法中的基学习器限制为二类分类树(只有一个根结点和两个叶子结点,高度为2的二叉树),基分类器的权重全部置为1即可。训练过程中用指数损失函数来调整样本数据的权重,从而让每个基分类器学习到不同的内容。

二、梯度下降

        首先介绍梯度下降法的整体思想。假设你现在站在某个山峰的顶峰,在天黑前要到达山底,在不考虑安全性的基础上,如何下山最快?

        最快的方法是:以当前所在的位置为基准点,按照该点最陡峭的方向向山底前进。走一段距离后,在重新以当前点为基准点,重复上述操作,知道到底山底(最低点)。在这个过程中,需要不停地去重新定位最陡峭的方向,才不会限于局部最优。

在下山过程中会面临两个问题:

  • 如何测量山峰的“陡峭”程度;这就是梯度。梯度是一个向量,梯度的方向是函数在指定点上升最快的方向,那么梯度的反方向自然就是下降最快的方向。计算方式是函数求偏导。

  • 每一步需要走多远;走太长距离,可能会错过最佳路线;最太短,下降速度会比较慢。这是步长。

        当前位置的梯度表示为\frac{\partial f}{\partial \theta },取步长\alpha,则下一步所在的位置如下:

{ \theta}' = \theta _m - \alpha \frac{\partial f}{\partial \theta }|_{\theta =\theta _m}

        总结:梯度下降用来求某个函数取最小值时,自变量对应的取值。

        

        1. 机器学习任务中的梯度下降

        在机器学习任务中,梯度下降一般运用在通过损失函数L(\theta )最小化求解模型参数\theta中。使用梯度下降算法求解最优模型参数\theta的过程如下:

        (1)确定当前位置\theta _t处的损失函数的梯度\frac{\partial L(\theta )}{\partial \theta _{t}}

        (2)用步长\eta乘以损失函数的梯度,得到当前位置下降的距离,即:\eta * \frac{\partial L(\theta )}{\partial \theta _t}

        (3)判断梯度下降的距离是否小于阈值\varepsilon,如果小于,则算法终止,当前的\theta _t即为求得的最优参数;否则进入步骤(4);

        (4)更新\theta _t,其更新表达式为

  • 7
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值