【机器学习】深入剖析梯度提升决策树(GBDT)分类与回归

1. 梯度提升决策树概述

梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是以决策树为基学习器的一种Boosting算法,它在每一轮迭代中建立一个决策树,使当前模型的残差在梯度方向上减少;然后将该决策树与当前模型进行线性组合得到新模型;不断重复,直到决策树数目达到指定的值,得到最终的强学习器。

上一篇博客【机器学习】集成学习——Boosting与AdaBoost原理详解与公式推导对AdaBoost算法做了总结,GBDT与AdaBoost的主要区别有:

1. 迭代策略不同:AdaBoost在每一轮迭代中都要更新样本分布;GBDT迭代学习上一轮得到的加法模型与真实值之间的残差,它并不显式改变样本分布,而是利用残差变相地增大错误样本的权重。

2. 组合策略不同:AdaBoost中误差率越低的基学习器在最终模型中所占比重越高,而GBDT每棵树的权值都相等。

3. 基学习器限定不同:AdaBoost的基学习器不限,使用最广泛的是决策树和神经网络;而GBDT的基学习器限定为决策树,且是回归树。

4. 损失函数不同:AdaBoost分类算法的损失函数限定为指数损失,而GBDT可以是指数损失函数和对数似然函数。

2. 提升树

在介绍梯度提升决策树之前,我们首先来介绍提升树。

介绍了提升方法本身是采用加法模型和前向分步算法的一种方法,而提升树(Boosting Tree)是以决策树为基学习器的一种提升方法,对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。

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

                                        H_ { T } ( x ) = \sum _ { t = 1 } ^ { T } h \left( x ; \Theta _ { t } \right)                         (1)

其中,h \left( x ; \Theta _ { t } \right)表示第t棵决策树;\Theta _ { t }是的参数;T是决策树个数。

根据前向分步算法,第t步将要得到的提升树模型为:

                                        H _ { t } ( x ) = H_ { t - 1 } ( x ) + h \left( x ; \Theta _ { t } \right)                         (2)

其中,H _ { t } ( x )为当前模型。那么第Ť轮迭代的目标是得到能最小化{H_t} \ left(x \ right)的损失函数的第t棵决策树h \left( x ; \Theta _ { t } \right)的参数,即:

                                \hat { \Theta } _ { t } = \arg \min _ { \Theta _ { t } } \sum _ { i = 1 } ^ { m } L \left( y _ { i } , H _ { t - 1 } \left( x _ { i } \right) + h \left( x _ { i } ; \Theta _ { t } \right) \right)                         (3)

对于二类分类问题,只要把AdaBoost中的基分类器限定为二类分类树即可。可以说这时的提升树是AdaBoost的特殊情况。

对于回归问题,当采用平方误差损失函数( y - H ) ^ { 2 }时,第t次迭代的损失是:

                                \begin{array}{l} L\left( {y,{H_t}(x)} \right) = L\left( {y,{H_{t - 1}}(x) + h\left( {x;{\Theta _t}} \right)} \right)\\ {\rm{ = }}{\left[ {y - {H_{t - 1}}(x) - h\left( {x;{\Theta _t}} \right)} \right]^2}\\ {\rm{ = }}{\left[ {​{r_t} - h\left( {x;{\Theta _t}} \right)} \right]^2} \end{array}                         (4)

h\left( {x;{\Theta _t}} \right){\rm{ = }}y - {H_{t - 1}}(x){\rm{ = }}{r_t}时,损失最小。也就是说,第t次迭代的优化目标是拟合当前模型的残差。

3. 梯度提升决策树原理

在提升方法中,每次迭代的优化问题可以分为两部分:一、求叶结点区域;二、给定叶结点区域,求区域内最优拟合值。

对于第二个问题,它是一个简单的“定位”估计,最优解很容易得到;但对于第一个问题,当损失函数不是平方误差和指数损失,而是一般损失函数时,求解区域是困难的,最小化损失函数问题的简单、快速求解算法是不存在的。

针对这一问题,梯度提升决策树利用最速下降法来近似求解加法模型中的每一颗决策树,具体来说,就是在每次迭代中,使新建的决策树都沿损失函数减少最快的方向——负梯度方向减少损失函数

当前模型的负梯度为:

                                r_{ti} = - \left[ \frac { \partial L \left( y , H \left( x _ { i } \right) \right) } { \partial H \left( x _ { i } \right) } \right] _ { H ( x ) = H_ { t - 1 } ( x ) }                         (5)

当损失函数是平方误差时,当前模型的负梯度就等于残差,沿负梯度方向减少损失函数就相当于拟合残差。

但当损失函数不是平方误差时,负梯度就是残差的近似值,称为“广义残差或伪残差”。例如,当损失函数是绝对误差时,负梯度是残差的符号函数,因此在每次迭代时,决策树将拟合当前残差的符号。

总之,GBDT利用广义残差来拟合每一轮迭代中的回归树。

一些广泛应用的损失函数的梯度如下表:

GBDT常用损失函数列表
GBDT常用损失函数列表

4. GBDT回归算法 

下面介绍GBDT回归算法,也可以当做GBDT的通用算法。必须声明的是,无论是GBDT分类算法还是回归算法,弱学习器都是回归树,这是由残差本质决定的。


输入:训练集D = \left\{ \left( x _ { i } , y _ { i } \right) \right\} _ { i = 1 } ^ { m },其中x _ { i } \in \chi \subseteq R ^ { d}y _ { i } \in \mathcal { Y } \subseteq \mathbf { R };损失函数L

过程:

        (1)初始化模型H _ { 0 } ( x ),估计使损失函数最小化的常数值\gamma,初始模型是只有一个根结点的树。

                               {H_0}(x) = \mathop {\arg \min }\limits_\gamma \sum\limits_{i = 1}^m L \left( {​{y_i},\gamma } \right)

        (2)对迭代轮次{t = 1,2,\ ldots,T}

                (a)对样本i = 1,2 , \cdots , m,计算当前模型的广义残差:

                                r _ { t i } = - \left[ \frac { \partial L \left( y _ { y } , H \left( x _ { i } \right) \right) } { \partial H \left( x _ { i } \right) } \right] _ { H ( x ) = H_ { t - 1 } ( x ) }                        

                (b)利用\left( {​{x_i},{r_{ti}}} \right),i = 1,2, \ldots ,m拟合一棵回归树,得到第t棵树的叶结点区域{R_{tj}},j = 1,2, \cdots ,J

                (c)对每个叶结点区域{R_{tj}},j = 1,2, \cdots ,J,计算能使区域{R_{tj}}损失函数最小化的最佳预测值{\gamma _{tj}}

                                \gamma _ { t j } = \arg \min _ { \gamma } \sum _ { x _ { i } \in R _ { t j } } L \left( y _ { i } , H _ { t - 1 } \left( x _ { i } \right) + \gamma \right)

                (d)得到本轮迭代最佳拟合回归树:

                                h _ { t } ( x) = \sum _ { j = 1 } ^ { J } \gamma _ { t j } I \left( x \in R _ { t j } \right)

                (e)更新本轮迭代的加法模型:

                                H _ { t } ( x ) = H _ { t - 1 } ( x ) + h _ { t } ( x)= H _ { t - 1 } ( x ) + \sum _ { j = 1 } ^ { J } \gamma _ { t j } I \left( x \in R _ { t j } \right)

        (3)得到最终的强学习器:

                                H ( x ) = H _ { T } ( x ) = \sum _ { t = 1 } ^ { T } \sum _ { j = 1 } ^ { J } \gamma _ { t j } I \left( x \in R _ { t j } \right)

输出:回归树H ( x )


5. 二元GBDT分类算法

在分类任务中,由于样本输出是离散值,无法从输出类别拟合残差,因此使用类别的预测概率值和真实概率值的差来当做残差。

GBDT分类算法的损失函数可以取指数损失函数和对数似然函数,如果选择指数损失函数,则GBDT退化为AdaBoost。因此我们这里只讨论对数似然损失函数。

二元分类的对数似然损失函数是:

                                L ( y ,H ( x ) ) = \log ( 1 + \exp ( - 2y H( x ) ) )                         (6)

负梯度为:

                {r_{ti}} = - {\left[ {\frac{​{\partial L\left( {y,H\left( {​{x_i}} \right)} \right))}}{​{\partial H\left( {​{x_i}} \right)}}} \right]_{H(x) = {H_{t - 1}}(x)}} = \frac{​{2{y_i}}}{​{1 + \exp \left( {2{y_i}{H_{t - 1}}\left( {​{x_i}} \right)} \right)}}        (7)

利用\left( {​{x_i},{r_{ti}}} \right),i = 1,2, \ldots ,m拟合一棵回归树,得到第t棵树的叶结点区域{R_{tj}},j = 1,2, \cdots ,J

每个叶结点区域{R_{tj}},j = 1,2, \cdots ,J的最佳预测值{\gamma _{tj}}为:

                {\gamma _{tj}} = \underbrace {\arg \min }_\gamma \sum\limits_{​{x_i} \in {R_{tj}}} {\log } \left( {1 + \exp \left( { - {2y_i}\left( {​{H_{t - 1}}\left( {​{x_i}} \right) + \gamma } \right)} \right)} \right)        (8)

由于上式比较难优化,我们用近似值代替:

                                {\gamma _{tj}} = \frac{​{\sum\limits_{x \in {R_{tj}}} {​{r_{ti}}} }}{​{\sum\limits_{x \in {R_{tj}}} {\left| {​{r_{ti}}} \right|} (2 - |{r_{ti}}|)}}                         (9)

除了负梯度计算和叶子节点最佳预测值计算不同,其他都与回归算法一致。

得到最终的模型H ( x ) = H _ { T } ( x ) = \sum _ { t = 1 } ^ { T } \sum _ { j = 1 } ^ { J } \gamma _ { t j } I \left( x \in R _ { t j } \right)后,用来进行概率估计得到:

                                P ( y = 1 | x ) = p = \frac { e ^ { 2H ( x ) } } { 1 + e ^ { 2 H ( x ) } } = \frac { 1 } { 1 + e ^ { - 2 H ( x ) } }                         (10)

                                P ( y = - 1 | x ) = 1 - p = \frac { 1 } { 1 + e ^ { 2 H ( x ) } }                         (11)

6. GBDT优缺点

优点:

1. 可以灵活处理混合型数据(异构特征);

2. 强大的预测能力;

3. 在输出空间中对异常点的鲁棒性(通过具有鲁棒性的损失函数实现,如Huber损失函数和分位数损失函数)。

缺点:

1. 在更大规模的数据集或复杂度更高的模型上的可扩展性差;

2. 由于提升算法的有序性,因此很难做到并行。

参考文献:

1. 《统计学习方法》第八章提升方法——李航

2. 《统计学习基础》第十章提升和加法树——Trevor Hastie等

3. 论文《Greedy Function Approximation: A Gradient Boosting Machine》——Jerome H. Friedman

4. 梯度提升树(GBDT)原理小结

5. GBDT原理详解

6. Scikit-learn 0.19.x 中文文档 Gradient Tree Boosting(梯度树提升)

 

 

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
梯度提升(Gradient Boosting Decision Tree,简称GBDT)是一种流行的机器学习算法,常用于回归分类任务。下面以回归为例,详细介绍GBDT的工作原理。 在回归任务中,我们的目标是预测一个连续变量的值。GBDT通过多次迭代的方式,逐步拟合训练数据的残差,最终得到一个强大的回归模型。 首先,GBDT使用一个单独的决策树作为基模型。该是通过最小化损失函数(例如均方误差)建立的,将输入特征映射到预测值上。 接下来,GBDT通过计算真实值与当前模型的预测值之间的残差,得到一个新的训练数据集。这些残差成为下一棵决策树的目标。 然后,通过训练一棵新的决策树来拟合残差数据。这个过程是一个迭代的过程,每迭代一次,都会拟合一棵新的决策树,并更新模型的预测值。 最后,将每棵的预测结果累加,得到最终的回归模型。这个模型能够准确地预测目标变量的值。 举例来说,假设我们有一组数据,包含一些自变量(如房屋面积、房间数量等)和一个连续的因变量(如房屋价格)。我们想建立一个回归模型来预测房屋价格。 首先,我们使用一棵决策树来拟合这些数据,但是预测结果可能与真实值存在差距。 然后,我们计算真实值和当前模型的预测值之间的残差。使用这些残差作为新的目标,我们训练一棵新的决策树。 接着,我们将第一棵决策树和第二棵决策树的预测结果相加,得到一个更新后的预测值。 我们可以反复迭代这个过程,每次都拟合一棵新的决策树,并更新预测值。最终,我们将所有决策树的预测结果相加,得到最终的回归模型。 通过这种方式,GBDT能够逐步提升模型的性能,对于复杂的非线性关系,也能够进行有效的拟合。 总而言之,GBDT是一种基于决策树机器学习算法,通过迭代拟合残差来构建一个强大的回归模型。它在回归任务中具有广泛的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值