由adboost, gbdt到xgboost,从目标函数说起

本文详细介绍了Adaboost、GBDT和XGBoost的原理,特别是它们的目标函数。Adaboost通过指数损失函数和基分类器权重更新样本权重。GBDT使用负梯度来拟合CART回归树,适用于各种损失函数。XGBoost则引入正则化项,优化二次目标函数,实现更高效训练。文章探讨了为何GBDT采用负梯度和XGBoost的分裂规则,并提及了回归和多分类问题的处理方法。

Adboost

原理

Adboost是利用前一轮弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去,简单的说是Boosting框架+任意基学习器算法+指数损失函数。它是加法模型,学习的是前向分布学习算法,损失函数为指数函数的分类问题;另外,其基分类器可以为任何学习器,使用最广泛的是决策树和神经网络;对于决策树,使用CART分类回归树

目标函数

损失函数为指数函数,即定义损失函数为:
L = a r g m i n ⏟ a , G ∑ i = 1 m e x p ( − y i f k ( x ) ) − − − ( 1 ) L = \underset{a,G}{ \underbrace{arg min}}\sum_{i=1}^mexp(-y_if_k(x)) ---(1) L=a,G argmini=1mexp(yifk(x))1
其中, f k ( x ) f_k(x) fk(x)为第k轮的学习器 f k ( x ) = ∑ i = 1 k α i G i ( x ) f_{k}(x) = \sum\limits_{i=1}^{k}\alpha_iG_{i}(x) fk(x)=i=1kαiGi(x), G(x)为基分类器, α \alpha α为每个基分类器的权重,m为样本数。
建立第k个基分类器时:
( α k , G k ( x ) ) = a r g    m i n    ⏟ α , G ∑ i = 1 m e x p [ ( − y i ) ( f k − 1 ( x ) + α G ( x ) ) ] = a r g    m i n    ⏟ α , G ∑ i = 1 m w k i ′ e x p [ − y i α G ( x ) ] (\alpha_k, G_k(x)) = \underbrace{arg\;min\;}_{\alpha, G}\sum\limits_{i=1}^{m}exp[(-y_i) (f_{k-1}(x) + \alpha G(x))] \\ = \underbrace{arg\;min\;}_{\alpha, G}\sum\limits_{i=1}^{m}w_{ki}'exp[-y_i\alpha G(x)] (αk,Gk(x))=α,G argmini=1mexp[(yi)(fk1(x)+αG(x))]=α,G argmini=1mwkiexp[yiαG(x)]
注意此时对于单个基分类器 G k ( x ) G_k(x) Gk(x)而言,对任意的 α \alpha α
G k ( x ) = a r g    m i n    ⏟ G ∑ i = 1 m w k i ′ I ( y i ≠ G ( x i ) ) − − − ( 2 ) G_k(x) = \underbrace{arg\;min\;}_{G}\sum\limits_{i=1}^{m}w_{ki}'I(y_i \neq G(x_i)) --- (2) Gk(x)=G argmini=1mwkiI(yi=G(xi))2
继续公式(adboost-1)
a r g    m i n    ⏟ α , G ∑ i = 1 m w k i ′ e x p [ − y i α G ( x ) ] = a r g    m i n    ⏟ α ∑ y i = G k w k i ′ e − α + ∑ y i ≠ G k w k i ′ e α = ( e α − e − α ) ∑ i = 1 m w k i ′ I ( y i ≠ G ( x i ) ) + e − α ∑ i = 1 m w k i ′ \underbrace{arg\;min\;}_{\alpha, G}\sum\limits_{i=1}^{m}w_{ki}'exp[-y_i\alpha G(x)]\\ =\underbrace{arg\;min\;}_{\alpha}\sum\limits_{y_i=G_k}w_{ki}'e^{-\alpha} + \sum\limits_{y_i\neq G_k}w_{ki}'e^{\alpha}\\ =(e^{\alpha}-e^{-\alpha})\sum_{i=1}^mw_{ki}'I(y_i \neq G(x_i)) + e^{-\alpha }\sum_{i=1}^mw_{ki}' α,G argmini=1mwkiexp[yiαG(x)]=α argminyi=Gkwkieα+yi=Gkwkieα=(eαeα)i=1mwkiI(yi=G(xi))+eαi=1mwki
将求得的 G k ( x ) G_k(x) Gk(x)代入上式,并对 α \alpha α求导,使之为0,即得到
α k = 1 2 l o g 1 − e k e k \alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k} αk=21logek1ek

其中, e k e_k ek即为我们前面的分类误差率。
  e k = ∑ i = 1 m w k i ′ I ( y i ≠ G ( x i ) ) ∑ i = 1 m w k i ′ = ∑ i = 1 m w k i I ( y i ≠ G ( x i ) ) e_k = \frac{\sum\limits_{i=1}^{m}w_{ki}^{'}I(y_i \neq G(x_i))}{\sum\limits_{i=1}^{m}w_{ki}^{'}} = \sum\limits_{i=1}^{m}w_{ki}I(y_i \neq G(x_i)) ek=i=1mwkii=1mwkiI(yi=G(xi))=i=1mwkiI(yi=G(xi))

利用 f k ( x ) = f k − 1 ( x ) + α k G k ( x ) f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x) fk(x)=fk1(x)+αkGk(x) w k i ′ = e x p ( − y i f k − 1 ( x ) ) w_{ki}^{'} = exp(-y_if_{k-1}(x)) wki=exp(yifk1(x))更新得到权重:
w k + 1 , i ′ = w k i ′ e x p [ − y i α k G k ( x ) ] w_{k+1,i}^{'} = w_{ki}^{'}exp[-y_i\alpha_kG_k(x)] wk+1,i=wkiexp[yiαkGk(x)]

由上可知,指数损失函数(1)基分类器(2) 的选择,决定了样本权重的更新 w k + 1 , i w_{k+1,i} wk+1,i和弱学习器的权重系数 α k \alpha_k αk

GBDT

原理

相比于adboost,GBDT也是迭代,也使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,同时迭代思路和Adaboost也有所不同,简单的说Boosting框架+CART回归树模型+任意损失函数

目标函数

对于GBDT,其要优化的目标函数进行一阶泰勒展开:
L ( y 0 , y t − 1 + f ( x ) ) = L ( y 0 , y t − 1 ) + L ′ ( y 0 , y t − 1 ) f ( x ) L(y_0,y^{t-1}+f(x))=L(y_0,y^{t-1}) + L'(y_0,y^{t-1})f(x) L(y0,yt1+f(x))=L(y0,yt1)+L(y0,yt1)f(x)
利用上式无法直接求得极小值,GBDT使用损失函数的负梯度来拟合,得到CART回归树

  • 负梯度为 r t i = − ∂ L ( y 0 , y i t − 1 ) ∂ y i t − 1 r_{ti}=-\frac{\partial L(y_0,y^{t-1}_i)}{\partial y^{t-1}_i} rti=yit1L(y0,yit1)
  • 利用 ( x i , r t i ) ( i = 1 , 2 , . . . m ) (x_i,r_{ti})(i=1,2,...m) (xi,rti)(i=1,2,...m),拟合第t颗回归树

通过损失函数的负梯度来拟合,我们找到了一种通用的拟合损失误差的办法,这样无轮是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。

算法流程

输入是训练集 T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } T=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\} T={(x,y1),(x2,y2),...(xm,ym)},最大迭代次数T,损失函数为L.

输入是强学习器f(x)

  1. ( x i , y i 0 )   ( i = 1 , 2 , 3 , . . . m ) (x_i,y^0_i)\ (i=1,2,3,...m) (xi,yi0) (i=1,2,3,...m)拟合得到CART回归树 f 0 ( x ) f_0(x) f0(x)

  2. 计算负梯度
    r t i = − ∂ L ( y 0 , y i t − 1 ) ∂ y i t − 1 r_{ti}=-\frac{\partial L(y_0,y^{t-1}_i)}{\partial y^{t-1}_i} rti=yit1L(y0,yit1)

  3. ( x i , r t i )   ( i = 1 , 2 , 3 , . . . m ) (x_i,r_{ti})\ (i=1,2,3,...m) (xi,rti) (i=1,2,3,...m),拟合下一颗CART树

  4. 将所有树汇总
    F ( x ) = ∑ t f t ( x ) F(x) = \sum_tf^t(x) F(x)=tft(x)

XGBOOST

原理

类似于GBDT,但将其目标函数展开到二次,并且直接加入正则化项,构成结构风险函数;Boosting框架+树模型+任意损失函数。 这里树模型分裂方式不同于CART采样gini系数或均方差,而是自定义的增益规则。

目标函数

O b j = L ( y 0 , y t − 1 + f ( x ) ) = L ( y 0 , y t − 1 ) + L ′ ( y 0 , y t − 1 ) f ( x ) + 1 2 L ′ ′ ( y 0 , y t − 1 ) f 2 ( x ) Obj = L(y_0,y^{t-1}+f(x))=L(y_0,y^{t-1}) + L'(y_0,y^{t-1})f(x) + \frac{1}{2}L''(y_0,y^{t-1})f^2(x) Obj=L(y0,yt1+f(x))=L(y0,yt1)+L(y0,yt1)f(x)+21L(y0,yt1)f2(x)

加上正则化项,以及所有的样本有,结构风险最小目标

O b j = ∑ i = 1 n L ( y 0 , y t − 1 ) + L ′ ( y 0 , y t − 1 ) f ( x ) + 1 2 L ′ ′ ( y 0 , y t − 1 ) f 2 ( x ) ) + γ ∗ T + 1 2 λ ∑ j = 1 T w j 2 \begin {aligned} Obj = & \\ & \sum_{i=1}^nL(y_0,y^{t-1}) + L'(y_0,y^{t-1})f(x) + \frac{1}{2}L''(y_0,y^{t-1})f^2(x) ) + \gamma*T + \frac{1}{2}\lambda \sum_{j=1}{T}w_j^2 \end{aligned} Obj=i=1nL(y0,yt1)+L(y0,yt1)f(x)+21L(y0,yt1)f2(x))+γT+21λj=1Twj2

继续处理,其中w即是f(x)
∑ i = 1 n L ( y 0 , y t − 1 ) + L ′ ( y 0 , y t − 1 ) f ( x ) + 1 2 L ′ ′ ( y 0 , y t − 1 ) f 2 ( x ) ) + γ ∗ T + 1 2 λ ∑ j = 1 T w j 2 = ∑ j = 1 T [ G w j + 1 2 ( H + λ ) w j 2 ] + γ ∗ T \begin {aligned} & \sum_{i=1}^nL(y_0,y^{t-1}) + L'(y_0,y^{t-1})f(x) + \frac{1}{2}L''(y_0,y^{t-1})f^2(x) ) + \gamma*T + \frac{1}{2}\lambda \sum_{j=1}{T}w_j^2 \\ & = \sum_{j=1}^T[Gw_j + \frac{1}{2}(H+\lambda )w_j^2] + \gamma *T \end{aligned} i=1nL(y0,yt1)+L(y0,yt1)f(x)+21L(y0,yt1)f2(x))+γT+21λj=1Twj2=j=1T[Gwj+21(H+λ)wj2]+γT
将其最小化,有
w j ∗ = − G j H j + λ O b j = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T \begin {aligned} & w_j^* = -\frac{G_j}{H_j+\lambda}\\ &Obj=-\frac{1}{2}\sum_{j=1}^T\frac{G_j^2}{H_j+\lambda} + \gamma T \end{aligned} wj=Hj+λGjObj=21j=1THj+λGj2+γT
对于下一颗树的学习,即寻找结点使得下式最大
G a i n = 1 2 [ G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ ] − γ Gain=\frac{1}{2}[\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}] - \gamma Gain=21[HL+λGL2+HR+λGR2HL+HR+λ(GL+GR)2]γ

问题

  1. 对比xgboost中可有目标函数得到分裂规则,gbdt由公式(1)怎样推导出使用负梯度来拟合的,为什么使用负梯度?

当损失函数是平方损失和对数损失时,每一步的优化是很简单的,但是对于一般的损失函数而言,往往每一步的优化不是那么容易,使用负梯度代替残差,从梯度下降考虑,可认为每一颗树拟合的是 δ L ′ \delta L' δL,其中 δ \delta δ为1,也可以为其他值;对比xgboost,该方式类似于梯度下降求解,而xgboost类似于牛顿法的优化。

GBDT整个求解可分为两部分,一是求解真实值与前t-1颗树差异,这里即负梯度过程;二是利用负梯度拟合CART树,然后针对回归问题,使用均方差,针对分类问题使用Gini系数。

而XGBOOST直接将上述两部分结合在一起:一是该真实值与前t-1颗树差异可认为是 w ∗ w^* w;二是直接利用公式来求最佳分裂点,而不利用均方差或者Gini系数。

  1. AdaBoost算法 关于回归模型怎样处理的,怎样处理多分类的,注意的点?
  • 统计学习方法:AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二类学习方法。

  • 对于 回归问题,可使用 加法模型,前向分步算法,损失上为平方误差损失函数,该算法称为提升树算法。

  • 多分类问题,参考文献,其每个分类器的权重需要变化。

  • 损失函数最小和具体的弱分类器无关, 我们根据由不同的样本权重和弱分类器的类型计算得到弱分类器,然后 α \alpha α通过最小化全局损失函数,得到当前的弱学习器的系数。

  • adaboost和其他boosting算法最大的差异在于其利用梯度来更新权重,而其他(gbdt) 是将梯度作为学习目标。

Ref:

  1. https://www.cnblogs.com/pinard/p/6140514.html
  2. https://www.zhihu.com/search?type=content&q=gbdt

欢迎关注公众号:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值