XGBoost文章总结

结合参考文献和参考博客,对XGBoost的一点点浅显的理解,如有错误,请随时指证,谢谢!

论文题目:

XGBoost: A Scalable Tree Boosting System

提升树算法就是将不同的树做加法模型, 在GBDT里面,基本树模型是CART树:
y i ^ = ϕ ( x i ) = ∑ k = 1 K f k ( x i ) \hat{y_{i}}=\phi(x_{i})=\sum_{k=1}^{K}f_{k}(x_{i}) yi^=ϕ(xi)=k=1Kfk(xi)
GBDT的损失函数:
L ( t ) = ∑ i = 1 n l ( y i , y i ^ ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) \mathcal{L}^{(t)}=\sum_{i=1}^{n}l(y_{i}, \hat{y_{i}}^{(t-1)}+f_{t}(x_{i})) + \Omega(f_{t}) L(t)=i=1nl(yi,yi^(t1)+ft(xi))+Ω(ft)
其中,正则项: Ω ( f ) = γ T + 1 2 ∣ ∣ w ∣ ∣ 2 \Omega(f)=\gamma T + \frac{1}{2}{||w||}^{2} Ω(f)=γT+21w2

就是在前面 t − 1 t-1 t1棵树的基础上,增加一棵树,使得总损失函数最小。

f t ( x i ) f_t(x_{i}) ft(xi)是什么?它其实就是 f t f_t ft的某个叶子节点的值,叶子节点的值是可以作为模型的参数的。

CART树的另一番定义:
F = f ( x ) = ω q ( x ) ( q : R m → T , ω ∈ R T ) \mathcal{F}={f(x)=\omega_{q}(x)}(q:\mathbb{R}^{m}\rightarrow T, \omega \in {\mathbb {R}^{T}}) F=f(x)=ωq(x)(q:RmT,ωRT)
这里操作 q q q将样本 x x x m m m维空间映射成树 f f f T T T个叶子节点中的一个,即代表了树的结构,因此 ω q ( x ) \omega_{q}(x) ωq(x) f ( x ) f(x) f(x)一样都是某个叶子节点的值。

在XGBoost论文中,正则化项 Ω ( f t ) \Omega(f_{t}) Ω(ft)的具体形式是:
Ω ( f t ) = γ T + 1 2 λ ∑ j = 1 T ω j 2 \Omega(f_{t})=\gamma T + \frac{1}{2}\lambda\sum_{j=1}^{T}\omega_{j}^{2} Ω(ft)=γT+21λj=1Tωj2
将上式做二阶泰勒展开
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 ) \mathcal{L}^{(t)}\approx\sum_{i=1}^{n}[l(y_{i}, \hat{y_{i}}^{(t-1)}) + g_{i}f_{t}(x_{i}) + \frac{1}{2}h_{i}f_{t}^{2}(x_{i})] + \Omega(f_{t}) L(t)i=1n[l(yi,yi^(t1))+gift(xi)+21hift2(xi)]+Ω(ft)
其中:
g i = ∂ y i ( t − 1 ) ^ l ( y i , y i ^ ) g_{i} = \partial_{\hat{y_{i}(t-1)}}l(y_{i}, \hat{y_{i}}) gi=yi(t1)^l(yi,yi^)

g i = ∂ y i ( t − 1 ) ^ 2 l ( y i , y i ^ ) g_{i} = \partial_{\hat{y_{i}(t-1)}}^{2}l(y_{i}, \hat{y_{i}}) gi=yi(t1)^2l(yi,yi^)

要特别注意这里是损失函数对前 t − 1 t-1 t1棵树的预测结果取偏导。

将泰勒展开得到的公式变型,得到:
L ( t ) ≈ ∑ j = 1 T ∑ i ∈ I j [ g i ω j + 1 2 h i ω j ] + γ T + ∑ j = 1 T 1 2 λ ω j 2 = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 ) ] + γ T \mathcal{L}^{(t)}\approx\sum_{j=1}^{T}\sum_{i\in I_{j}}[g_{i}\omega_{j} + \frac{1}{2}h_{i}\omega_{j}] + \gamma T + \sum_{j=1}^{T}\frac{1}{2}\lambda\omega_{j}^{2}\\ =\sum_{j=1}^{T}[(\sum_{i\in I_{j}}g_{i})w_{j}+\frac{1}{2}(\sum_{i\in I_{j}}h_{i}+\lambda)w_{j}^{2})] + \gamma T L(t)j=1TiIj[giωj+21hiωj]+γT+j=1T21λωj2=j=1T[(iIjgi)wj+21(iIjhi+λ)wj2)]+γT

对于确定的树结构 q q q,最佳叶节点值和对应的优化值容易得出(求关于 w j w_{j} wj的偏导数):
ω j ∗ = − ∑ i ∈ I j g i ∑ i ∈ I j h i + λ \omega_{j}^{*}=-\frac{\sum_{i\in I_{j}}g_{i}}{\sum_{i\in I_{j}}h_{i}+\lambda} ωj=iIjhi+λiIjgi

L ~ ( t ) ( q ) = − 1 2 ∑ j = 1 T ( ∑ i ∈ I j g i ) 2 ∑ i ∈ I j h i + λ {\tilde{\mathcal{L}}^{(t)}(q)}=-\frac{1}{2}\sum_{j=1}^{T}\frac{(\sum_{i\in I_{j}}g_{i})^{2}}{\sum_{i\in I{j}}h_{i}+\lambda} L~(t)(q)=21j=1TiIjhi+λ(iIjgi)2

优化值的大小可以类似决策树树的纯度一样用来衡量树的结构好坏的标准。XGBoost是用一种从单叶子节点开始的不断计算分割目标值是否变小的贪心算法来确定最优树结构,具体来说就是从单也是节点开始,一层一层的通过目标值的变化确定结构的好坏,贪心地永远选取使目标值最小的分割结构。CART树的分割,目标值减少的评价函数是:
L s p l i t = 1 2 [ ( ∑ i ∈ I L g i ) 2 ∑ i ∈ I L h i + λ + ( ∑ i ∈ I R g i ) 2 ∑ i ∈ I R h i + λ − ( ∑ i ∈ I g i ) 2 ∑ i ∈ I h i + λ ] − γ \mathcal{L}_{split}=\frac{1}{2}[\frac{(\sum_{i\in I_{L}}g_{i})^{2}}{\sum_{i\in I_{L}}h_{i} + \lambda} + \frac{(\sum_{i\in I_{R}}g_{i})^{2}}{\sum_{i\in I_{R}}h_{i} + \lambda}-\frac{(\sum_{i\in I}g_{i})^{2}}{\sum_{i\in I}h_{i} + \lambda}] - \gamma Lsplit=21[iILhi+λ(iILgi)2+iIRhi+λ(iIRgi)2iIhi+λ(iIgi)2]γ
γ \gamma γ是模型参数,它的值越大,代表对切分后模型的下降幅度要求越高。

XGBoost运用到的两种防止过拟合的方法:Shrinkage 和 Column Subsampling。Shrinkage方法就是在每次迭代中对树的每个叶子结点的分数乘上一个缩减权重 η \eta η,这可以使得每一棵树的影响力不会太大,留下更大的空间给后面生成的树去优化模型。Column Subsampling类似于随机森林中的选取部分特征进行建树。其可分为两种,一种是按层随机采样,在对同一层内每个结点分裂之前,先随机选择一部分特征,然后只需要遍历这部分的特征,来确定最优的分割点。另一种是随机选择特征,则建树前随机选择一部分特征然后分裂就只遍历这些特征。一般情况下前者效果更好。

参考博客:

  1. 一文读懂机器学习大杀器XGBoost原理
  2. xgboost的原理没你想像的那么难
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值