TASK11 XGBoost

本文深入探讨了XGBoost的原理,包括目标函数构建、迭代训练过程以及损失函数的泰勒展开。同时介绍了LightGBM作为XGBoost的优化版本,其在效率和内存使用上的改进,以及对缺失值和类别特征的处理。LightGBM在保持高精度的同时,提供更快的训练速度和更低的资源消耗。
摘要由CSDN通过智能技术生成

XGBoost原理及其实战

XGBoost的思想

假设我们的数据集是 D = { ( x i , y i ) } ( ∣ D ∣ = n , x i ∈ R m , y i ∈ R ) \mathcal{D}=\left\{\left(\mathbf{x}_{i}, y_{i}\right)\right\}\left(|\mathcal{D}|=n, \mathbf{x}_{i} \in \mathbb{R}^{m}, y_{i} \in \mathbb{R}\right) D={(xi,yi)}(D=n,xiRm,yiR)

STEP1:构造目标函数

假设有K棵树,则第i个样本的输出为 y ^ i = ϕ ( x i ) = ∑ k = 1 K f k ( x i ) , f k ∈ F \hat{y}_{i}=\phi\left(\mathrm{x}_{i}\right)=\sum_{k=1}^{K} f_{k}\left(\mathrm{x}_{i}\right), \quad f_{k} \in \mathcal{F} y^i=ϕ(xi)=k=1Kfk(xi),fkF
其中, F = { f ( x ) = w q ( x ) } ( q : R m → T , w ∈ R T ) \mathcal{F}=\left\{f(\mathbf{x})=w_{q(\mathbf{x})}\right\}\left(q: \mathbb{R}^{m} \rightarrow T, w \in \mathbb{R}^{T}\right) F={f(x)=wq(x)}(q:RmT,wRT)

因此,目标函数的构建为:
L ( ϕ ) = ∑ i l ( y ^ i , y i ) + ∑ k Ω ( f k ) \mathcal{L}(\phi)=\sum_{i} l\left(\hat{y}_{i}, y_{i}\right)+\sum_{k} \Omega\left(f_{k}\right) L(ϕ)=il(y^i,yi)+kΩ(fk)

其中, ∑ i l ( y ^ i , y i ) \sum_{i} l\left(\hat{y}_{i}, y_{i}\right) il(y^i,yi)为loss function, ∑ k Ω ( f k ) \sum_{k} \Omega\left(f_{k}\right) kΩ(fk)为正则化项。

STEP2: 迭代训练

我们给定初始解为 x i x_i xi y ^ i ( 0 ) = 0 \hat{y}_i^{(0)} = 0 y^i(0)=0

则可以构造迭代序列为
y ^ i ( K ) = y ^ i ( K − 1 ) + f K ( x i ) \hat{y}_i^{(K)} = \hat{y}_i^{(K-1)} + f_K(x_i) y^i(K)=y^i(K1)+fK(xi)
其中,$ \hat{y}_i^{(K-1)} $ 为前K-1棵树的预测结果,$ f_K(x_i)$ 为第K棵树的预测结果。

将迭代序列代进目标函数得到
L ( K ) = ∑ i = 1 n l ( y ^ i ( K − 1 ) + f K ( x i ) , y i ) + ∑ k Ω ( f k ) \mathcal{L}^{(K)}=\sum_{i=1}^{n} l\left( \hat{y}_{i}^{(K-1)}+f_{K}\left(\mathrm{x}_{i}\right) ,y_{i} \right)+\sum_{k} \Omega\left(f_{k}\right) L(K)=i=1nl(y^i(K1)+fK(xi),yi)+kΩ(fk)

注:一般的loss fuction 没有规定必须满足对称性,原教案这个地方的顺序要注意一下

同理,正则化项也可以写成迭代方程的形式
∑ k Ω ( f k ) = ∑ k = 1 K − 1 Ω ( f k ) + Ω ( f K ) \sum_{k} \Omega\left(f_{k}\right) = \sum_{k=1} ^{K-1}\Omega\left(f_{k}\right)+\Omega\left(f_{K}\right) kΩ(fk)=k=1K1Ω(fk)+Ω(fK)
即 第 K K K棵树的复杂度是由前面的 K − 1 K-1 K1棵树累加再加上当前的复杂度得到的。

在模型构建到第K棵树的时候已经固定,无法改变,因此是一个已知的常数,可以在最优化的时候省去,故:
L ( K ) = ∑ i = 1 n l ( y ^ i ( K − 1 ) + f K ( x i ) , y i ) + Ω ( f K ) \mathcal{L}^{(K)}=\sum_{i=1}^{n} l\left( \hat{y}_{i}^{(K-1)}+f_{K}\left(\mathrm{x}_{i}\right) ,y_{i} \right)+\Omega\left(f_{K}\right) L(K)=i=1nl(y^i(K1)+fK(xi),yi)+Ω(fK)

STEP3: 利用 T a y l o r Taylor Taylor展开近似loss function

我们对loss function对第 i i i个样本进行二阶泰勒展开,可以得到
l ( y i , y ^ i ( K − 1 ) + f K ( x i ) ) l\left(y_{i}, \hat{y}_{i}^{(K-1)}+f_{K}\left(\mathrm{x}_{i}\right)\right) l(yi,y^i(K1)+fK(xi))
因为本质上loss function是个复合函数,所以一阶导数为
l ′ = ( ∂ y ^ ( K − 1 ) l ( y i , y ^ ( t − 1 ) ) ) f K ( x i ) l' = (\partial_{\hat{y}(K-1)} l\left(y_{i}, \hat{y}^{(t-1)}\right)) f_{K}\left(\mathrm{x}_{i}\right) l=(y^(K1)l(yi,y^(t1)))fK(xi)
本来应该有两项,但第一项 y i y_i yi为标量,故导数为0.

二阶导数为
l ′ ′ = ∂ 2 l ( y i , y ^ ( K − 1 ) ) ∂ ( y ^ ( K − 1 ) ) 2 f K 2 ( x i ) l'' =\frac{\partial^{2}l\left(y_{i}, \hat{y}^{(K-1)}\right)}{\partial {(\hat{y}^{(K-1)}})^2} f_{K}^{2} \left(\mathrm{x}_{i}\right) l=(y^(K1))22l(yi,y^(K1))fK2(xi)

所以,
L ( K ) ≃ ∑ i = 1 n [ l ( y i , y ^ ( K − 1 ) ) + g i f K ( x i ) + 1 2 h i f K 2 ( x i ) ] + Ω ( f K ) \mathcal{L}^{(K)} \simeq \sum_{i=1}^{n}\left[l\left(y_{i}, \hat{y}^{(K-1)}\right)+g_{i} f_{K}\left(\mathrm{x}_{i}\right)+\frac{1}{2} h_{i} f_{K}^{2}\left(\mathrm{x}_{i}\right)\right]+\Omega\left(f_{K}\right) L(K)i=1n[l(yi,y^(K1))+gifK(xi)+21hifK2(xi)]+Ω(fK)

由于 ∑ i = 1 n l ( y i , y ^ ( K − 1 ) ) \sum_{i=1}^{n}l\left(y_{i}, \hat{y}^{(K-1)}\right) i=1nl(yi,y^(K1))在模型构建到第K棵树的时候已经固定,无法改变,因此是一个已知的常数,可以在最优化的时候省去,故:
L ~ ( K ) = ∑ i = 1 n [ g i f K ( x i ) + 1 2 h i f K 2 ( x i ) ] + Ω ( f K ) \tilde{\mathcal{L}}^{(K)}=\sum_{i=1}^{n}\left[g_{i} f_{K}\left(\mathbf{x}_{i}\right)+\frac{1}{2} h_{i} f_{K}^{2}\left(\mathbf{x}_{i}\right)\right]+\Omega\left(f_{K}\right) L~(K)=i=1n[gifK(xi)+21hifK2(xi)]+Ω(fK)

STEP4:树的定义

由于模型复杂度 Ω ( f K ) \Omega\left(f_{K}\right) Ω(fK)
由叶子节点的个数以及节点函数值来构建,则:
Ω ( f K ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega\left(f_{K}\right) = \gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2} Ω(fK)=γT+21λj=1Twj2
即这里采用 L 2 L_2 L2正则化, T T T代表叶节点个数, w j w_j wj代表叶节点的预测值。第 K K K棵树的复杂度由叶节点个数和叶节点的预测值来衡量。叶节点越多树越复杂。

这里补充一下正则化的理论,参考文献为[机器学习中正则化项L1和L2的直观理解:https://blog.csdn.net/jinping_shi/article/details/52433975]

代入目标函数得到:
L ~ ( K ) = ∑ i = 1 n [ g i f K ( x i ) + 1 2 h i f K 2 ( x i ) ] + γ T + 1 2 λ ∑ j = 1 T w j 2 = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 ] + γ T \begin{aligned} \tilde{\mathcal{L}}^{(K)} &=\sum_{i=1}^{n}\left[g_{i} f_{K}\left(\mathrm{x}_{i}\right)+\frac{1}{2} h_{i} f_{K}^{2}\left(\mathrm{x}_{i}\right)\right]+\gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2} \\ &=\sum_{j=1}^{T}\left[\left(\sum_{i \in I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in I_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma T \end{aligned} L~(K)=i=1n[gifK(xi)+21hifK2(xi)]+γT+21λj=1Twj2=j=1TiIjgiwj+21iIjhi+λwj2+γT
由于我们的目标就是最小化目标函数,现在的目标函数化简为一个关于w的二次函数: L ~ ( K ) = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 ] + γ T \tilde{\mathcal{L}}^{(K)}=\sum_{j=1}^{T}\left[\left(\sum_{i \in I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in I_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma T L~(K)=j=1T[(iIjgi)wj+21(iIjhi+λ)wj2]+γT,根据二次函数求极值的公式: y = a x 2 b x c y=ax^2 bx c y=ax2bxc求极值,对称轴在 x = − b 2 a x=-\frac{b}{2 a} x=2ab,极值为 y = 4 a c − b 2 4 a y=\frac{4 a c-b^{2}}{4 a} y=4a4acb2,因此:
w j ∗ = − ∑ i ∈ I j g i ∑ i ∈ I j h i + λ w_{j}^{*}=-\frac{\sum_{i \in I_{j}} g_{i}}{\sum_{i \in I_{j}} h_{i}+\lambda} wj=iIjhi+λiIjgi
以及
L ~ ( K ) ( q ) = − 1 2 ∑ j = 1 T ( ∑ i ∈ I j g i ) 2 ∑ i ∈ I j h i + λ + γ T \tilde{\mathcal{L}}^{(K)}(q)=-\frac{1}{2} \sum_{j=1}^{T} \frac{\left(\sum_{i \in I_{j}} g_{i}\right)^{2}}{\sum_{i \in I_{j}} h_{i}+\lambda}+\gamma T L~(K)(q)=21j=1TiIjhi+λ(iIjgi)2+γT

STEP5:使用目标函数的变化来作为分裂节点的标准

分割节点的标准为 m a x { L ~ ( o l d ) − L ~ ( n e w ) } max\{\tilde{\mathcal{L}}^{(old)} - \tilde{\mathcal{L}}^{(new)} \} max{L~(old)L~(new)},即:
L split  = 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}_{\text {split }}=\frac{1}{2}\left[\frac{\left(\sum_{i \in I_{L}} g_{i}\right)^{2}}{\sum_{i \in I_{L}} h_{i}+\lambda}+\frac{\left(\sum_{i \in I_{R}} g_{i}\right)^{2}}{\sum_{i \in I_{R}} h_{i}+\lambda}-\frac{\left(\sum_{i \in I} g_{i}\right)^{2}}{\sum_{i \in I} h_{i}+\lambda}\right]-\gamma Lsplit =21[iILhi+λ(iILgi)2+iIRhi+λ(iIRgi)2iIhi+λ(iIgi)2]γ

LightGBM

LightGBM是一款基于GBDT(梯度提升决策树)算法的分布式梯度提升框架,为了满足缩短模型计算时间的需求,LightGBM的设计思路主要集中在减小数据对内存与计算性能的使用,以及减少多机器并行计算时的通讯代价。

LightGBM可以看作是XGBoost的升级豪华版,在获得与XGBoost近似精度的同时,又提供了更快的训练速度与更少的内存消耗。正如其名字中的Light所蕴含的那样,LightGBM在大规模数据集上跑起来更加优雅轻盈。

LightGBM的主要优点:

  1. 简单易用。提供了主流的Python\C++\R语言接口,用户可以轻松使用LightGBM建模并获得相当不错的效果。
  2. 高效可扩展。在处理大规模数据集时高效迅速、高准确度,对内存等硬件资源要求不高。
  3. 鲁棒性强。相较于深度学习模型不需要精细调参便能取得近似的效果。
  4. LightGBM直接支持缺失值与类别特征,无需对数据额外进行特殊处理

LightGBM的主要缺点:

  1. 相对于深度学习模型无法对时空位置建模,不能很好地捕获图像、语音、文本等高维数据。
  2. 在拥有海量训练数据,并能找到合适的深度学习模型时,深度学习的精度可以遥遥领先LightGBM。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值