从adaboost到GBDT


AdaBoost

引言:
先从简单的说起吧,我们来看一下指数函数的曲线。
指数函数是 y = a x y = a^x y=ax的形式,它的曲线为:
在这里插入图片描述
当a = e时,很自然就如左图所示。
此时, y = e x y=e^x y=ex
当x<0时,y<1。当x≥0时,y≥1。


从前向分布算法说起

前向分布算法说,不管你的基函数是什么,损失函数是什么,只要你的模型是加法模型,就可以按照我这个框架去进行求解。
加法模型拥有m个基函数和对应的m个系数,它可以从前往后,一个一个地去求解。即
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x) =\sum_{m=1}^{M}{β_mb(x;γ_m)} f(x)=m=1Mβmb(x;γm)
其中, b ( x ; γ m ) b(x;γ_m) b(x;γm)为基函数, γ m γ_m γm是基函数的参数, β m β_m βm是基函数的系数。
那么它的经验损失就是:
min ⁡ β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x ; γ m ) ) \min\limits_{β_m,γ_m}\sum_{i=1}^{N}{L(y_i,\sum_{m=1}^{M}{β_mb(x;γ_m)})} βm,γmmini=1NL(yi,m=1Mβmb(x;γm))
那么,我们每步只需要学习其中一个基函数及它的系数,就是说我们每步只需要优化其中一个基函数对应的损失函数:
min ⁡ β , γ ∑ i = 1 N L ( y i , β b ( x ; γ ) ) \min\limits_{β,γ}\sum_{i=1}^{N}{L(y_i,βb(x;γ))} β,γmini=1NL(yi,βb(x;γ))
每一步极小化损失函数来得到参数 β m , γ m β_m, γ_m βm,γm,这样子,我们就可以求得整一个模型的总损失。
算法描述的话,是这样子的:
1.初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
2.对 m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M
极小化损失函数:
( β m , γ m ) = arg ⁡ min ⁡ β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x ; γ ) ) (β_m, γ_m)=\arg\min\limits_{β,γ}\sum_{i=1}^{N}{L(y_i, f_{m-1}(x_i)+βb(x;γ))} (βm,γm)=argβ,γmini=1NL(yi,fm1(xi)+βb(x;γ))
得到参数 β m , γ m β_m, γ_m βm,γm
更新:
f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+β_mb(x;γ_m) fm(x)=fm1(x)+βmb(x;γm)
3.得到加法模型
f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\sum_{m=1}^{M}β_mb(x;γ_m) f(x)=fM(x)=m=1Mβmb(x;γm)

以AdaBoost为例:
f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^{M}{α_mG_m(x)} f(x)=m=1MαmGm(x)
分类器为基本分类器 G m ( x ) G_m(x) Gm(x),系数是 α m α_m αm。当损失函数是指数损失函数时:
L ( y , f ( x ) ) = e x p [ − y f ( x ) ] L(y, f(x))=exp[-yf(x)] L(y,f(x))=exp[yf(x)]
当经过m-1轮迭代得到 f ( m − 1 ) ( x ) f_(m-1)(x) f(m1)(x),第m轮迭代得到
f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_m(x)=f_{m-1}(x)+α_mG_m(x) fm(x)=fm1(x)+αmGm(x)
目标是选择 ( α m , G m ) (α_m, G_m) (αm,Gm)使损失函数最小
( α m , G m ) = arg ⁡ min ⁡ α , G ∑ i = 1 N e x p [ − y i ( f m − 1 ( x i ) + α G ( x i ) ] (α_m, G_m)=\arg\min\limits_{α,G}\sum_{i=1}^{N}{exp[-y_i(f_{m-1}(x_i)+αG(x_i)]} (αm,Gm)=argα,Gmini=1Nexp[yi(fm1(xi)+αG(xi)]
它可以表示为:
( α m , G m ) = arg ⁡ min ⁡ α , G ∑ i = 1 N w ‾ m i e x p [ − y i α G ( x i ) ] (α_m, G_m)=\arg\min\limits_{α,G}\sum_{i=1}^{N}{\overline{w}_{mi}exp[-y_iαG(x_i)]} (αm,Gm)=argα,Gmini=1Nwmiexp[yiαG(xi)]

其中 w ‾ m i = e x p [ − y i f m − 1 ( x i ) ] \overline{w}_{mi}=exp[-y_if_{m-1}(x_i)] wmi=exp[yifm1(xi)],不依赖于α和G,所以与最小化无关,
我们要求 ( α m , G m ) (α_m, G_m) (αm,Gm),只要使 e x p [ − y i α G ( x i ) ] exp[-y_iαG(x_i)] exp[yiαG(xi)]最小化即可。

G m ( x ) = arg ⁡ min ⁡ G ∑ i = 1 N w ‾ m i I ( y i ≠ G ( x i ) ) G_m(x)=\arg\min\limits_{G}\sum_{i=1}^{N}\overline{w}_{mi}I(y_i≠G(x_i)) Gm(x)=argGmini=1NwmiI(yi̸=G(xi))
之后,我们求 α m α_m αm
∑ i = 1 N w ‾ m i e x p [ − y i α G ( x i ) ] \sum_{i=1}^{N}{\overline{w}_{mi}exp[-y_iαG(x_i)]} i=1Nwmiexp[yiαG(xi)]
= ∑ y i = G m ( x i ) w ‾ m i e − α + ∑ y i ≠ G m ( x i ) w ‾ m i e α =\sum_{y_i=G_m(x_i)}{\overline{w}_{mi}e^{-α}}+\sum_{y_i≠G_m(x_i)}{\overline{w}_{mi}e^{α}} =yi=Gm(xi)wmieα+yi̸=Gm(xi)wmieα
= ( e α − e − α ) ∑ i = 1 N w ‾ m i I ( y i ≠ G ( x i ) ) + e − α ∑ i = 1 N w ‾ m i =(e^α-e^{-α})\sum_{i=1}^{N}\overline{w}_{mi}I(y_i≠G(x_i))+e^{-α}\sum_{i=1}^{N}\overline{w}_{mi} =(eαeα)i=1NwmiI(yi̸=G(xi))+eαi=1Nwmi
= ( e α − e − α ) G m ( x ) + e − α ∑ i = 1 N w ‾ m i =(e^α-e^{-α})G_m(x)+e^{-α}\sum_{i=1}^{N}\overline{w}_{mi} =(eαeα)Gm(x)+eαi=1Nwmi
此时对 α m α_m αm求导使导数等于0得到:
α m = 1 2 l o g 1 − e m e m α_m=\frac{1}{2}log\frac{1-e_m}{e_m} αm=21logem1em
e m = ∑ i = 1 N w ‾ m i I ( y i ≠ G ( x i ) ) e_m=\sum_{i=1}^{N}\overline{w}_{mi}I(y_i≠G(x_i)) em=i=1NwmiI(yi̸=G(xi))
只要求得 G m G_m Gm α m α_m αm就可以得到每一轮的基函数了,然后得到每一轮权值的更新。


提升树

当基函数是树模型的时候,我们可以简单的归纳如下:
树模型表示为:
T ( x , Θ ) = ∑ j = 1 J c j I ( x ∈ R j ) T(x,Θ)=\sum_{j=1}^{J}{c_jI(x∈R_j)} T(x,Θ)=j=1JcjI(xRj)
其中, c j c_j cj是某个叶子节点的输出值(常量), R j R_j Rj表示的是第j个叶子节点。
回归问题提升树使用前向分步算法:
f 0 ( x ) = 0 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) , m = 1 , 2 , . . . , M f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) \begin{aligned} f_0(x)&amp;=0\\ f_m(x)&amp;=f_{m-1}(x)+T(x;Θ_m), m=1,2,...,M\\ f_M(x)&amp;=\sum_{m=1}^{M}T(x;Θ_m) \end{aligned} f0(x)fm(x)fM(x)=0=fm1(x)+T(x;Θm),m=1,2,...,M=m=1MT(x;Θm)
第m步的最小损失为:
Θ ^ m = arg ⁡ min ⁡ Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x i ; Θ m ) ) \hat{Θ}_m=\arg\min\limits_{Θ_m}\sum_{i=1}^{N}L(y_i,f_{m-1}(x_i)+T(x_i;Θ_m)) Θ^m=argΘmmini=1NL(yi,fm1(xi)+T(xi;Θm))
得到 Θ ^ m \hat{Θ}_m Θ^m,即第m棵树的参数。
采取平方损失时,
L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L(y, f(x))=(y-f(x))^2 L(y,f(x))=(yf(x))2
其损失变为
L ( y , f m − 1 ( x ) + T ( x ; Θ m ) ) = [ y − f m − 1 ( x ) − T ( x ; Θ m ) ] 2 = [ r − T ( x ; Θ m ) ] 2 \begin{aligned} &amp;L(y,f_{m-1}(x)+T(x;Θ_m))\\ &amp;=[y-f_{m-1}(x)-T(x;Θ_m)]^2 &amp;=[r-T(x;Θ_m)]^2 \end{aligned} L(y,fm1(x)+T(x;Θm))=[yfm1(x)T(x;Θm)]2=[rT(x;Θm)]2
这里
r = y − f m − 1 ( x ) r=y-f_{m-1}(x) r=yfm1(x)
是当前模型拟合数据的残差(residual),所以,对回归问题的提升树算法来说,只需简单地拟合当前模型的残差。
学习到第m棵树的残差为 r m r_m rm之后,更新:
f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x)=f_{m-1}(x)+T(x;Θ_m) fm(x)=fm1(x)+T(x;Θm)
即得到回归问题提升树
f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^{M}T(x;Θ_m) fM(x)=m=1MT(x;Θm)


梯度提升登场


那么,如果损失函数不是指数损失和平方损失呢,如果损失函数是一般函数的时候,问题就没这么简单了。怎么办!这时候,梯度提升登场。
它的关键是利用损失函数的负梯度在当前模型的值
− [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) -[\frac{∂L(y_i,f(x_i))}{∂f(x_i)}]_{f(x)=f_{m-1}(x)} [f(xi)L(yi,f(xi))]f(x)=fm1(x)
算法:
输入:训练数据集T,损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))
输出:回归树 f ^ ( x ) \hat{f}(x) f^(x)
(1)初始化
f 0 ( x ) = arg ⁡ min ⁡ c ∑ i = 1 N L ( y i , c ) f_0(x)=\arg\min\limits_{c}\sum_{i=1}^{N}L(y_i,c) f0(x)=argcmini=1NL(yi,c)
(2)对 m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M
(a)对 i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N,计算
r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{∂L(y_i,f(x_i))}{∂f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)
(b)对 r m i r_mi rmi拟合一个回归树,得到第m棵树的叶节点区域R_mj, j=1,2,…,J
对J=1,2,…,J,计算
c m j = arg ⁡ min ⁡ c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=\arg\min\limits_{c}\sum_{x_i∈R_{mj}}{L(y_i, f_{m-1}(x_i)+c)} cmj=argcminxiRmjL(yi,fm1(xi)+c)
(d)更新 f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^{J}{c_{mj}I(x∈R_{mj})} fm(x)=fm1(x)+j=1JcmjI(xRmj)
(3)得到回归树
f ^ ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) \hat{f}(x)=f_M(x)=\sum_{m=1}^{M}\sum_{j=1}^{J}c_{mj}I(x∈R_{mj}) f^(x)=fM(x)=m=1Mj=1JcmjI(xRmj)
至于梯度提升的妙处,就留到讲xgboost的时候再做对比吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值