集成学习之梯度提升树(GBDT)原理详解



参考
https://www.cnblogs.com/massquantity/p/9174746.html

1. 梯度提升(Gradient Boosting)的思想

Gradient Boosting和Adaptive Boosting都属于boosting类集成学习算法,也即通过多轮迭代得到多个基学习器,然后将多个基学习器加权求和。
f m ( x ) = f m − 1 ( x ) + ρ m h m ( x ) (1-1) f_m(x)=f_{m-1}(x)+\rho_mh_m(x)\tag{1-1} fm(x)=fm1(x)+ρmhm(x)(1-1)
不同之处在于,Adaptive Boosting在某次迭代过程中训练该轮基学习器时,会增大上一轮犯错样本的权重;而Gradient Boosting在某次迭代时,会拟合上一轮基学习器的负梯度。
为什么拟合上一轮的负梯度能work?我们知道机器学习中最小化损失函数 L ( θ ) L(\theta) L(θ)时,往往会利用梯度下降法来更新 θ \theta θ
θ = θ − α ⋅ ∂ L ( θ ) ∂ θ (1-2) \theta=\theta-\alpha\cdot \frac{\partial L(\theta)}{\partial \theta}\tag{1-2} θ=θαθL(θ)(1-2)
如果把 θ \theta θ换成基学习器 f m ( x ) f_m(x) fm(x),上述表达式也是可以用来更新基学习器的(具体的严格证明需要用到泛函分析的理论):
f m ( x ) = f m − 1 ( x ) − ρ m ⋅ ∂ L ( y , f m − 1 ( x ) ) ∂ f m − 1 ( x ) (1-3) f_m(x)=f_{m-1}(x)-\rho_m\cdot \frac{\partial L(y,f_{m-1}(x))}{\partial f_{m-1}(x)}\tag{1-3} fm(x)=fm1(x)ρmfm1(x)L(y,fm1(x))(1-3)
其中 L ( y , f m − 1 ( x ) ) = ∑ i = 1 N L ( y i , f m − 1 ( x i ) ) L(y,f_{m-1}(x))=\sum_{i=1}^NL(y_i,f_{m-1}(x_i)) L(y,fm1(x))=i=1NL(yi,fm1(xi))
{ 1 − 3 } \{1-3\} {13}意味着,我们是用第m轮的基学习器 h m ( x ) h_m(x) hm(x)去拟合上一轮损失函数关于 f m − 1 ( x ) f_{m-1}(x) fm1(x)的负梯度,从而达到通过梯度下降法最小化 L ( f ) L(f) L(f).该方法也叫函数空间的梯度下降法。

2. gradient boosting的通用算法流程

这里我们暂时不关心基学习器的具体表达式,把GBDT的通用算法流程列下来:

  1. 初始化: f 0 ( x ) = arg ⁡ min ⁡ γ ∑ i = 1 N L ( y i , γ ) f_0(x)=\arg \min\limits_{\gamma}\sum_{i=1}^NL(y_i,\gamma) f0(x)=argγmini=1NL(yi,γ)
  2. for m=1 to M:
    (a)计算函数空间负梯度: y i ~ = ∂ L ( y i , f m − 1 ( x i ) ) ∂ f m − 1 ( x i ) , i = 1 , ⋯   , N \tilde{y_i}=\frac{\partial L(y_i,f_{m-1}(x_i))}{\partial f_{m-1}(x_i)}, i=1,\cdots,N yi~=fm1(xi)L(yi,fm1(xi)),i=1,,N
    (b)通过最小化平方误差,来得到 h m ( x ) h_m(x) hm(x) w m = arg ⁡ min ⁡ w ∑ i = 1 N ( y i ~ − h m ( x i ; w ) ) 2 w_m=\arg\min\limits_{w}\sum_{i=1}{N}(\tilde{y_i}-h_m(x_i;w))^2 wm=argwmini=1N(yi~hm(xi;w))2
    ©使用line search确定系数 ρ m \rho_m ρm: ρ m = arg ⁡ min ⁡ ρ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + ρ h m ( x i ; w m ) ) \rho_m=\arg\min\limits{\rho}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\rho h_m(x_i;w_m)) ρm=argminρi=1NL(yi,fm1(xi)+ρhm(xi;wm))
    (d)更新基学习器: f m ( x ) = f m − 1 + ρ m h m ( x ; w m ) f_m(x)=f_{m-1}+\rho_m h_m(x;w_m) fm(x)=fm1+ρmhm(x;wm)
  3. 输出最终的 f M ( x ) f_M(x) fM(x)

3. 将回归树作为基学习器,得到GBDT算法

3.1. 回归树介绍

在GBDT中,基学习器是决策树。因为基学习器要拟合的是负梯度,可以认为是个回归问题,因此我们来介绍一些回归树的基本概念。
决策树本质上可以看做一个分段函数,把特征空间分为多个互相独立的子区域:
在这里插入图片描述
图片来源https://www.cnblogs.com/massquantity/p/9174746.html
因此单棵决策树在数学上可以表示为
h ( x ; { R j , b j } 1 J = ∑ j = 1 J b j I ( x ∈ R j ) (3-1) h(x;\{R_j,b_j\}_1^J=\sum_{j=1}^Jb_jI(x\in R_j)\tag{3-1} h(x;{Rj,bj}1J=j=1JbjI(xRj)(3-1)
其中 { R j } 1 J \{R_j\}_1^J {Rj}1J代表决策树划分出的 J J J个子空间(每个子空间对应一个叶结点), { b j } 1 J \{b_j\}_1^J {bj}1J代表各个子空间输出的值。

3.2. 将回归树应用到gradient boosting中

因此第2章里面的2.(b)可以写成:
{ R j m } 1 J = arg ⁡ min ⁡ { R j m } 1 J ∑ i = 1 N ( y i ~ − h m ( x i ; { R j m , b j m } 1 J ) ) 2 (3-2) \{R_{jm}\}_1^J=\arg\min\limits_{\{R_{jm}\}_1^J}\sum_{i=1}{N}(\tilde{y_i}-h_m(x_i;\{R_{jm},b_{jm}\}_1^J))^2\tag{3-2} {Rjm}1J=arg{Rjm}1Jmini=1N(yi~hm(xi;{Rjm,bjm}1J))2(3-2)
对应的 b j m = m e a n x ∈ R j m   y i ~ b_{jm}=\mathop{mean}\limits_{x\in R_{jm}}\ \tilde{y_i} bjm=xRjmmean yi~是该区域的平均值。(之所以可以先划分区域再求b,是因为不论怎么划分区域,b取该区域内所有值的平均值,总能最小化均方误差,因此可以先后求)
注意到2.©中求出的 ρ m \rho_m ρm对于所有子区域是一样的,这样不一定是最优的,因此可以采用如下方式优化求取最优的 γ j m = ρ j m b j m \gamma_{jm}=\rho_{jm}b_{jm} γjm=ρjmbjm
γ j m = arg ⁡ min ⁡ γ ∑ x i ∈ R j m L ( y i , f m − 1 ( x i ) + γ ) (3-3) \gamma_{jm}=\arg\min\limits_{\gamma}\sum_{x_i\in R_{jm}}L(y_i,f_{m-1}(x_i)+\gamma) \tag{3-3} γjm=argγminxiRjmL(yi,fm1(xi)+γ)(3-3)

3.3. GBDT算法流程

最终得到GBDT的算法流程:

  1. 初始化: f 0 ( x ) = arg ⁡ min ⁡ γ ∑ i = 1 N L ( y i , γ ) f_0(x)=\arg \min\limits_{\gamma}\sum_{i=1}^NL(y_i,\gamma) f0(x)=argγmini=1NL(yi,γ)
  2. for m=1 to M:
    (a)计算函数空间负梯度: y i ~ = ∂ L ( y i , f m − 1 ( x i ) ) ∂ f m − 1 ( x i ) , i = 1 , ⋯   , N \tilde{y_i}=\frac{\partial L(y_i,f_{m-1}(x_i))}{\partial f_{m-1}(x_i)}, i=1,\cdots,N yi~=fm1(xi)L(yi,fm1(xi)),i=1,,N
    (b)通过最小化平方误差,来得到子区域划分方式(也即得到最终的决策树): { R j m } 1 J = arg ⁡ min ⁡ { R j m } 1 J ∑ i = 1 N ( y i ~ − h m ( x i ; { R j m , b j m } 1 J ) ) 2 \{R_{jm}\}_1^J=\arg\min\limits_{\{R_{jm}\}_1^J}\sum_{i=1}{N}(\tilde{y_i}-h_m(x_i;\{R_{jm},b_{jm}\}_1^J))^2 {Rjm}1J=arg{Rjm}1Jmini=1N(yi~hm(xi;{Rjm,bjm}1J))2
    ©使用line search确定子区域最终输出: γ j m = arg ⁡ min ⁡ γ ∑ x i ∈ R j m L ( y i , f m − 1 ( x i ) + γ ) \gamma_{jm}=\arg\min\limits_{\gamma}\sum_{x_i\in R_{jm}}L(y_i,f_{m-1}(x_i)+\gamma) γjm=argγminxiRjmL(yi,fm1(xi)+γ)
    (d)更新基学习器: f m ( x ) = f m − 1 + ∑ j = 1 J γ j m I ( x ∈ R j m ) f_m(x)=f_{m-1}+\sum_{j=1}^J\gamma_{jm}I(x\in R_{jm}) fm(x)=fm1+j=1JγjmI(xRjm)
  3. 输出最终的 f M ( x ) f_M(x) fM(x)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值