Boosing算法是一种加法模型,它包含一种残差逼近的思想。
F ( x ) = ∑ t = 0 T f t ( x ) F(x)=\sum_{t=0}^{T}f_t(x) F(x)=t=0∑Tft(x)
GBDT是一种较为经典的梯度提升树算法,包括Xgboost(Xgboost是GBDT的一个变种)。
GBDT 在函数空间中利用梯度下降法
进行优化。
Xgboost在函数空间中利用牛顿法
进行优化。且相比GBDT,Xgboost加入了正则项,使模型更加不容易过拟合。
简单的说,GBDT与Xgboost都是在泰勒展开式的基础上进行的。不同的是,GBDT的损失函数是一阶导数,而Xgboost是引入了海森矩阵的二阶导数,且加入了正则项。
这里首先介绍下两种优化方法。
在机器学习任务中, 需要最小化损失函数 L ( θ ) L(\theta) L(θ),其中 θ \theta θ是要求解的模型参数。
梯度下降法常用来求解这种无约束最优化问题, 它是一种迭代方法:选取初值 θ 0 \theta^{0} θ0,不断迭代,更新 θ \theta θ的值,进行损失函数的极小化。
梯度下降法利用的一阶泰勒
展开。
将 L ( θ t ) L(\theta^{t}) L(θt) 在 θ t − 1 \theta^{t-1} θt−1处进行二阶泰勒展开
L ( θ t ) ≈ L ( θ t − 1 ) + L ′ ( θ t − 1 ) Δ θ + L ′ ′ ( θ t − 1 ) Δ θ 2 / 2 L(\theta^{t}) \approx L(\theta^{t-1}) + L^{'}(\theta^{t-1})\Delta\theta + L^{''}(\theta^{t-1})\Delta\theta^{2}/2 L(θt)≈L(θt−1)+L′(θt−1)Δθ+L′′(θt−1)Δθ2/2
为了简化分析过程,假设参数是标量(即 θ \theta θ只有一维),则可将一阶和二阶导数分别记为 g g g和 h h h:
L ( θ t ) ≈ L ( θ t − 1 ) + g Δ θ + h Δ θ 2 2 L(\theta^{t}) \approx L(\theta^{t-1}) + g\Delta\theta + h\frac{\Delta\theta^{2}}{2} L(θt)≈L(θt−1)+gΔθ+h2Δθ2
要使得 L ( θ t ) L(\theta^{t}) L(θt)极小,即让 g Δ θ + h Δ θ 2 2 g\Delta\theta + h\frac{\Delta\theta^{2}}{2} gΔθ+h2Δθ2极小,
可令 ∂ ( g Δ θ + h Δ θ 2 2 ) ∂ Δ θ = 0 \frac{\partial (g\Delta\theta + h\frac{\Delta\theta^{2}}{2})}{\partial \Delta\theta} = 0 ∂Δθ∂(gΔθ+h2Δθ2)=0
求得 Δ θ = − g h \Delta\theta = -\frac{g}{h} Δθ=−hg,故 θ t = θ t − 1 + Δ θ = θ t − 1 − g h \theta^{t} = \theta^{t-1} + \Delta\theta = \theta^{t-1} -\frac{g}{h} θt=θt−1+Δθ=θt−1−hg
推广到向量形式的迭代公式: θ t = θ t − 1 − H − 1 g \theta^{t} = \theta^{t-1} -H^{-1}g θt=θt−1−H−1g
这里的 H H H是海森矩阵。
给定数据集 D = { ( x i , y i ) } D = \{(x_i,y_i)\} D={(xi,yi)},XGBoost进行additive training,学习K棵树,采用以下函数对样本进行预测:
y i = Φ ( x i ) = ∑ k = 1 K f k ( x i ) , f k ∈ F y_i = \Phi(x_i) = \sum_{k = 1}^{K}f_k(x_i), f_k \in F yi=Φ(xi)=k=1∑Kfk(xi),fk∈F
这里 F F F是假设空间, f ( x ) f(x) f(x)是回归树(CART):
F = { f ( x ) = w q ( x ) } ( q : R m → T , w ∈ R T ) F = \{f(x) = w_{q(x)}\}(q : \mathbb R^{m} \rightarrow T,w \in \mathbb R^{T}) F={f(x)=wq(x)}(q:Rm→T,w∈RT)
q ( x ) q(x) q(x)表示样本分到了某个叶子节点上,w是叶子节点的分数(leaf score),所以 w q ( x ) w_{q(x)} wq(x)表示回归树对样本的预测值
Ridge Regression: ∑ i = 1 n ( y i − θ T x i ) 2 + λ ∣ ∣ θ ∣ ∣ 2 \sum_{i = 1}^{n}(y_i - \theta^{T}x_i)^2 + \lambda ||\theta||^2 ∑i=1n(yi−θTxi)2+λ∣∣θ∣∣2
Lasso: ∑ i = 1 n ( y i − θ T x i ) 2 + λ ∣ ∣ θ ∣ ∣ 1 \sum_{i = 1}^{n}(y_i - \theta^{T}x_i)^2 + \lambda ||\theta||_1 ∑i=1n(yi−θTxi)2+λ∣∣θ∣∣1
XGboost的目标函数(函数空间):
O b j ( Θ ) = ∑ i l ( y ^ i , y i ) + ∑ k Ω ( f k ) Obj(\Theta) = \sum_il(\widehat{y}_i,y_i) + \sum_k\Omega(f_k) Obj(Θ)=i∑l(y i,yi)+k∑Ω(fk)
相比原始的GBDT, XGBoost的目标函数多了正则项, 使得学习出来的模型更加不容易过拟合。
有哪些指标可以衡量树的复杂度?
树的深度, 内部节点个数, 叶子节点个数( T T T), 叶节点分数( w w w)…
XGBoost采用的:
Ω ( f ) = γ T + 1 2 λ ∣ ∣ ω ∣ ∣ 2 \Omega(f) = \gamma T + \frac{1}{2}\lambda||\omega||^{2} Ω(f)=γT+21λ∣∣ω∣∣2
对叶子节点个数进行惩罚,相当于在训练过程中做了剪枝。
第t次迭代后, 模型的预测等于前t-1次的模型预测加上第t棵树的预
测:
y ^ i ( t ) = y ^ i ( t − 1 ) + f t ( x i ) \widehat{y}_i^{(t)} = \widehat{y}_i^{(t-1)} + f_t(x_i) y i(t)=y i(t−1)+ft(xi)
此时目标函数可写作:
L ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) + Ω ( f t ) L(t) = \sum_{i = 1}^{n}l(y_i,\widehat{y}_i^{(t-1)} + f_t(x_i) + \Omega(f_t) L(t)=i=1∑nl(yi,y i(t−1)+ft(xi)+Ω(ft)
公式中 y i , y ^ i ( t − 1 ) y_i,\widehat{y}_i^{(t-1)} yi,y i(t−1)都已知, 模型要学习的只有第t棵树 f t f_t ft
将误差函数在 y ^ i t − 1 \widehat{y}_i^{t-1} y it−1处进行二阶泰勒展开:
L ( t ) ≈ ∑ i = 1 n [ l ( y i , y ^ i ( t − 1 ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) L(t) \approx \sum_{i = 1}^{n}[l(y_i,\widehat{y}_i^{(t-1)} + g_if_t(x_i)+ \frac{1}{2}h_if^2_t(x_i)] + \Omega(f_t) L(t)≈i=1∑n[l(yi,y i(t−1)+gift(xi)+21hift2(xi)]+Ω(ft)
公式中, g i = ∂ y ^ ( t − 1 ) l ( y i , y ^ ( t − 1 ) ) g_i = \partial_{\widehat{y}(t-1)}l(y_i,\widehat{y}^{(t-1)}) gi=∂y (t−1)l(yi,y (t−1)), h i = ∂ y ^ ( t − 1 ) 2 l ( y i , y ^ ( t − 1 ) ) h_i = \partial^2_{\widehat{y}(t-1)}l(y_i,\widehat{y}^{(t-1)}) hi=∂y (t−1)2l(yi,y (t−1))
将公式中的常数项去掉, 得到:
L ~ ( t ) ≈ ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) \widetilde{L}(t) \approx \sum_{i = 1}^{n}[g_if_t(x_i)+ \frac{1}{2}h_if^2_t(x_i)] + \Omega(f_t) L (t)≈i=1∑n[gift(xi)+21hift2(xi)]+Ω(ft)
把 f t , Ω ( f t ) f_t,\Omega(f_t) ft,Ω(ft) 写成树结构的形式, 即把下式代入目标函数中
f ( x ) = w q ( x ) f(x) = w_q(x) f(x)=wq(x) , Ω ( f ) = γ T + 1 2 λ ∣ ∣ ω ∣ ∣ 2 \Omega(f) = \gamma T + \frac{1}{2}\lambda||\omega||^{2} Ω(f)=γT+21λ∣∣ω∣∣2
得到:
L ~ ( t ) ≈ ∑ i = 1 n [ g i w q ( x i ) + 1 2 h i w q 2 ( x i ) ] + γ T + 1 2 λ ∣ ∣ ω ∣ ∣ 2 \widetilde{L}(t) \approx \sum_{i = 1}^{n}[g_iw_q(x_i)+ \frac{1}{2}h_iw^2_q(x_i)] + \gamma T + \frac{1}{2}\lambda||\omega||^{2} L (t)≈i=1∑n[giwq(xi)+21hiwq2(xi)]+γT+21λ∣∣ω∣∣2
其中 ∑ i = 1 n [ g i w q ( x i ) + 1 2 h i w q 2 ( x i ) ] \sum_{i = 1}^{n}[g_iw_q(x_i)+ \frac{1}{2}h_iw^2_q(x_i)] ∑i=1n[giwq(xi)+21hiwq2(xi)]是对样本累加, 1 2 λ ∣ ∣ ω ∣ ∣ 2 \frac{1}{2}\lambda||\omega||^{2} 21λ∣∣ω∣∣2是对叶子节点的累加。
怎么统一起来?
定义每个叶节点j上的样本集合为: I j = { i ∣ q ( x i ) = j } I_j = \{ i|q(x_i) = j\} Ij={i∣q(xi)=j}
则目标函数可以写成按叶节点累加的形式:
L ~ ( t ) = ∑ j = 1 T [ ( ∑ g i ) w j + 1 2 ( ∑ h i + λ ) w j 2 ] + γ T \widetilde{L}(t) = \sum_{j = 1}^{T}[ (\sum g_i) w_j+ \frac{1}{2}(\sum h_i + \lambda )w^2_j] + \gamma T L (t)=j=1∑T[(∑gi)wj+21(∑hi+λ)wj2]+γT
= ∑ j = 1 T [ G j w j + 1 2 ( ∑ H j + λ ) w j 2 ] + γ T = \sum_{j = 1}^{T}[ G_jw_j+ \frac{1}{2}(\sum H_j + \lambda )w^2_j] + \gamma T =j=1∑T[Gjwj+21(∑Hj+λ)wj2]+γT
如果确定了树的结构( 即 q ( x ) q(x) q(x)确定),为了使目标函数最小, 可以令其导数为0, 解得每个叶节点的最优预测分数为:
w j ∗ = − G j H j + λ w_j^{*} = -\frac{G_j}{H_j + \lambda} wj∗=−Hj+λGj
代入目标函数, 得到最小损失为:
L ~ ∗ = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T \widetilde{L}^{*} = -\frac{1}{2}\sum_{j = 1}^{T}\frac{G^2_j}{H_j + \lambda} + \gamma T L ∗=−21j=1∑THj+λGj2+γT