GBDT,Xgboost和LightGBM对比总结

本文详细比较了GBDT(梯度提升决策树)和XGBoost,探讨了两者在损失函数、正则化、切分策略和并行实现上的差异。XGBoost通过二阶泰勒展开和正则项改进,支持分布式计算,而LGB(LightGBM)则以精度高但可能过拟合为特点。
摘要由CSDN通过智能技术生成

前言

集成学习大致可分为两种:并行的集成学习方法Bagging和串行的集成学习方法Boosting。并行的集成学习方法,如随机森林,各个基学习器的构建是独立的,没有先后顺序。串行的集成方法,各个基学习器之间有强烈的依赖关系,如Adaboost, GBDT, Xgboost,LightGBM等。

一、GBDT

GBDT算法实现步骤如下:
给定数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)} T=(x1,y1),(x2,y2),...,(xN,yN),损失函数定义为 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x)),这里损失函数必须一阶可导,基学习器定义为 f ( x ; γ ) f(x;\gamma) f(x;γ),最终总模型为 F ( x ) F(x) F(x)

  1. 初始化第一个模型为常数,令:
    f 0 ( x ) = arg ⁡ min ⁡ γ ∑ i = 1 N L ( y i , γ ) (1) f_0(x)=\arg \min_{\gamma} \sum^N_{i=1}L(y_i,\gamma) \tag {1} f0(x)=argγmini=1NL(yi,γ)(1)

初始的CART决策树只有一个根结点,预测结果为一个常数,当损失函数为平方损失时,该常数为 y y y的均值,当损失函数为绝对值损失时,该常数为 y y y的中位数。

平方损失: L ( y , f ( x ) ) = ∑ i = 1 N ( f ( x i ) − y i ) 2 L(y,f(x))=\sum^N_{i=1}(f(x_i)-y_i)^2 L(y,f(x))=i=1N(f(xi)yi)2

绝对值损失: L ( y , f ( x ) ) = ∣ y − f ( x ) ∣ L(y,f(x))=|y-f(x)| L(y,f(x))=yf(x)

  1. 给定M个基学习器,并依次训练这M个基学习器。首先求总损失函数在 F m − 1 ( x ) F_{m-1}(x) Fm1(x)上的负梯度值,构造训练第m个基学习器 f m ( x ) f_m(x) fm(x)所需的训练集。

g m ( x ) = − [ ∂ L ( y , F ( x ) ) ∂ F ( x ) ] F ( x ) = F m − 1 ( x ) (2) g_m(x)=-[\frac {\partial L(y,F(x))}{\partial F(x)}]_{F(x)=F_{m-1}(x)} \tag {2} gm(x)=[F(x)L(y,F(x))]F(x)=Fm1(x)(2)

训练集构造如下:
{ ( x 1 , g m ( x 1 ) ) , ( x 2 , g m ( x 2 ) ) , . . . , ( x N , g m ( x N ) ) } (3) \{(x_1,g_m(x_1)),(x_2,g_m(x_2)),...,(x_N,g_m(x_N))\} \tag {3} {(x1,gm(x1)),(x2,gm(x2)),...,(xN,gm(xN))}(3)

在上述训练集上训练决策树,得到空间划分 R m R_m Rm与节点值 α m \alpha_m αm,假设最终得到 J J J个叶子结点,则第 m m m个决策树 f m ( x ) f_m(x) fm(x)表示为:
f m ( x ) = ∑ j = 1 J α m j I ( x ∈ R m j ) (4) f_m(x)=\sum^J_{j=1}\alpha_{mj}I(x\in R_{mj}) \tag {4} fm(x)=j=1JαmjI(xRmj)(4)

其中, I ( x ∈ R m j ) I(x\in R_{mj}) I(xRmj)是指示函数, x x x属于区间 R m j R_{mj} Rmj,则 I ( x ) = 1 I(x)=1 I(x)=1, 反之 I ( x ) = 0 I(x)=0 I(x)=0
采用线性搜索的方式得到 ρ m \rho_m ρm:
ρ m = arg ⁡ min ⁡ ρ ∑ i = 1 N L ( y , F m − 1 + ρ f m ( x ; α m ) ) (5) \rho_m=\arg \min_{\rho}\sum^N_{i=1}L(y,F_{m-1}+\rho f_m(x;\alpha_m)) \tag {5} ρm=argρmini=1NL(y,Fm1+ρfm(x;αm))(5)
可以得到 F m ( x ) = F m − 1 ( x ) + ρ m f m ( x ) F_m(x)=F_{m-1}(x)+\rho_mf_m(x) Fm(x)=Fm1(x)+ρmfm(x)

  1. 进行M次优化得到最终的总模型为:
    F ( x ) = ∑ m = 1 M ρ m f ( x ; α m ) (6) F(x)=\sum^M_{m=1}\rho_mf(x;\alpha_m) \tag {6} F(x)=m=1Mρmf(x;αm)(6)

小结:
梯度提升是Boosting框架的一种改进,它试图在上一次集成模型的负梯度方向训练新的基学习器,而梯度提升树,则是梯度提升框架的一种特殊实现,采用CART树作为基学习器,损失函数只要存在一阶导数即可。同时采用决策树作为基学习器,具备以下优点:可以处理缺失值,对异常值不敏感,决策树是不稳定的分类器。总之,GBDT模型具有以下特点:样本扰动属性扰动模型扰动输出扰动

二、Xgboost

与GBDT的损失函数不同,Xgboost的损失函数包含了正则项,其中权重 w w w表示样本通过规则集合 q q q,映射到叶子结点的决策结果。其损失函数(目标函数)表示如下:
L ( t ) = ∑ i = 1 n l ( y i , F t − 1 ( x i ) + f t ( x i ) ) + ∑ i = 1 t Ω ( f i ) (1) L^{(t)}=\sum^n_{i=1}l(y_i,F_{t-1}(x_i)+f_t(x_i))+\sum^t_{i=1}\Omega(f_i) \tag{1} L(t)=i=1nl(yi,Ft1(xi)+ft(xi))+i=1tΩ(fi)(1)
泰勒公式如下:
f ( x + δ x ) ≃ f ( x ) + f ′ ( x ) δ x + 1 2 f ′ ′ ( x ) δ x 2 (2) f(x+\delta x)\simeq f(x)+f'(x)\delta x+\frac{1}{2}f''(x)\delta x^2 \tag{2} f(x+δx)f(x)+f(x)δx+21f(x)δx2(2)
F t − 1 ( x i ) F_{t-1}(x_i) Ft1(xi)看作泰勒公式中的 x x x, f t ( x i ) ) f_t(x_i)) ft(xi))看作 δ x \delta x δx,代入目标函数得:
L ( t ) ≃ ∑ i = 1 n [ l ( y i , F t − 1 ( x i ) ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + ∑ i = 1 t Ω ( f i ) (3) L^{(t)}\simeq \sum^n_{i=1}[l(y_i,F_{t-1}(x_i))+g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\sum^t_{i=1}\Omega(f_i) \tag{3} L(t)i=1n[l(yi,Ft1(xi))+gift(xi)+21hift2(xi)]+i=1tΩ(fi)(3)
其中,
g i = [ ∂ l ( y i , F ( x ) ∂ F ( x ) ] F ( x ) = F t − 1 ( x ) g_i=[\frac{\partial l(y_i,F(x)}{\partial F(x)}]_{F(x)=F_{t-1}(x)} gi=[F(x)l(yi,F(x)]F(x)=Ft1(x)为一阶导数;

h i = [ ∂ l 2 ( y i , F ( x ) ∂ F ( x ) ] F ( x ) = F t − 1 ( x ) h_i=[\frac{\partial l^2(y_i,F(x)}{\partial F(x)}]_{F(x)=F_{t-1}(x)} hi=[F(x)l2(yi,F(x)]F(x)=Ft1(x)为二阶导数。

而决策树可以表示为规则与权重的函数,将决策树 f ( x ) = w q ( x ) f(x)=w_q(x) f(x)=wq(x)代入损失函数有:
L ( t ) ≃ ∑ i = 1 n [ l ( y i , F t − 1 ( x i ) ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + ∑ i = 1 t Ω ( f i ) = ∑ i = 1 n [ l ( y i , F t − 1 ( x i ) ) + g i w q ( x i ) + 1 2 h i w q ( x i ) 2 ] + ∑ i = 1 t Ω ( f i ) (4) \begin{aligned} L^{(t)}&\simeq \sum^n_{i=1}[l(y_i,F_{t-1}(x_i))+g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\sum^t_{i=1}\Omega(f_i) \\ &=\sum^n_{i=1}[l(y_i,F_{t-1}(x_i))+g_iw_{q(x_i)}+\frac{1}{2}h_iw^2_{q(x_i)}]+\sum^t_{i=1}\Omega(f_i) \tag {4} \end{aligned} L(t)i=1n[l(yi,Ft1(xi))+gift(xi)+21hift2(xi)]+i=1tΩ(fi)=i=1n[l(yi,Ft1(xi))+giwq(xi)+21hiwq(xi)2]+i=1tΩ(fi)(4)
其中, l ( y i , F t − 1 ( x i ) ) l(y_i,F_{t-1}(x_i)) l(yi,Ft1(xi))为前 t − 1 t-1 t1个模型集成的总模型与 y y y的损失函数,其结果为一个常数。因此,损失函数只与第t棵决策树的权重和正则项有关。
正则项包括叶子结点数T和叶节点权重值的L2正则项,形式如下:
Ω ( f t ) = γ T + 1 2 λ ∑ j = 1 T w j 2 (5) \Omega(f_t)=\gamma T+\frac{1}{2}\lambda \sum^T_{j=1}w^2_j \tag{5} Ω(ft)=γT+21λj=1Twj2(5)
其中, γ \gamma γ λ \lambda λ为超参数。将(5)代入(4)得:
L ( t ) ≃ ∑ i = 1 n [ l ( y i , F t − 1 ( x i ) ) + g i w q ( x i ) + 1 2 h i w q ( x i ) 2 ] + ∑ i = 1 t Ω ( f i ) = ∑ i = 1 n [ l ( y i , F t − 1 ( x i ) ) + g i w q ( x i ) + 1 2 h i w q ( x i ) 2 ] + ∑ i = 1 t − 1 Ω ( f i ) + γ T + 1 2 λ ∑ j = 1 T w j 2 (6) \begin{aligned} L^{(t)}&\simeq \sum^n_{i=1}[l(y_i,F_{t-1}(x_i))+g_iw_{q(x_i)}+\frac{1}{2}h_iw^2_{q(x_i)}]+\sum^t_{i=1}\Omega(f_i) \\ &=\sum^n_{i=1}[l(y_i,F_{t-1}(x_i))+g_iw_{q(x_i)}+\frac{1}{2}h_iw^2_{q(x_i)}]+\sum^{t-1}_{i=1}\Omega(f_i)+\gamma T+\frac{1}{2}\lambda \sum^T_{j=1}w^2_j \tag {6} \end{aligned} L(t)i=1n[l(yi,Ft1(xi))+giwq(xi)+21hiwq(xi)2]+i=1tΩ(fi)=i=1n[l(yi,Ft1(xi))+giwq(xi)+21hiwq(xi)2]+i=1t1Ω(fi)+γT+21λj=1Twj2(6)
其中 l ( y i , F t − 1 ( x i ) ) l(y_i,F_{t-1}(x_i)) l(yi,Ft1(xi)) ∑ i = 1 t − 1 Ω ( f i ) \sum^{t-1}_{i=1}\Omega(f_i) i=1t1Ω(fi)分别为前 t − 1 t-1 t1个模型总集成模型的损失函数与正则项,在第t棵决策树建立时,二者均为常数,可以记为 c o n s t a n t constant constant,而损失函数优化与常数项无关,优化时可以忽略掉,则损失函数可简写为以下形式:
L ( t ) ≃ ∑ i = 1 n [ g i w q ( x i ) + 1 2 h i w q ( x i ) 2 ] + γ T + 1 2 λ ∑ j = 1 T w j 2 (7) L^{(t)}\simeq \sum^n_{i=1}[g_iw_{q(x_i)}+\frac{1}{2}h_iw^2_{q(x_i)}]+\gamma T+\frac{1}{2}\lambda \sum^T_{j=1}w^2_j \tag{7} L(t)i=1n[giwq(xi)+21hiwq(xi)2]+γT+21λj=1Twj2(7)
假设已经知道决策树的结构部分 q ( x ) q(x) q(x),则每个样本都会由 q ( x ) q(x) q(x)给予不同路径,最终落到T个叶子结点的某一个上。则属于第 i i i个叶子结点的样本均被预测为 w i w_i wi, 则上述损失函数可写成不同叶子结点加和的形式:
L ( t ) ≃ ∑ i = 1 n [ g i w q ( x i ) + 1 2 h i w q ( x i ) 2 ] + γ T + 1 2 λ ∑ j = 1 T w j 2 = ∑ j = 1 T [ ( ∑ x i ⊂ I j g i ) w j + 1 2 ( ∑ x i ⊂ I j h i ) w j 2 ] + γ T + 1 2 λ ∑ j = 1 T w j 2 = ∑ j = 1 T [ ( ∑ x i ⊂ I j g i ) w j + 1 2 ( ∑ x i ⊂ I j h i + λ ) w j 2 ] + γ T (8) \begin{aligned} L^{(t)}&\simeq \sum^n_{i=1}[g_iw_{q(x_i)}+\frac{1}{2}h_iw^2_{q(x_i)}]+\gamma T+\frac{1}{2}\lambda \sum^T_{j=1}w^2_j \\ &=\sum^T_{j=1}[(\sum_{x_i\subset I_j }g_i)w_j+\frac1 2 (\sum_{x_i\subset I_j }h_i)w_j^2]+\gamma T+\frac{1}{2}\lambda \sum^T_{j=1}w^2_j \\ &=\sum^T_{j=1}[(\sum_{x_i\subset I_j }g_i)w_j+\frac1 2 (\sum_{x_i\subset I_j }h_i+\lambda)w_j^2]+\gamma T \tag{8} \end{aligned} L(t)i=1n[giwq(xi)+21hiwq(xi)2]+γT+21λj=1Twj2=j=1T[(xiIjgi)wj+21(xiIjhi)wj2]+γT+21λj=1Twj2=j=1T[(xiIjgi)wj+21(xiIjhi+λ)wj2]+γT(8)
其中, I j I_j Ij为第 j j j个叶子结点的样本集合, x i ⊂ I j x_i \subset I_j xiIj表示经过结构部分 q ( x ) q(x) q(x)映射落入第 j j j个叶子结点的样本。将每个叶子结点中关于 g i g_i gi h i h_i hi的部分表示如下:
G j = ∑ x i ⊂ I j g i H j = ∑ x i ⊂ I j h i (9) G_j=\sum_{x_i \subset I_j}g_i \\ H_j=\sum_{x_i \subset I_j}h_i \tag{9} Gj=xiIjgiHj=xiIjhi(9)
将公式9代入8得损失函数形式如下:
L ( t ) ≃ ∑ j = 1 T [ ( ∑ x i ⊂ I j g i ) w j + 1 2 ( ∑ x i ⊂ I j h i + λ ) w j 2 ] + γ T = ∑ j = 1 T [ G j w j + 1 2 ( H j + λ ) w j 2 ] + γ T (10) \begin{aligned} L^{(t)}&\simeq \sum^T_{j=1}[(\sum_{x_i\subset I_j }g_i)w_j+\frac1 2 (\sum_{x_i\subset I_j }h_i+\lambda)w_j^2]+\gamma T \\ &=\sum^T_{j=1}[G_j w_j+\frac1 2 (H_j+\lambda)w_j^2]+\gamma T \tag{10} \end{aligned} L(t)j=1T[(xiIjgi)wj+21(xiIjhi+λ)wj2]+γT=j=1T[Gjwj+21(Hj+λ)wj2]+γT(10)
损失函数对w求偏导,令结果等于0,求得最优权重表达式:
w j ∗ = − G j H j + λ , j = 1 , 2 , . . . , T (11) w^*_j=-\frac{G_j}{H_j+\lambda},j=1,2,...,T \tag{11} wj=Hj+λGj,j=1,2,...,T(11)
将公式(11)代入公式(10),求得最优参数下的损失函数表达形式:
L ( t ) ≃ ∑ j = 1 T [ G j w j + 1 2 ( H j + λ ) w j 2 ] + γ T = ∑ j = 1 T [ − G j G j H j + λ + 1 2 ( H j + λ ) ⋅ ( − G j H j + λ ) 2 ] + γ T = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T (12) \begin{aligned} L^{(t)}&\simeq \sum^T_{j=1}[G_j w_j+\frac1 2 (H_j+\lambda)w_j^2]+\gamma T \\ &=\sum^T_{j=1}[-G_j\frac{G_j}{H_j+\lambda} +\frac1 2 (H_j+\lambda)·(\frac{-G_j}{H_j+\lambda} )^2]+\gamma T \\ &=-\frac1 2 \sum^T_{j=1}\frac{G_j^2}{H_j+\lambda}+\gamma T \tag{12} \end{aligned} L(t)j=1T[Gjwj+21(Hj+λ)wj2]+γT=j=1T[GjHj+λGj+21(Hj+λ)(Hj+λGj)2]+γT=21j=1THj+λGj2+γT(12)
上述损失函数是在假设树的结构集合 q ( x ) q(x) q(x)已经确定的基础上给出的,即任意给定一个树结构集合 q ( x ) q(x) q(x),就可以用上述公式计算该结构的优劣,并评估当前决策树是不是最优结构。

有了评估指标之后,接下来就可以通过该指标,选择最优属性和最优切分点构造树,生成过程类似使用信息熵计算信息增益,每次切分如果指标值Loss下降,说明树结构可以继续优化。

Xgboost具备以下特点:数据扰动,属性扰动,输出扰动,算法扰动。

Xgb和Lgb对比

对比XgbLgb
切分策略level-wise,可并行加速,但会冗余分裂leaf-wise精度高,但容易过拟合
并行方式特征预排序,占用内存高直方图算法,将连续数据离散化为直方图形式,牺牲一定的切分精度,但节省内存
类别特征支持方式类别特征oneHot编码直接支持类别特征
直方图差加速计算某一节点的叶节点的直方图可以通过将该节点的直方图与另一子节点的直方图做差得到
特征并行,寻找最佳特征切分,并行化数据列采样,不同机器保留不同的特征子集,各个机器上的worker根据所分配的特征子集寻找到局部最优切分点,互相通信寻找全局最佳切分特征,传输切分结果每个机器保留整个完整的数据集,各个机器上的worker根据所分配的特征子集寻找到局部的最优切分点,互相通信来从局部最佳切分点里得到最佳切分点,减少了传输切分结果的步骤
数据并行行采样,对数据进行横向切分,worker使用分配到的局部数据构建局部的直方图,合并局部直方图得到全局的直方图,对全局直方图寻找最优切分点,然后进行切分,通信代价过高LightGBM通过Reduce Scatter方法来合并不同worker的无交叉的不同特征的直方图,这样找到该直方图的局部最优切分点,最后同步到全局最优切分点

GBDT和Xgb对比

XgbGBDT
正则化带正则项无显式正则化
目标函数二阶泰勒展开一阶泰勒展开
预排序实现特征并行,提高训练效率
支持分布式计算
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Adaboost、GBDTXGBoostLightGBM都是机器学习中常用的集成学习算法。 Adaboost是一种迭代算法,通过不断调整样本权重和分类器权重,逐步提高分类器的准确率。 GBDT(Gradient Boosting Decision Tree)是一种基于决策树的集成学习算法,通过不断迭代,每次训练一个新的决策树来纠正前面树的错误,最终得到一个强分类器。 XGBoost是一种基于GBDT的算法,它在GBDT的基础上引入了正则化和并行化等技术,使得模型更加准确和高效。 LightGBM是一种基于GBDT的算法,它采用了基于直方图的决策树算法和互斥特征捆绑技术,使得模型训练速度更快,占用内存更少,同时也具有较高的准确率。 ### 回答2: adaboost(Adaptive Boosting) 是一种基于不同权重的弱分类器的算法,它通过迭代的方式来逐步提高分类器的准确性。在每轮迭代中,它会调整训练样本的权重,使得前一轮分类错误的样本在当前轮得到更多的关注。最终,通过组合这些弱分类器来构建一个强分类器。其优点在于不易过拟合,但需要耗费大量的时间来训练和预测。 gbdt(Gradient Boosting Decision Tree) 是一种基于决策树的集成学习算法,它通过迭代的方式来提升分类器的准确性。基于训练样本和实际输出的误差进行梯度下降,将它们作为下一个分类器的训练数据。每个分类器都在之前所有分类器得到的残差的基础上进行训练,并且将它们组合成一个最终的分类器。在训练过程中,为了避免过拟合,可以限制决策树的深度等参数,并采用交叉验证等技术。gbdt可以处理缺失数据、不平衡分类和高维度数据等问题,但需要注意过拟合的问题。 xgboost(Extreme Gradient Boosting) 是一种基于决策树的集成学习算法,它在gbdt的基础上引入了正则化项和精细的特征选择,进一步提高了分类器的准确性和效率。通过Hessian矩阵对损失函数进行二阶泰勒展开,引入正则化约束,可以优化损失函数,并通过交叉验证等技术选择最优的超参数。xgboost还支持GPU加速,提高模型训练的速度和效率,但需要更多的计算资源。xgboost在分类、回归和排名任务中表现优异,但需要注意过拟合和计算量的问题。 lightgbm是微软旗下一款高效、快速、分布式的梯度提升框架,也是一种基于决策树的集成学习算法,定位在处理高维度数据和大规模数据集上。lightgbm采用了GOSS(Gradient-based One-Side Sampling)技术和EFB(Exclusive Feature Bundling)技术对数据进行处理,大大减少数据的内存占用和训练时间。同时,还支持并行计算和GPU加速,提高了模型的速度和效率。lightgbm在排序、分类、回归等任务中表现出色,只是对离群值敏感,需要对数据进行预处理。 ### 回答3: Adaboost,Gradient Boosting Decision Tree (GBDT),XGBoostLightGBM都是常见的集成学习算法,它们用于提高模型在复杂数据集上的准确度,并处理复杂数据集上遇到的问题。 Adaboost是一种迭代算法,每次迭代它使用提高错误分类样本的加权值,并降低正确分类样本的加权值,以便让前一个弱分类器无法捕捉并由后续分类器学习。Adaboost弱分类器快速训练和预测,且不需要太多超参数调整,但是它倾向于过度拟合数据,并且实力可能不足以解决大型数据集的问题。 GBDT使用决策树作为弱分类器,将每一棵树的预测结果作为下一棵树的预测输入,最后对所有树的预测结果进行加权求和。GBDT可以很好地处理线性和非线性问题,但是它倾向于过度拟合数据,需要进行精细调整参数,并且需要较长时间的训练时间。 XGBoost结合了GBDT的优势和树的强大性质。它采用了一些优秀的技术,如Boosting树算法,Shrinkage,Column Sampling和Pruning Nodes,以提高模型的性能和降低过拟合风险。XGBoost可以处理大规模数据集和高维数据集,并且速度较快,但需要的资源较多,如内存、计算能力和高质量的数据集。 LightGBMXGBoost的新一代版本,采用了GOI(Gradient-based One-side Sampling)算法和Histogram-based Gradient Boosting方法来加快训练速度和降低内存占用。GOI算法通过对数据进行一侧采样来提高训练速度,而直方图梯度提升方法将节点分裂建模为一个直方图分桶过程,以减少节点分裂的计算成本。LightGBM对大数据集的处理能力很强,速度相对较快,但对于处理小数据集的效果可能不明显。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值