机器学习:决策树与集成学习 3

本文详细介绍了XGBoost和LightGBM两种梯度提升树模型。XGBoost通过优化目标函数,引入正则化项控制模型复杂度,利用二阶泰勒展开加速计算。LightGBM则以其快速训练和低内存占用成为另一种优选。两者在GBDT基础上进行了工程实现上的改进,适用于不同的应用场景。
摘要由CSDN通过智能技术生成

机器学习:决策树与集成学习 3 XGBoost

XGBoost

XGBoost是大规模并行的boosting tree的工具,由陈天奇等人在2016年发布。
XGBoost是GBDT的工程实现,在解决问题的方法上有一定的差异,其最大的不同在于目标函数的定义。

首先,XGBoost的模型预测值还是:
y ^ i = ∑ k = 1 K f k ( x i ) \hat{y}_i=\sum_{k=1}^{K}f_k(x_i) y^i=k=1Kfk(xi)

损失函数表示为:
l ( y ^ , y ) = ∑ i l ( y ^ i , y i ) l(\hat{y},y)=\sum_{i}l(\hat{y}_i,y_i) l(y^,y)=il(y^i,yi)
注意,损失函数是指模型输出与真实值之间的偏差,目标函数有损失函数和正则化项组成,是最终的优化目标。

XGBoost中,模型的目标函数定义为:
L ( ϕ ) = ∑ i l ( y ^ i , y i ) + ∑ k Ω ( f k ) L(\phi)=\sum_{i}l(\hat{y}_i,y_i)+\sum_{k}\Omega(f_k) L(ϕ)=il(y^i,yi)+kΩ(fk)
其中, Ω ( f ) = γ T + 1 2 λ ∣ ∣ ω ∣ ∣ 2 \Omega(f)=\gamma{T}+\frac{1}{2}\lambda||\omega||^2 Ω(f)=γT+21λω2 是一个正则化项,主要作用是用来控制模型的复杂度,进而应该能够达到控制模型的方差的目的,后面我们会对这个正则化项进行详细介绍。

XGBoost是属于boosting家族的成员,让我们回到梯度提升树本身,先看XGBoost在第t轮模型得到的输出:
y ^ i ( t ) = y ^ i ( t − 1 ) + f t ( x i ) \hat{y}_i^{(t)}=\hat{y}_i^{(t-1)}+f_t(x_i) y^i(t)=y^i(t1)+ft(xi)
这里的 y ^ i ( t − 1 ) \hat{y}_i^{(t-1)} y^i(t1)在进行训练第t轮的模型 f t f_t ft时是已经固定的,训练第t个基模型时的目标函数为:
L ( t ) = ∑ i l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) L^{(t)}=\sum_il(y_i,\hat{y}_i^{(t-1)}+f_t(x_i))+\Omega(f_t) L(t)=il(yi,y^i(t1)+ft(xi))+Ω(ft)------------(1)
XGBoost优化这个目标函数与Adaboost和GBDT都有一些不同,下面进行具体介绍,记住我们的目标,找到最优的 f t f_t ft.

下面我们要对这个目标函数使用到二阶泰勒展式,这也是XGBoost在进行优化时与GBDT最大的不同之一 。首先我们先来回顾一下函数 f ( x ) f(x) f(x) x 0 x_0 x0处的 n n n阶泰勒展式:
f ( x ) = ∑ i = 0 n f ( i ) ( x 0 ) i ! ( x − x 0 ) i ) + R n ( x ) f(x)=\sum_{i=0}^{n}\frac{f^{(i)}(x_0)}{i!}(x-x_0)^i)+R_n(x) f(x)=i=0ni!f(i)(x0)(xx0)i)+Rn(x)
f ( x + Δ x ) f(x+\Delta{x}) f(x+Δx)在点 x x x处的二阶泰勒展开为:
f ( x + Δ x ) = f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 f(x+\Delta{x})=f(x)+f^{'}(x)\Delta{x}+\frac{1}{2}f^{''}(x)\Delta{x}^2 f(x+Δx)=f(x)+f(x)Δx+21f(x)Δx2

进一步,我们对上面的损失函数进行进行二阶泰勒展开:
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 ) ] + ∑ i = 1 t Ω ( f i ) L^{(t)}\simeq\sum_{i=1}^{n}[l(y_i,\hat{y}_i^{(t-1)})+g_if_t(x_i)+\frac{1}{2}h_if_t^{2}(x_i)] +\sum_{i=1}^{t}\Omega(f_i) L(t)i=1n[l(yi,y^i(t1))+gift(xi)+21hift2(xi)]+i=1tΩ(fi) -----(2)
其中, g i , h i g_i, h_i gi,hi 分别表示损失函数 l ( y i , y ^ i ( t − 1 ) l(y_i,\hat{y}_i^{(t-1)} l(yi,y^i(t1) y ^ i ( t − 1 ) \hat{y}_i^{(t-1)} y^i(t1) 的一阶导数和二阶导数。并且要注意公式 (1) 和公式 (2) 中损失函数的区别,以回归问题中的平方损失函数为例:
l ( y i , y ^ i ( t − 1 ) ) = ∑ i = 1 n ( y i − y ^ i ( t − 1 ) ) 2 l(y_i,\hat{y}_i^{(t-1)})=\sum_{i=1}^{n}(y_i-\hat{y}_i^{(t-1)})^2 l(yi,y^i(t1))=i=1n(yiy^i(t1))2
g i = ∂ ( y i − y ^ i ( t − 1 ) ) 2 ∂ y ^ i ( t − 1 ) = 2 ( y i − y ^ i ( t − 1 ) ) g_i=\frac{\partial(y_i-\hat{y}_i^{(t-1)})^2}{\partial\hat{y}_i^{(t-1)}}=2(y_i-\hat{y}_i^{(t-1)}) gi=y^i(t1)(yiy^i(t1))2=2(yiy^i(t1))
h i = ∂ 2 ( y i − y ^ i ( t − 1 ) ) 2 ∂ ( y ^ i ( t − 1 ) ) 2 = 2 h_i=\frac{\partial^2(y_i-\hat{y}_i^{(t-1)})^2}{\partial(\hat{y}_i^{(t-1)})^2}=2 hi=(y^i(t1))22(yiy^i(t1))2=2
因此,我们在进行第 t 轮迭代优化时,最重要的就是要求出目标函数对 y ^ i ( t − 1 ) \hat{y}_i^{(t-1)} y^i(t1) 的一阶和二阶偏导数 g i , h i g_i, h_i gi,hi。 并且第 t 轮迭代时,公式(2)中的 l ( y i , y ^ i ( t − 1 ) ) l(y_i,\hat{y}_i^{(t-1)}) l(yi,y^i(t1))是一个常数,并不参与优化计算过程。

下面,我们再来看目标函数中的正则化项,XGBoost 相较于GBDT的一个不同就是XBGoost中显式的引入了这个正则化项用于控制模型的复杂度。具体的,这个正则化项表示为:
Ω ( f t ) = γ T + 1 2 λ ∑ j = 1 T W j 2 \Omega(f_t)=\gamma{T}+\frac{1}{2}\lambda\sum_{j=1}^{T}W_j^2 Ω(ft)=γT+21λj=1TWj2
其中,T是叶子节点的个数,代表了模型的复杂度,叶子个数越少,模型越简单。
我们用 q ( x ) q(x) q(x)表示样本所在的节点, w ( q ) w(q) w(q)表示叶子节点的取值, w q ( x ) w_{q(x)} wq(x)表示每个样本的取值(预测值), I j I_j Ij表示第j个叶子节点的样本集合。
进一步,我们将公式(2)表示为:
L ( t ) = ∑ i = 1 n ( g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ) + Ω ( f t ) L^{(t)}=\sum_{i=1}^{n}(g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i))+\Omega(f_t) L(t)=i=1n(gift(xi)+21hift2(xi))+Ω(ft)--------(3)
= ∑ i = 1 n ( g i w q ( x i ) + 1 2 h i w q 2 ( x i ) ) + γ T + 1 2 λ ∑ j = 1 T W j 2 =\sum_{i=1}^{n}(g_iw_q(x_i) + \frac{1}{2}h_iw_q^2(x_i))+\gamma{T}+\frac{1}{2}\lambda\sum_{j=1}^{T}W_j^2 =i=1n(giwq(xi)+21hiwq2(xi))+γT+21λj=1TWj2 --------(4)
= ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w i + 1 2 ( ( ∑ i ∈ I j h i ) + λ ) w j 2 ] + γ T =\sum_{j=1}^{T}[(\sum_{i\in{I_j}}g_i)w_i+\frac{1}{2}((\sum_{i\in{I_j}}h_i)+\lambda)w_j^2]+\gamma{T} =j=1T[(iIjgi)wi+21((iIjhi)+λ)wj2]+γT----------(5)
= ∑ j = 1 T [ G j w i + 1 2 ( H j + λ ) w j 2 ] + γ T =\sum_{j=1}^{T}[G_jw_i+\frac{1}{2}(H_j+\lambda)w_j^2]+\gamma{T} =j=1T[Gjwi+21(Hj+λ)wj2]+γT-----------(6)
基于式(4)遍历所有样本后,求每个哎呀你根本的损失函数,与公式(5)中遍历每个叶子节点的样本并计算损失函数是等价的。
公式(6)中, G j , H j G_j, H_j Gj,Hj 是前 t-1 步得到的结果,视为常数,只有最后一棵树的节点 w j w_j wj是不确定的,那么将目标函数对 w j w_j wj求一阶导数,即我们要优化更新的就是这个 w j w_j wj
∂ L ( t ) ∂ w j = ∑ j = 1 T [ G j w i + 1 2 ( H j + λ ) w j 2 ] = 0 \frac{\partial{L^{(t)}}}{\partial{w_j}}=\sum_{j=1}^{T}[G_jw_i+\frac{1}{2}(H_j+\lambda)w_j^2]=0 wjL(t)=j=1T[Gjwi+21(Hj+λ)wj2]=0
进一步可以得到:
w j ∗ = − G j H j + λ w_j^{*}=-\frac{G_j}{H_j+\lambda} wj=Hj+λGj----------(7)
公式(7)代入到公式(6)中得到:
L ( t ) = ∑ j = 1 T [ G j − G j H j + λ + 1 2 ( H j + λ − G j 2 ( H j + λ ) 2 ) ] + γ T L^{(t)}=\sum_{j=1}^{T}[G_j\frac{-G_j}{H_j+\lambda}+\frac{1}{2}(H_j+\lambda\frac{-G_j^2}{(H_j+\lambda)^2})]+\gamma T L(t)=j=1T[GjHj+λGj+21(Hj+λ(Hj+λ)2Gj2)]+γT
∑ j = 1 T = [ − G j 2 H j + λ + 1 2 − G j 2 H j + λ ] + γ T \sum_{j=1}^{T}=[-\frac{G_j^2}{H_j+\lambda}+\frac{1}{2}\frac{-G_j^2}{H_j+\lambda}]+\gamma T j=1T=[Hj+λGj2+21Hj+λGj2]+γT
= − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T =-\frac{1}{2}\sum_{j=1}^{T}\frac{G_j^2}{H_j+\lambda}+\gamma T =21j=1THj+λGj2+γT
这就是XGBoost中我们最终要优化的目标函数,也就是第 t 棵树的评估标准。

LightGBM

LightGBM是一个轻量级的GBDT算法,相较于XGBoost具有训练速度更快,内存占用较低的优点,适合在一些数据量相对较小的场合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值