关于GBDT算法XGBoost算法的基本原理概述

Posted 卖山楂啦prss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于GBDT算法XGBoost算法的基本原理概述相关的知识,希望对你有一定的参考价值。

GBDT

梯度提升决策树GBDT是一种利用残差拟合弱学习器的集成算法,该算法是由Boosting中最具代表性的Adaboost算法演变而来,其中各个基学习器之间并不独立,是一种串行关系。

GBDT的基本思想就是每次学一点点,然后逐步逼近最终的预测值,即GBDT将当前预测结果的残差作为下一棵树的输入,不断迭代生成下一棵树,最终模型的结果为所有决策树的结果之和(GBDT 的目标就是要找到一颗使得残差最小的决策树)。

具体的,GBDT的各基分类器加法形式如下:
f k ( x ) = f ( k − 1 ) ( x ) + T ( x ; θ k ) f_k\\left( x \\right) =f_\\left( k-1 \\right)\\left( x \\right) +T\\left( x;\\theta _k \\right) fk(x)=f(k1)(x)+T(x;θk)

其中, f k − 1 ( x ) f_k-1\\left(x\\right) fk1(x) 为第 k-1 阶段的基学习器, f k ( x ) f_k\\left(x\\right) fk(x) 为第k阶段的基学习器(即下一轮模型),通过损失函数最小化确定下一棵决策树的参数 θ k \\theta_k θk

由此可以得到GBDT的平方损失函数及其导数如下:
l ( y , f k ( x ) ) = 1 2 ( y − f k ( x ) ) 2 l\\left( y,f_k\\left( x \\right) \\right) =\\frac12\\left( y-f_k\\left( x \\right) \\right) ^2 l(y,fk(x))=21(yfk(x))2
− ∂ l ∂ f k ( x ) = y − f k ( x ) = 残差 -\\frac\\partial l\\partial f_k\\left( x \\right)=y-f_k\\left( x \\right) =\\text残差 fk(x)l=yfk(x)=残差

事实上,GBDT模型的核心就是采用梯度下降法让损失函数尽可能快的不断减小,并且由于GBDT需要拟合的残差(负梯度)是连续数值,预测结果是通过累加所有树结果得到的,因此对于GBDT模型来说,在处理分类或者回归问题时,其弱学习器均为CART回归树。

总的来说,GBDT模型算法的优点非常明显,如GBDT模型有相对较多的损失函数,模型预测效果好,能够处理非线性数据,在存在异常数据时也有较强的鲁棒性。而GBDT缺点也比较突出,即每个基学习器的构建都需要等上一个学习器预测结束后才能开始,所以难以并行训练数据,效率上会比较慢;另外,GBDT的每一次选代都需要遍历所有特征来寻找最佳切分点,当特征个数非常多时,GBDT的训练复杂度会显著增大。

XGBoost

XGBoost算法(Extreme Gradient Boosting)本质还是GBDT算法,是传统GBDT算法的改进,主要包括三方面:

①传统的GBDT算法只利用了一阶的导数计算损失函数,而XGBoost对损失函数进行了二阶的泰勒展开,使得损失函数近似优化更接近真实值,求得模型最优解的效率变得更高;

②在损失函数中加上叶子节点权重和树的深度等正则项来控制模型的复杂度和稳定性,对决策树的生长加以合理的限制;

③对列进行采样,减少模型计算量。

由于XGBoost是GBDT的改进算法,同样也属于Boosting方法,因此每个基分类器之间为存在依赖关系的串行结构,对于每个基分类器的学习结果的残差都会作为下一个基学习器的输入,最后将所有基学习器的结果加起来得到最终结果。具体的,设通过训练好的前t-1棵树求得第t棵树为:

y ^ i ( t ) = y ^ i ( t − 1 ) + f t ( x i ) = Σ k = 1 t f k ( x i ) \\haty_i^\\left( t \\right)=\\haty_i^\\left( t-1 \\right)+f_t\\left( x_i \\right) =\\Sigma _k=1^tf_k\\left( x_i \\right) y^i(t)=y^i(t1)+ft(xi)=Σk=1tfk(xi)

则XGBoost的目标函数如下:
O b j ( t ) = Σ i = 1 n l ( y i , y ^ i ( t ) ) + Ω ( f t ) + c o n s t a n t Obj^\\left( t \\right)=\\Sigma _i=1^nl\\left( y_i,\\haty_i^\\left( t \\right) \\right) +\\Omega \\left( f_t \\right) +constant Obj(t)=Σi=1nl(yi,y^i(t))+Ω(ft)+constant
Ω ( f k ) = γ T + 1 2 λ Σ j = 1 T ω j 2 \\Omega \\left( f_k \\right) =\\gamma T+\\frac12\\lambda \\Sigma _j=1^T\\omega _j^2 Ω(fk)=γT+21λΣj=1Tωj2

O b j ( 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 ) + c o n s t a n t Obj^\\left( t \\right)\\approx \\Sigma _i=1^n\\left[ l\\left( y_i,\\haty_i^\\left( t-1 \\right) \\right) +g_if_t\\left( x_i \\right) +\\frac12h_if_t^2\\left( x_i \\right) \\right] +\\Omega \\left( f_t \\right) +constant Obj(t)Σi=1n[l(yi,y^i(t1))+gift(xi)+21hift2(xi)]+Ω(ft)+constant

其中,l部分为损失函数(如平方损失函数 l ( y i , y ^ i ( t ) ) = ( y i , y ^ i ( t ) ) 2 l\\left( y_i,\\haty_i^\\left( t \\right) \\right) =\\left( y_i,\\haty_i^\\left( t \\right) \\right) ^2 l(yi,y^i(t关于LightGBM算法基本原理概述

关于LightGBM算法基本原理概述

GBDT与XGBoost

集成学习——Boosting(GBDT,Adaboost,XGBoost)

XGBoost与GBDT(一)-几种最优化方法对比

机器学习算法总结--GBDT