GBDT算法原理个人总结

0.前言

本文仅仅是自己的学习总结,好记性不如烂笔头,相信对你也会有一些启发吧,可能会与其他博客有很多相似的地方,如若侵权,立删。

1.提升树

在讲GBDT之前,首先要讲一下提升树(Boosting Tree),提升树是以分类树或回归树为基本分类器的提升方法,实际采用的是加法模型和前向分布算法。针对分类和回归的不同问题,主要区别在于回归问题使用平方误差损失函数,分类问题使用指数损失函数。对于二分类问题,提升树只需把AdaBoost算法中的基本分类器限制为二类分类树即可,是AdaBoost算法的特殊情况。在这里主要讨论回归问题的提升树。

回归问题的提升树算法流程:

输入:训练数据集T=\left \{(x_{1}, y_{1}), (x_{2}, y_{2})...... (x_{n}, y_{n})\right \}

输出:提升树f_{M}(x)

(1):初始化f_{0}(x)=0

(2):m=1,2,3,4........,M

        (a): 计算残差:

r_{mi}=y_{i}-f_{m-1}(x_{i}), i=1,2, 3......N

        (b):拟合残差r_{mi}学习一个回归树,得到T(x, \o _{m})

        (c):更新

f_{m}(x)=f_{m-1}+T(x, \o _{m})

(3): 得到的回归问题提升树:

f_{M}(x)=f_{0}(x)+\sum_{m=1}^{M}T(x,\o _{m})

附:以上算法流程来自《李航统计学习方法》

上述伪代码中为啥要计算残差:

对于第m棵树,是在f_{m-1}(x)给定的情况下,求解T(x, \o _{m}),求解的目标是使损失函数的值最小,从而可得:

\large \O _{m}=\underset{\O_{m}}{argmin}\sum_{i=1}^{N}L(y_{i}, f_{m-1}(x_{i})+T(x_{i}, \O _{m}))

当采用平方误差损失函数时,

L(y, f_{m}(x))=(y-f_{m}(x))^{2}

f_{m}(x)=f_{m-1}+T(x, \o _{m})可知,上式可变换为:

L(y, f_{m}(x))=L(y, f_{m-1}(x)+T(x,\o _{m}))=[(y- f_{m-1}(x))-T(x,\o _{m})]^{2}

这里可以让:

r=y-f_{m-1}(x)

则损失函数可变换成:

 [(y- f_{m-1}(x))-T(x,\o _{m})]^{2}=[r-T(x,\o _{m})]^{2}

为了降低损失值,则第 m 棵树 T(x,\o _{m}) 拟合当前的残差 r 就可以了,这个树每个叶子节点输出的值就是落到每个叶子节点的残差值的均值

以上就是提升树的理论。

2.GBDT算法理论

提升树利用加法模型和前向分布算法实现学习的优化过程,通过前面的提升树可知,提升树通过残差就可以解决回归问题,这不是挺好的吗?为什么又提出GBDT呢,其实准确地说:提升树应该是GBDT在取平方误差损失函数时候的一个特例,GBDT拟合的不再是残差,而是负梯度,当损失函数是平方误差时,负梯度就是残差,但为其他损失函数时,就不能认为是残差了,GBDT思想不再局限于损失函数为何物!下面细说。

GBDT思想:

GBDT第 \large m 棵树需要拟合的负梯度公式如下:

\large -[\frac{\partial L(y,f(x_{i}))}{\partial f(x_{i})}]_{f(x)=f_{m-1}(x)}

先不考虑GBDT的算法流程,咱们先想想为啥去拟合负梯度:

无论什么模型,我们最终的目标是使损失函数值不断的降低。了解过梯度下降法的可以想到,损失函数的负梯度就是函数下降最快的方向:

\large \theta _{_{k}} = \theta _{_{k-1}} -\eta \frac{\partial f(\theta _{_{k-1}})}{\partial \theta _{k-1}}

上式可以通过泰勒一阶展开式证明负梯度是函数下降最快的方向:

首先数学上的泰勒展开式如下:

f(x+\Delta x)=f(x)+f^{'}(x)\Delta x+\frac{f^{''}(x)}{2!}\Delta x^{^{2}}+......+\frac{f^{(n)}(x)}{n!}\Delta x^{^{n}}+o(\Delta x)

对于函数 f(\theta _{_{k+1}}) , 通过泰勒一阶展开可得:

f(\theta _{_{k+1}})\approx f(\theta _{_{k}})+\frac{\partial f(\theta _{k})}{\partial \theta _{k}}(\theta _{_{k+1}}-\theta _{_{k}})

则优化函数f(\theta _{_{k+1}})使其递减,则:

\large \theta _{_{k+1}} - \theta _{_{k}} =-\eta \frac{\partial f(\theta _{_{k}})}{\partial \theta _{k}}

通过以上思想,应用到GBDT中:

因为GBDT的目标也是让损失函数值逐步降低,当然可以用损失函数的负梯度了,GBDT是如何推导的呢?

GBDT的损失函数\large L(y, f_{_{m-1}}(x)+T(x, \o _{m})),通过泰勒一阶展开式得到结果如下:

\large L(y, f_{_{m-1}}(x)+T(x, \o _{m}))\approx L(y, f_{_{m-1}}(x))+\frac{\partial L(y, f_{_{m-1}}(x))}{\partial f_{_{m-1}}(x)}T(x, \o _{m})

则优化损失函数 \large L 使其递减,可以使:

\large T(x, \o _{m})=-\eta \frac{\partial L(y, f_{_{m-1}}(x))}{\partial f_{_{m-1}}(x)}

所以GBDT的第 \large m 棵树通过拟合损失函数的负梯度去降低损失值,好像和GBDT的负梯度差一个\large \eta。如果使用的损失函数使平方误差损失函数,那么它的负梯度其实就是残差,所以得到本节开头的结论:提升树是GBDT在损失函数取平方误差时的一个特例。

GBDT的算法流程:

(1)初始化学习器:

\large f_{0}(x)=\underset{c}{argmin}\sum_{i=1}^{N}L(y_{i}, c)

(2)对\large m=1,2,3,.........M

             (a)对\large i=1,2,3,...........N,计算

\large \gamma _{mi}=-[\frac{\partial L(y,f(x_{i}))}{\partial f(x_{i})}]_{f(x)=f_{m-1}(x)}

           (b)对 \large \gamma _{mi} 拟合一个回归树,得到第\large m棵树的叶子节点区域\large R_{mj}\large j=1,2,3........J

           (c)对\large j=1,2,3,........J,每个叶子节点的拟合值为:

\large c_{mj}=\underset{c}{argmin}\sum_{x_{i}\in R_{mj}}L(y_{i}, f_{m-1}(x_{i})+c)

           (d)更新:

\large f_{m}(x)=f_{m-1}(x)+\sum_{j=1}^{J}c_{mj}I(x\in R_{mj})

                     其中 \large I(x\in R_{mj}) 取1或者0

(3)最终的GBDT的模型:

\large F(x) = f_{M}(x)=\sum_{m=1}^{M}\sum_{j=1}^{J}c_{mj}I(x\in R_{mj})

额,就写到这里吧,完结撒花。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GBDT(Gradient Boosting Decision Tree)是一种集成学习算法,它通过多个决策的集成来进行预测和分类。GBDT算法原理是通过迭代的方式,每次迭代都训练一个新的决策来纠正前面所有决策的错误。 下面是GBDT算法的基本原理: 1. 初始化:首先,GBDT算法使用一个初始的预测值作为基准,通常可以选择训练集的平均值作为初始预测值。 2. 迭代训练:对于每次迭代,GBDT算法会训练一个新的决策模型。在训练过程中,通过计算损失函数的负梯度来纠正前面所有决策的错误。 3. 损失函数:GBDT算法通常使用平方损失函数或对数损失函数来衡量模型的误差。在每次迭代中,通过计算真实值与当前模型预测值之间的差异来更新模型。 4. 加权预测:对于每次迭代,新训练出的决策会给出一个预测结果。为了将多个决策的预测结果进行加权,通常会给每个决策赋予一个权重,这些权重可以通过优化目标函数来确定。 5. 集成预测:最后,GBDT算法将所有决策的预测结果进行加权求和,得到最终的集成预测结果。 GBDT算法的优点包括:能够处理各种类型的特征,对异常值和噪声具有较好的鲁棒性,能够学习非线性关系等。同时,GBDT算法也存在一些挑战,如对参数调优敏感,计算复杂度较高等。 GBDT算法机器学习中有广泛的应用,尤其在预测和回归问题上表现出色。它可以有效地处理大规模数据集和高维特征,同时具有较好的泛化能力和鲁棒性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿尔卑斯糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值