Boosting算法

Boosting算法通过结合多个弱分类器构建强分类器,每个弱分类器针对前一个分类器的偏差进行修正。与随机森林不同,Boosting的弱分类器具有较大偏差,通过连续修正降低整体误差。常用的损失函数包括指数型损失和二项似然损失,常选择决策树作为弱分类器。Gradient Boosting通过最速下降法更新模型,XGBoost则通过二次泰勒展开优化损失函数,提高运算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Boosting算法的思想和随机森林的思想是不同的,随机森林中的每棵树都是一个强分类器(树的深度比较深),那么这样偏差就会小得多,方差就会大的多,为了降低方差,随机森林设计了多棵树,每棵树的样本都是通过重抽样的方式获得,这样相当于综合了数据总体的多个样本进行训练,可以有效的降低方差,这样在测试集中才可以得到较好的效果。Boosting的思想是设计多个弱分类器,弱分类的特点就在于偏差过大,因此需要后续的分类器针对前面的分类器进行修正,将偏差变小。
**1.模型的描述 **
假设我们希望预测的变量为 Y Y Y,相关变量为 X X X,我们希望得到一个模型 F ( X ) F(X) F(X),对 Y Y Y进行预测,即
Y ^ = F ( X ) \hat{Y}=F(X) Y^=F(X)
同时分类问题最终是需要得到一个类别,因此
F ( X ) = s i g n ( f ( X ) ) F(X)=sign(f(X)) F(X)=sign(f(X))
针对回归问题,我们直接使用
F ( X ) = f ( X ) F(X)=f(X) F(X)=f(X)
模型的训练都需要有一个Loss function 用于衡量 Y ^ \hat{Y} Y^ Y Y Y之间的差异,模型训练的目的就在于最小化这个差异 ,即
min ⁡ f L ( Y , f ( X ) ) \min_{f} \quad L(Y,f(X)) fminL(Y,f(X))
写成带有样本的形式,即
min ⁡ f ∑ i L ( Y i , f ( X i ) ) (1) \min_{f} \quad \sum_{i}L(Y_{i},f(X_{i})) \tag{1} fminiL(Yi,f(Xi))(1)
Boosting算法的目的就是为了寻找M个的弱分类器 f 1 , . . . f M {f_1,...f_M} f1,...fM作用在样本上,然后将所有的弱分类的结果组合起来,也就是
f ( x ) = ∑ m = 1 M α m f m ( X ) f(x)=\sum_{m=1}^M \alpha_m f_m(X) f(x)=m=1Mαmfm(X)
于是公式(1)变成
min ⁡ α m , f m ∑ i L ( Y i , ∑ m = 1 M α m f m ( X ) ) \min_{\alpha_m,f_m} \quad \sum_iL(Y_i,\sum_{m=1}^M\alpha_mf_m(X)) αm,fmminiL(Yi,m=1Mαmfm(X))
采用如下的算法进行求解


A l g o r i t h m 1 Algorithm 1 Algorithm1

  1. f 0 ( X ) = 0 f_{0}(X)=0 f0(X)=0
  2. f o r m = 1 , . . . M for \quad m=1,...M form=1,...M
  3. { α m , γ m } = a r g m i n α , γ ∑ i L ( Y i , f m − 1 ( X i ) + α G ( X i ; γ ) ) \{\alpha_m,\gamma_m\}=argmin_{\alpha,\gamma} \sum_i L(Y_i,f_{m-1}(X_i)+\alpha G(X_i;\gamma)) {αm,γm}=argminα,γiL(Yi,fm1(Xi)+αG(Xi;γ))
  4. f m ( X ) = f m − 1 ( X ) + α m G ( X ; γ m ) f_m(X)=f_{m-1}(X)+\alpha_mG(X;\gamma_m) fm(X)=fm1(X)+αmG(X;γm)
  5. e n d f o r end \quad for endfor

最终 F ( X ) = s i g n ( f M ( X ) ) F(X)=sign(f_M(X)) F(X)=sign(fM(X)),通过 f M f_M fM的正负号来判断是否是正例,还是负例。
2.Loss function的选择
针对回归问题来说,我们容易想到使用均方误差作为损失函数,即
L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y,f(X))=(Y-f(X))^2 L(Y,f(X))=(Yf(X))2
针对分类问题,我们令 Y ∈ { − 1 , 1 } Y \in \{-1,1\} Y{1,1},我们首先想到的是误判率作为损失函数 , 即
L ( Y , f ( X ) ) = I ( Y ≠ s i g n ( f ( X ) ) ) L(Y,f(X))=I(Y \not=sign(f(X))) L(Y,f(X))=I(Y=sign(f(X)))
但是通常不使用误判率作为损失函数.
那么针对分类问题的话,使用如下两种损失函数
L ( Y , f ( X ) ) = e x p ( − Y f ( X ) ) L(Y,f(X))=exp(-Yf(X)) L(Y,f(X))=exp(Yf(X))
L ( Y , f ( X ) ) = l o g ( 1 + e − 2 Y f ( X ) ) L(Y,f(X))=log(1+e^{-2Yf(X)}) L(Y,f(X))=log(1+e2Yf(X))
第一个表示指数型损失函数,第二个表示二项似然损失函数
第一个指数型损失函数到底表示什么意思 ???我们通过如下的推导过程来说明
我们的目的是最小化损失函数,即
min ⁡ f ( X ) E Y ∣ X ( e − Y f ( X ) ) (3) \min_{f(X)}E_{Y|X}(e^{-Yf(X)}) \tag{3} f(X)minEYX(eYf(X))(3)
我们用 P ( Y = 1 ∣ X ) P(Y=1|X) P(Y=1X)表示Y取1的概率, P ( Y = − 1 ∣ X ) P(Y=-1|X) P(Y=1X)表示Y取-1的概率 ,那么(3)等价于
min ⁡ f ( X ) P ( Y = 1 ∣ X ) e − f ( X ) + P ( Y = − 1 ∣ X ) e f ( X ) \min_{f(X)} P(Y=1|X)e^{-f(X)}+P(Y=-1|X)e^{f(X)} f(X)minP(Y=1X)ef(X)+P(Y=1X)ef(X)
从而可以求解出
f ∗ ( X ) = 1 2 l o g P ( Y = 1 ∣ X ) P ( Y = − 1 ∣ X ) f^*(X)=\frac{1}{2} log \frac {P(Y=1|X)} {P(Y=-1|X)} f(X)=21logP(Y=1X)P(Y=1X)
所以我们最终是针对 P ( Y = 1 ∣ X ) P(Y=1|X) P(Y=1X)的log-odds的估计,也就是说如果 f ∗ ( X ) > 0 f^*(X)>0 f(X)>0的话,即
P ( Y = 1 ∣ X ) > P ( Y = − 1 ∣ X ) P(Y=1|X)>P(Y=-1|X) P(Y=1X)>P(Y=1X)
我们预测为正例,否则预测为负例。
其实最开始我们的目的就在于解决 P ( Y = 1 ∣ X ) P(Y=1|X) P(Y=1X) P ( Y = − 1 ∣ X ) P(Y=-1|X) P(Y=1X)谁大谁小的问题,我们需要一个对log-odds的估计
第二个二项似然损失函数又是如何来的????
我们假设
p ( X ) = P ( Y = 1 ∣ X ) = 1 1 + e − 2 f ( X ) p(X)=P(Y=1|X)=\frac{1} {1+e^{-2f(X)}} p(X)=P(Y=1X)=1+e2f(X)1
然后我们令 Y ′ = ( Y + 1 ) / 2 Y'=(Y+1)/2 Y=(Y+1)/2 ,那么二项负似然损失函数为
L ( Y , p ( X ) ) = − ( Y ′ l o g p ( X ) + ( 1 − Y ′ ) l o g ( 1 − p ( X ) ) ) L(Y,p(X))=-(Y'log p(X)+(1-Y')log(1-p(X))) L(Y,p(X))=Ylogp(X)+(1Y)log(1p(X))
等价的也就是
l o g ( 1 + e − 2 Y f ( X ) ) log(1+e^{-2Yf(X)}) log(1+e2Yf(X))
其实这两个损失函数都是在对P(Y=1|X)的log-odds进行估计,从而选择概率大的那个类为预测类。
那么是否可以使用均方误差作为分类问题的损失函数, 和指数型损失函数一样,我们首先看一下最小化均方误差函数等价于对哪个值的估计
f ∗ ( X ) = a r g min ⁡ f ( X ) E Y ∣ X ( Y − f ( X ) ) 2 = E ( Y ∣ X ) = 2 P ( Y = 1 ∣ X ) − 1 f^*(X)=arg\min_{f(X)}E_{Y|X}(Y-f(X))^2=E(Y|X)=2P(Y=1|X)-1 f(X)=argf(X)minEYX(Yf(X))2=E(YX)=2P(Y=1X)1
然后通过 f ∗ ( X ) f^*(X) f(X)的正负号进行判断是正例还是负例.如果YF(X)>0 ,也就是准确预测出类别,同时F(X)越大,对应的误差应该越小,但是均方误差却是越大的。这便是均方误差不适于用作分类的loss function。
指数型损失函数和二项负似然函数便是随着YF(X)的增大而减小。

如同回归中均方误差和绝对值误差的区别,即绝对值误差更加稳健,受离群点的影响较小,二项负似然损失同样受离群点的影响较小。而指数型损失函数由于当YF(X)<0时是指数型惩罚,因此受到离群点的影响更大。

弱分类器的选择(boosted Tree)
通常情况下,我们会使用决策树作为弱分类器,原因是决策树便于实现,能够灵活的处理不同类型的数据。(数值型数据,符号型数据)。那么首先我们需要确认使用决策树需要哪些参数。决策树的本质是将自变量空间划分成 K K K不相交的区块 R j ( j ∈ 1 , . . . K ) R_j(j \in 1,...K) Rj(j1,...K),然后在每个区块中给定一个值 γ j ( j ∈ 1 , . . . K ) \gamma_j(j \in 1,...K) γj(j1,...K),如果一条记录落入改区块中,那么它的取值就是 γ j \gamma_j γj,我们把决策树弱分类器记为
T ( X ; Θ ) T(X;\Theta) T(X;Θ)
其中 Θ = R j , γ j , j ∈ { 1 , 2... , K } \Theta={R_j,\gamma_j} ,j \in \{1,2...,K\} Θ=Rj,γj,j{1,2...,K}
那么根据algorithm 1,我们需要求解
a r g min ⁡ Θ ∑ i L ( Y i , f m − 1 ( X i ) + T m ( X i ; Θ ) ) (4) arg \min_{\Theta} \sum_i L(Y_i,f_{m-1}(X_i)+T_m(X_i;\Theta)) \tag 4 argΘminiL(Yi,fm1(Xi)+Tm(Xi;Θ))(4)
根据不同的损失函数,有不同的求解方法。
1.均方误差
公式(4)将会转换成
a r g min ⁡ Θ ∑ i ( Y i − f m − 1 ( X i ) − T m ( X i ; Θ ) ) ) 2 arg \min_{\Theta} \sum_i (Y_i-f_{m-1}(X_i)-T_m(X_i;\Theta)))^2 argΘmini(Yifm1(Xi)Tm(Xi;Θ)))2
那么这就相当于拟合一棵决策树,目标值为 Y i − f m − 1 ( X i ) Y_i-f_{m-1}(X_i) Yifm1(Xi),这是比较容易实现的
2.指数型损失函数
公式(4)将会转换成
a r g min ⁡ Θ ∑ i exp ⁡ ( − Y i ∗ ( f m − 1 ( X i ) + T m ( X i ; Θ ) ) ) arg \min_{\Theta} \sum_i \exp(-Y_i*(f_{m-1}(X_i)+T_m(X_i;\Theta))) argΘminiexp(Yifm1(Xi)+Tm(Xi;Θ)))
也就是
a r g min ⁡ Θ ∑ i exp ⁡ ( − Y i f m − 1 ( X i ) ) exp ⁡ ( − Y i T m ( X i ; Θ ) ) ) arg \min_{\Theta} \sum_i \exp(-Y_if_{m-1}(X_i))\exp(-Y_iT_m(X_i;\Theta))) argΘminiexp(Yifm1(Xi))exp(YiTm(Xi;Θ)))
这个相当于拟合一个加权的决策树,目标值为 Y i Y_i Yi,样本中的每条记录权重为 exp ⁡ ( − Y i f m − 1 ( X i ) ) \exp(-Y_if_{m-1}(X_i)) exp(Yifm1(Xi))
这个也是容易实现的
3. 二项负似然损失函数
公式(4)将会转换成
a r g min ⁡ Θ ∑ i l o g ( 1 + exp ⁡ ( − 2 Y i ∗ ( f m − 1 ( X i ) + T m ( X i ; Θ ) ) ) arg \min_{\Theta} \sum_i log(1+\exp(-2Y_i*(f_{m-1}(X_i)+T_m(X_i;\Theta))) argΘminilog(1+exp(2Yi(fm1(Xi)+Tm(Xi;Θ)))
这里就存在一个问题我去拟合一棵树,目标值是什么,这便是二项负似然损失函数的局限的地方,也是algorithm 1局限的地方。
其实还有很多的损失函数都会存在这样的问题。那么这时候就提出了 g r a d i e n t B o o s t i n g gradient \quad Boosting gradientBoosting从而来适应多种损失函数。
( 该 部 分 存 在 疑 问 , 我 并 没 有 解 释 清 楚 ) \color{red}{(该部分存在疑问,我并没有解释清楚)}
g r a d i e n t B o o s t i n g gradient \quad Boosting gradientBoosting
现在需要重新计算公式(1),我们并不是直接寻找一个弱分类器对当前的拟合值进行提升。而是通过最速下降法来求解。假设目前是第m轮循环,第m-1轮已经确认N个样本点对应的拟合值为 { f m − 1 ( X 1 ) , f m − 1 ( X N ) } \{f_{m-1}(X_1),f_{m-1}(X_N)\} {fm1(X1),fm1(XN)},那么我们通过
r m i = − [ ∂ L ( y i , f ( X i ) ) ∂ f ( X i ) ] f ( X i ) = f m − 1 ( X i ) r_{mi}=-[\frac {\partial L(y_i,f(X_i))} {\partial f(X_i)}]_{f(X_i)=f_{m-1}(X_i)} rmi=[f(Xi)L(yi,f(Xi))]f(Xi)=fm1(Xi)
求偏导的方式确定负梯度值,我们记为 g m i g_{mi} gmi, 然后确定步长
ρ m = a r g min ⁡ ρ ∑ i = 1 N L ( y i , f m − 1 + ρ r m i ) \rho_{m}=arg\min_{\rho}\sum_{i=1}^N L(y_i,f_{m-1}+\rho r_{mi}) ρm=argρmini=1NL(yi,fm1+ρrmi)
从而得到更新
f m = f m − 1 − ρ m g m f_m=f_{m-1}-\rho_mg_m fm=fm1ρmgm
其中 f m f_m fm表示一个N维向量.
但是问题是这样得到的 f m f_m fm在测试集上是无法使用的,它只是在训练集上确定了梯度值,那么我们能不能使用训练集的梯度值来估计测试集的梯度值呢?问题就是这样解决的,在每一次求得N个训练集的样本的梯度之后,拟合以一棵回归树用来估计测试集的梯度,这时候选择的便是使用均方误差损失函数来拟合梯度。
所以算法过程如下 :


a l g o r i t h m 2 algorithm 2 algorithm2
1.Initialize f 0 ( X ) = a r g min ⁡ γ ∑ i = 1 N L ( Y i , γ ) f_0(X)=arg \min_{\gamma} \sum_{i=1}^N L(Y_i,\gamma) f0(X)=argminγi=1NL(Yi,γ)
2. For m=1 to M
(a) For i=1,2,3…N compute
r m i = − [ ∂ L ( y i , f ( X i ) ) ∂ f ( X i ) ] f = f m − 1 r_{mi}= -[\frac {\partial L(y_i,f(X_i))}{\partial f(X_i)}]_{f=f_{m-1}} rmi=[f(Xi)L(yi,f(Xi))]f=fm1
(b)Fit a regression tree to the target r i m r_{im} rim giving terminal regions R j m , j = 1 , . . . J m R_{jm}, \quad j=1,...J_m Rjm,j=1,...Jm ,that is
θ m = a r g min ⁡ θ ∑ i = 1 N [ r m i − T ( X i ; θ ) ] 2 \theta_m=arg\min_{\theta} \sum_{i=1}^N[r_{mi}-T(X_i;\theta)]^2 θm=argθmini=1N[rmiT(Xi;θ)]2
© calculate step length :
ρ m = a r g min ⁡ ρ ∑ i = 1 N L ( Y i , f m − 1 − ρ T ( X i , θ m ) ) \rho_{m}=arg\min_{\rho}\sum_{i=1}^N L(Y_i,f_{m-1}-\rho T(X_i,\theta_m)) ρm=argρmini=1NL(Yi,fm1ρT(Xi,θm))
(d) Update f m ( X i ) = f m − 1 ( X i ) + ρ m T ( X i ; θ m ) f_m(X_i)=f_{m-1}(X_i)+\rho_m T(X_i;\theta_m) fm(Xi)=fm1(Xi)+ρmT(Xi;θm)

3.Output f M ( X ) f_M(X) fM(X)


等价于如下算法

这里写图片描述

4.常见boosting算法
如果说loss function为均方误差 ,即 L ( y , f ) = 1 / 2 ( y − f ) 2 L(y,f)=1/2(y-f)^2 L(y,f)=1/2(yf)2,那么
∂ L ( y , f ) ∂ f = y − f \frac {\partial L(y,f)} {\partial f}=y-f fL(y,f)=yf 那么可以得到如下算法


a l g o r i t h m 3 ( L S _ B o o s t ) algorithm 3 (LS\_Boost) algorithm3LS_Boost
f 0 ( x ) = y ˉ f_0(x)= \bar{y} f0(x)=yˉ --初始化
For m=1 to M do :
y i ~ = y i − f m − 1 ( X i ) , i = 1 , . . . N \quad \tilde{y_i}=y_i-f_{m-1}(X_i), i=1,...N yi~=yifm1(Xi),i=1,...N
{ R j m } 1 J = J − t e r m i n a l n o d e t r e e ( y i ~ , X i 1 N ) \quad \{R_{jm}\}_1^J=J-terminal \quad node \quad tree \quad ({\tilde{y_i},X_i}_1^N) {Rjm}1J=Jterminalnodetree(yi~,Xi1N)
γ j m = 1 ∣ R j m ∣ ∑ x i ∈ R j m y i ~ , j = 1 , . . . , J \quad \gamma_{jm}=\frac {1} {|R_{jm}|}\sum_{x_i \in R_{jm}} \tilde{y_i},j=1,...,J γjm=Rjm1xiRjmyi~,j=1,...,J //叶子节点的取值
f m ( X ) = f m − 1 ( X ) + ∑ j = 1 J γ j m 1 X ∈ R j m \quad f_m(X)=f_{m-1}(X)+\sum_{j=1}^J \gamma_{jm} 1_{X \in R_{jm}} fm(X)=fm1(X)+j=1Jγjm1XRjm
End For


如果loss function 为LAD (Least absolute deviation),即 L ( y , f ) = ∣ y − f ∣ L(y,f)=|y-f| L(y,f)=yf ,那么
∂ L ( y , f ) ∂ f = s i g n ( y − f ) \frac {\partial L(y,f)} {\partial f}=sign(y-f) fL(y,f)=sign(yf)


a l g o r i t h m 4 ( L A D _ T r e e B o o s t ) algorithm 4 (LAD\_TreeBoost) algorithm4LAD_TreeBoost
f 0 ( x ) = m e d i a n { y i } 1 N f_0(x)= median\{y_i\}_1^N f0(x)=median{yi}1N --初始化
For m=1 to M do :
y i ~ = s i g n ( y i − f m − 1 ( X i ) ) , i = 1 , . . . N \quad \tilde{y_i}=sign(y_i-f_{m-1}(X_i)), i=1,...N yi~=sign(yifm1(Xi)),i=1,...N
{ R j m } 1 J = J − t e r m i n a l n o d e t r e e ( y i ~ , X i 1 N ) \quad \{R_{jm}\}_1^J=J-terminal \quad node \quad tree \quad ({\tilde{y_i},X_i}_1^N) {Rjm}1J=Jterminalnodetree(yi~,Xi1N)
γ j m = m e d i a n X i ∈ R j m y i ~ , j = 1 , . . . , J \quad \gamma_{jm}=median_{X_i \in R_{jm}}\tilde{y_i},j=1,...,J γjm=medianXiRjmyi~,j=1,...,J //叶子节点的取值
f m ( X ) = f m − 1 ( X ) + ∑ j = 1 J γ j m 1 X ∈ R j m \quad f_m(X)=f_{m-1}(X)+\sum_{j=1}^J \gamma_{jm} 1_{X \in R_{jm}} fm(X)=fm1(X)+j=1Jγjm1XRjm
End For


如果使用的loss function 是Huber loss funcation ,也就是
L ( y , F ) = { 1 2 ( y − f ) 2 ∣ y − f ∣ < = δ δ ( ∣ y − f ∣ − δ / 2 ) ∣ y − f ∣ > δ L(y,F)=\begin{cases} \frac 1 2 (y-f)^2 & |y-f| <= \delta \\ \delta(|y-f|-\delta/2) & |y-f|> \delta \\ \end{cases} L(y,F)={21(yf)2δ(yfδ/2)yf<=δyf>δ
∣ y − f ∣ < δ |y-f|<\delta yf<δ时,便是军方误差,当 ∣ y − f ∣ > δ |y-f|>\delta yf>δ时,为了保证在 ∣ y − f ∣ = δ |y-f|=\delta yf=δ处的一阶导数和函数值相同,并且降低利群点对模型的影响。使用 δ ( ∣ y − f ∣ − δ / 2 ) \delta(|y-f|-\delta/2) δ(yfδ/2).
这样
∂ L ( y , f ) ∂ f = { y − f ∣ y − f ∣ < = δ δ ∗ s i g n ( y − f ) ∣ y − f ∣ > δ \frac {\partial L(y,f)} {\partial f}= \begin{cases} y-f & |y-f| <= \delta \\ \delta*sign(y-f) & |y-f| > \delta \\ \end{cases} fL(y,f)={yfδsign(yf)yf<=δyf>δ
这里涉及到两个问题

  1. δ \delta δ的选择,其实它就是确定离群点的位置,在第m轮迭代时,我们可以使用 δ m = q u a n t i l e α ∣ y i − f m ( X i ) ∣ 1 N \delta_m=quantile_{\alpha}{|y_i-f_m(X_i)|}_1^N δm=quantileαyifm(Xi)1N ,例如可以选择75%分位数。
  2. 在第m次迭代时,叶节点的预测值确定,这个无法像均方误差,或者是绝对值误差那样有显性解,需要进行估计, 具 体 估 计 方 式 后 续 补 上 \color {red}{具体估计方式后续补上} 在这里只给出结果

给出相应的算法


Algorithm 5 M _ TreeBoost
f 0 ( x ) = m e d i a n y i 1 N f_0(x)=median{y_i}_1^N f0(x)=medianyi1N
For m=1 to M do :
$\quad r_{m-1}(X_i)=y_i-f_{m-1}(x_i) , i=1,…,N $
δ m = q u a n t i l e α ∣ r m − 1 ( X i ) ∣ 1 N \quad \delta_m=quantile_{\alpha}{|r_{m-1}(X_i)|}_1^N δm=quantileαrm1(Xi)1N
\quad calculate derivative y i ~ \tilde{y_i} yi~
y i ~ = { r m − 1 ( X i ) ∣ r m − 1 ( X i ) ∣ < = δ m δ m ∗ s i g n ( r m − 1 ( X i ) ) ∣ r m − 1 ( X i ) ∣ > δ m \tilde{y_i}= \begin{cases} r_{m-1}(X_i) & |r_{m-1}(X_i)| <=\delta_m \\ \delta_m*sign(r_{m-1}(X_i)) & |r_{m-1}(X_i)| >\delta_m \\ \end{cases} yi~={rm1(Xi)δmsign(rm1(Xi))rm1(Xi)<=δmrm1(Xi)>δm
{ R j m } 1 J = J − t e r m i n a l n o d e t r e e { y i ~ , X i } 1 N \quad \{R_{jm}\}_1^J=J-terminal \quad node \quad tree \quad \{\tilde{y_i},X_i\}_1^N {Rjm}1J=Jterminalnodetree{yi~,Xi}1N
r ~ j m = m e d i a n X i ∈ R j m { r m − 1 ( X i ) } , j = 1 , . . . J \quad \tilde{r}_{jm}=median_{X_i \in R_{jm}} \{ r_{m-1}(X_i)\},j=1,...J r~jm=medianXiRjm{rm1(Xi)},j=1,...J
γ j m = r ~ j m + 1 N j m ∑ X i ∈ R j m s i g n ( r m − 1 ( X i ) − t ~ j m ) ∗ min ⁡ ( δ m , a b s ( r m − 1 ( X i ) − r ~ j m ) ) , j = 1 , . . . , J \quad \gamma_{jm}=\tilde{r}_{jm}+\frac 1 {N_{jm}} \sum_{X_i \in R_{jm}} sign(r_{m-1}(X_i)-\tilde{t}_{jm})* \min(\delta_m,abs(r_{m-1}(X_i)-\tilde{r}_{jm})),j=1,...,J γjm=r~jm+Njm1XiRjmsign(rm1(Xi)t~jm)min(δm,abs(rm1(Xi)r~jm)),j=1,...,J
f m ( X ) = f m − 1 ( X ) + ∑ j = 1 J γ j m 1 ( X ∈ R j m ) \quad f_m(X)=f_{m-1}(X)+\sum_{j=1}^J \gamma_{jm}1_{(X \in R_{jm})} fm(X)=fm1(X)+j=1Jγjm1(XRjm)
end For


如果loss function 是负二项对数似然损失,也就是
L ( y , f ) = l o g ( 1 + e x p ( − 2 y f ) ) , y ∈ { − 1 , 1 } L(y,f)=log(1+exp(-2yf)) , y \in \{-1,1\} L(y,f)=log(1+exp(2yf)),y{1,1}
需要注意的是在叶节点的值确定时,使用了单步的 Newton-Raphson估计,也就是在求
min ⁡ γ 1 N ∑ i = 1 N l o g ( 1 + e x p ( − 2 y i ( f m − 1 ( X i ) + γ ) ) \min_{\gamma} \frac 1 N \sum_{i=1}^Nlog(1+exp(-2y_i(f_{m-1}(X_i)+\gamma)) γminN1i=1Nlog(1+exp(2yi(fm1(Xi)+γ))
其实是没有解析解的,因此使用了初始化 γ 0 = 0 \gamma_0=0 γ0=0,然后进行了一步的Newton_Raphson法,估算出了 γ j m \gamma_{jm} γjm ,简单说就是
γ j m = γ 0 − ∂ G / ∂ γ ∣ γ = γ 0 ∂ 2 G / ∂ γ 2 ∣ γ = γ 0 \gamma_{jm}=\gamma_0-\frac {\partial G/\partial\gamma|_{\gamma=\gamma_0}} {\partial^2 G/\partial\gamma^2|_{\gamma=\gamma_0}} γjm=γ02G/γ2γ=γ0G/γγ=γ0
其中
G ( γ ) = 1 N ∑ i = 1 N l o g ( 1 + e x p ( − 2 y i ( f m − 1 ( X i ) + γ ) ) G(\gamma)= \frac 1 N \sum_{i=1}^Nlog(1+exp(-2y_i(f_{m-1}(X_i)+\gamma)) G(γ)=N1i=1Nlog(1+exp(2yi(fm1(Xi)+γ))
我们可以得到如下算法 :


Algorithm 6 (L_K - TreeBoost)
f 0 ( X ) = 1 2 l o g 1 + y ˉ 1 − y ˉ f_0(X)=\frac {1} {2} log \frac{1+\bar{y}} {1-\bar{y}} f0(X)=21log1yˉ1+yˉ
For m=1,…,M :
y ~ i = 2 ∗ y i / ( 1 + e x p ( 2 y i f m − 1 ( X i ) ) ) , i = 1 , . . . , N \quad \tilde{y}_i=2*y_i/(1+exp(2y_i f_{m-1}(X_i))),i=1,...,N y~i=2yi/(1+exp(2yifm1(Xi))),i=1,...,N
{ R j m } 1 J = J − t e r m i n a l n o d e t r e e ( { y i ~ , X i } 1 N ) \quad \{ R_{jm}\}_1^J = J-terminal node tree(\{\tilde{y_i},X_i\}^N_1) {Rjm}1J=Jterminalnodetree({yi~,Xi}1N)
γ j m = ∑ X i ∈ R j m y ~ i / ∑ X i ∈ R j m ∣ y ~ i ∣ ( 2 − ∣ y ~ i ∣ ) , j = 1 , . . . , J \quad \gamma_{jm}=\sum_{X_i \in R_{jm}} \tilde{y}_i /\sum_{X_i \in R_{jm}}|\tilde{y}_i|(2-|\tilde{y}_i|),j=1,...,J γjm=XiRjmy~i/XiRjmy~i(2y~i),j=1,...,J
F m ( X ) = F m − 1 ( X ) + ∑ j = 1 J γ j m 1 ( X ∈ R j m ) \quad F_m(X)=F_{m-1}(X)+\sum_{j=1}^J\gamma_{jm} 1(X \in R_{jm}) Fm(X)=Fm1(X)+j=1Jγjm1(XRjm)
end For


如果是多分类逻辑回归和分类,这时候y的取值已经不再是{-1,1},所以需要重新确定loss function
L ( { y k , f k ( X ) 1 K } ) = − ∑ k = 1 K y k l o g p k ( X ) L(\{y_k,f_k(X)_1^K\})=-\sum_{k=1}^K y_k log p_k(X) L({yk,fk(X)1K})=k=1Kyklogpk(X)
这里需要注意的是针对K个类,都有一个 f k ( X ) f_k(X) fk(X)与之对应,而 f k f_k fk p k p_k pk之间的关系如下:
f k ( X ) = l o g p k ( X ) − 1 / K ∑ l = 1 f_k(X)=log p_k(X)-1/K \sum_{l=1} fk(X)=logpk(X)1/Kl=1
或者
p k ( X ) = e x p ( F k ( X ) ) / ∑ l = 1 K e x p ( F l ( X ) ) p_k(X)=exp(F_k(X))/\sum_{l=1}^K exp(F_l(X)) pk(X)=exp(Fk(X))/l=1Kexp(Fl(X))
另外 y k ∈ { 0 , 1 } y_k \in \{0,1\} yk{0,1}
那么
y ~ k = − [ ∂ L ( { y k , F k ( X ) } 1 K ) ∂ F k ( X i ) ] { F k ( x ) = F k , m − 1 ( X ) } 1 K = y k − P k , m − 1 ( X ) \tilde{y}_{k}=-[\frac {\partial L(\{y_{k},F_k(X)\}_1^K)} {\partial F_k(X_i)}]_{\{F_k(x)=F_{k,m-1}(X)\}_1^K}=y_k-P_{k,m-1}(X) y~k=[Fk(Xi)L({yk,Fk(X)}1K)]{Fk(x)=Fk,m1(X)}1K=ykPk,m1(X)
其中
P k , m − 1 ( X ) = e x p ( f k , m − 1 ( X ) ) / ∑ l = 1 K e x p ( F l , m − 1 ( X ) ) P_{k,m-1}(X)=exp(f_{k,m-1}(X))/\sum_{l=1}^Kexp(F_{l,m-1}(X)) Pk,m1(X)=exp(fk,m1(X))/l=1Kexp(Fl,m1(X))


$F_{k0}(X)=0,k=1,…,K $
For m=1 to M :
p k ( X ) = e x p ( F k ( X ) ) / ∑ l = 1 K e x p ( F l ( X ) ) , k = 1 , . . . K \quad p_k(X)=exp(F_k(X))/\sum_{l=1}^Kexp(F_l(X)),k=1,...K pk(X)=exp(Fk(X))/l=1Kexp(Fl(X)),k=1,...K
$ \quad$ For k=1,…, K
y ~ i k = y i k − p k ( X i ) , i = 1 , . . . , N \quad \tilde{y}_{ik}=y_{ik}-p_k(X_i),i=1,...,N y~ik=yikpk(Xi),i=1,...,N
{ R j k m } j = 1 J = J − t e r m i n a l n o d e n o d e t r e e ( { y ~ i k , X i } 1 N ) \quad \{R_{jkm}\}_{j=1}^J =J-terminal \quad node \quad node \quad tree(\{ \tilde{y}_{ik},X_i\}_1^N) {Rjkm}j=1J=Jterminalnodenodetree({y~ik,Xi}1N)
γ j k m = K − 1 K ∑ x i ∈ R j k m y ~ i k ∑ X i ∈ R j k m ∣ y ~ i k ∣ ( 1 − ∣ y ~ i k ∣ ) \quad \gamma_{jkm}=\frac {K-1} {K} \frac {\sum_{x_i \in R_{jkm}} \tilde{y}_{ik}} {\sum_{X_i \in R_{jkm}}|\tilde{y}_{ik}| (1-|\tilde{y}_{ik}|)} γjkm=KK1XiRjkmy~ik(1y~ik)xiRjkmy~ik
F k m ( X ) = F f , m − 1 ( X ) + ∑ j = 1 J γ j k m 1 ( X ∈ R j k m ) \quad F_{km}(X)=F_{f,m-1}(X)+\sum_{j=1}^J\gamma_{jkm}1(X \in R_{jkm}) Fkm(X)=Ff,m1(X)+j=1Jγjkm1(XRjkm)
end For

5.xgboost
xgboost是在gradient boosting 的基础上进行改进,并且实现了并行化,提高了运算效率 ,更加利于工程学上的使用。
这里只介绍xgboost的原理,针对它的工程学上的实现细节不多做介绍.

我们知道在Gradient boost中需要通过梯度下降的方法来获得一个对树模型的拟合,但是xgboost并不采用梯度下降的方法,而是对损失函数做了二次泰勒展开逼近,从而简化了树模型拟合过程。
首先 在第m次迭代时,我们的目的是
min ⁡ Θ ∑ i L ( Y i , f m − 1 ( X i ) + T m ( X i ; Θ ) ) \min_{\Theta} \sum_i L(Y_i,f_{m-1}(X_i)+T_m(X_i;\Theta)) ΘminiL(Yi,fm1(Xi)+Tm(Xi;Θ))
xgboost对L(Y,F)做了二次泰勒展开
min ⁡ Θ ∑ i L ( Y i , f m − 1 ( X i ) ) + q m T m ( X i ; Θ ) + 1 / 2 h m T m 2 ( X i ; Θ ) (5) \min_{\Theta} \sum_i L(Y_i,f_{m-1}(X_i))+q_m T_m(X_i;\Theta)+1/2 h_m T_m^2(X_i;\Theta) \tag 5 ΘminiL(Yi,fm1(Xi))+qmTm(Xi;Θ)+1/2hmTm2(Xi;Θ)(5)
其中 q m = [ ∂ L ( Y i , f ( X i ) ) ∂ f ( X i ) ] f ( X i ) = f m − 1 ( X i ) q_m=[\frac{\partial {L(Y_i,f(X_i))}}{\partial f(X_i)}]_{f(X_i)=f_{m-1}(X_i)} qm=[f(Xi)L(Yi,f(Xi))]f(Xi)=fm1(Xi)
h m = [ ∂ 2 L ( Y i , f ( X i ) ) ∂ f ( X i ) 2 ] f ( X i ) = f m − 1 ( X i ) h_m=[\frac{\partial^2 {L(Y_i,f(X_i))}}{\partial f(X_i)^2}]_{f(X_i)=f_{m-1}(X_i)} hm=[f(Xi)22L(Yi,f(Xi))]f(Xi)=fm1(Xi)
xgboost在上述损失函数的基础上添加了正则化项,针对第m轮迭代生成的决策树的相关参数,一个是叶子节点的个数(可以表示树的结构复杂性),一个是在不同的分割区间的取值,这里用w表示。
Ω ( T ( X ; Θ ) ) = γ T + 1 / 2 λ ∑ j = 1 T w j 2 \Omega(T(X;\Theta))=\gamma T+1/2 \lambda \sum_{j=1}^T w_j^2 Ω(T(X;Θ))=γT+1/2λj=1Twj2
其中T表示树的叶子节点的个数。 w j w_j wj表示在叶子节点中的预测值的取值。
将正则项添加到公式5中,得到下式
min ⁡ Θ ∑ i = 1 N [ q m i T m ( X i ; Θ ) + 1 / 2 h m i T m 2 ( X i ; Θ ) ] + γ T + 1 / 2 λ ∑ j = 1 T w j 2 \min_\Theta\sum_{i=1}^N[q_{mi}T_m(X_i;\Theta)+1/2 h_{mi} T_m^2(X_i;\Theta)]+\gamma T+1/2\lambda \sum_{j=1}^T w_j^2 Θmini=1N[qmiTm(Xi;Θ)+1/2hmiTm2(Xi;Θ)]+γT+1/2λj=1Twj2
等价于
min ⁡ Θ ∑ j = 1 T [ ( ∑ i ∈ I j q m i ) w j + 1 / 2 ( ∑ i ∈ I j h m i + λ ) w j 2 ] + γ T (6) \min_{\Theta}\sum_{j=1}^T[(\sum_{i \in I_j}q_{mi})w_j+1/2(\sum_{i \in I_j}h_{mi}+\lambda)w_j^2]+\gamma T \tag 6 Θminj=1T[(iIjqmi)wj+1/2(iIjhmi+λ)wj2]+γT(6)
当一棵树确定之后,我们便可以解出
w j ∗ = ∑ i ∈ I j q m i ∑ i ∈ I j h m i + λ + γ T (7) w_j^*=\frac {\sum_{i \in I_j} q_{mi}} {\sum_{i \in I_j} h_{mi}+\lambda}+ \gamma T \tag 7 wj=iIjhmi+λiIjqmi+γT(7)
w j ∗ w_j^* wj带入公式6得到
− 1 / 2 ∑ j = 1 T ( ∑ i ∈ I j q m i ) 2 ∑ i ∈ I j h m i + λ + γ T (8) -1/2 \sum_{j=1}^T \frac {(\sum_{i \in I_j} q_{mi})^2} {\sum_{i \in I_j} h_{mi}+\lambda}+\gamma T \tag 8 1/2j=1TiIjhmi+λ(iIjqmi)2+γT(8)
我们知道了公式7和公式8,自然可以使用于决策树的训练。xgboost指出在决策树的生成过程中的分割函数为
L s p l i t = 1 / 2 [ ( ∑ i ∈ I L q m i ) 2 ∑ i ∈ I L h m i + λ + ( ∑ i ∈ I R q m i ) 2 ∑ i ∈ I R h m i + λ − ( ∑ i ∈ I q m i ) 2 ∑ i ∈ I h m i + λ ] − γ L_{split}=1/2[\frac {(\sum_{i \in I_L} q_{mi})^2} {\sum_{i \in I_L} h_{mi}+\lambda}+\frac {(\sum_{i \in I_R} q_{mi})^2} {\sum_{i \in I_R} h_{mi}+\lambda}-\frac {(\sum_{i \in I} q_{mi})^2} {\sum_{i \in I} h_{mi}+\lambda}]-\gamma Lsplit=1/2[iILhmi+λ(iILqmi)2+iIRhmi+λ(iIRqmi)2iIhmi+λ(iIqmi)2]γ
其中I表示父节点中的样本点集, I L I_L IL I R I_R IR分别表示由父节点生成的左子节点中的样本点和右子节点的样本数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值