最详细的数学推导Boost、GBDT、XGboost之GBDT
文章目录
一、系列文章
1.本文是在Boost的基础上进行讨论,Boost既是GBDT的基础,也是经典所在
2.基于本文还有XGboost
二、G+BDT
GBDT 全称是 Gradient Boosting Decision Tree,可以说是由G(Gradient )+BDT(Boosting Decision Tree)组成,下面分两部分说明
1.Boosting Decision Tree(提升树)
- 类似文章1,提升树是采用加法模型与前向分布算法,以决策树为基函数的Boosting模型。
他们之间的关系:提升树是Boosting的基学习器为决策树树模型(分类为二叉分类树;回归问题为二叉回归树)的具体体现 - 提升树模型表示为加法模型:fM=∑m=1MT(x;Θm)f_M=\sum_{m=1}^M T\left(x;\Theta_m\right) fM=m=1∑MT(x;Θm)
MMM为树的个数,Θm\Theta_mΘm为决策树的参数,T(x;Θm)T\left(x;\Theta_m\right)T(x;Θm)为决策树 - 采用前向分步算法。首先确定初始提升决策树f0(x)=0f_0\left(x\ri 3ff7 ght)=0f0(x)=0
- 第mmm步的模型是
fm(x)=fm−1(x)+T(x;Θm)f_m\left(x\right)=f_{m-1}\left(x\right)+T\left(x;\Theta_m\right)fm(x)=fm−1(x)+T(x;Θm)可以看到fm−1(x)f_{m-1}(x)fm−1(x)为当前模型,通过训练误差极小化得到m步的决策树
(1.0)Θ^m=argminΘm∑i=1NL(yi,fm−1(xi)+T(xi;Θm))\hat{\Theta}_m=\mathop{\arg\min}_{\Theta_m}\sum_{i=1}^N L\left(y_i,f_{m-1}\left(x_i\right)+T\left(x_i;\Theta_m\right)\right) \tag{1.0}Θ^m=argminΘmi=1∑NL(yi,fm−1(xi)+T(xi;Θm))(1.0) - 提升树中决策树的表示形式(可以与XGboost中的决策树模型比较)
T(x;Θ)=∑j=1JcjI(x∈Rj)T\left(x;\Theta\right)=\sum_{j=1}^J c_j I\left(x\in R_j\right) T(x;Θ)=j=1∑JcjI(x∈Rj)
其中,参数Θ={(R1,c1),(R2,c2),…,(RJ,cJ)}\Theta=\{\left(R_1,c_1\right),\left(R_2,c_2\right),\dots,\left(R_J,c_J\right)\}Θ={(R1,c1),(R2,c2),…,(RJ,cJ)}表示决策树的区域划分和各区域上的常量值。JJJ是决策树的复杂度即叶子结点个数。
由于指示函数的应用配合累计号就能够表示树模型,样本点属于区域RjR_{j}Rj则指示函数变为1,其他都为0,所以T(x;Θ)T\left(x;\Theta\right)T(x;Θ)完成了从xix_{i}xi输入到划分区域均值的映射
- 不同的提升树算法不同主要体现在损失函数的使用,如用平方误差损失的回归问题,指数损失函数的分类问题,以及一般损失函数决策问题
采用平方误差损失函数:
L(y,f(x))=(y−f(x))2L\left(y,f\left(x\right)\right)=\left(y-f\left(x\right)\right)^2L(y,f(x))=(y−f(x))2
求解式1.0损失变为:
(1.1)L(y,fm−1(x)+T(x;Θm))=[y−fm−1(x)−T(x;Θm)]2=[r−T(x;Θm)]2\begin{aligned} L\left(y,f_{m-1}\left(x\right)+T\left(x;\Theta_m\right)\right) &=\left[y-f_{m-1}\left(x\right)-T\left(x;\Theta_m\right)\right]^2 \\ &=\left[r-T\left(x;\Theta_m\right)\right]^2 \tag{1.1} \end{aligned}L(y,fm−1(x)+T(x;Θm))=[y−fm−1(x)−T(x;Θm)]2=[r−T(x;Θm)]2(1.1)
这里得到式1.1中:r=y−fm−1(x)r=y-f_{m-1}\left(x\right)r=y−fm−1(x)是当前拟合数据的残差
所以对于回归类问题来说只要拟合数据的残差,得到新的一棵树
完整算法如下:
实例参考2。
2.G(Gradient )梯度提升
- 当损失函数是平方损失和指数损失函数时,梯度提升树每一步优化是很简单的,但是对于一般损失函数而言,往往每一步优化起来不那么容易,针对这一问题,Freidman提出了梯度提升树算法,这是利用最速下降的近似方法,其关键是利用损失函数的负梯度作为提升树算法中的残差的近似值。
- 损失函数的负梯度
−[∂L(y,f(xi))∂f(xi)]f(x)=fm−1(x)-\left[\frac{\partial L\left(y,f\left(x_i\right)\right)}{\partial f\left(x_i\right)}\right]_{f\left(x\right)=f_{m-1}\left(x\right)} −[∂f(xi)∂L(y,f(xi))]f(x)=fm−1(x)
3.可以做一个实验,假设选用平方损失
L(y,f(x))=12(y−f(x))2L\left(y,f\left(x\right)\right)=\frac{1}{2}\left(y-f\left(x\right)\right)^2L(y,f(x))=21(y−f(x))2
此时负梯度:
−[∂L(y,f(xi))∂f(xi)]f(x)=fm−1(x)=y−f(xi)-\left[\frac{\partial L\left(y,f\left(x_i\right)\right)}{\partial f\left(x_i\right)}\right]_{f\left(x\right)=f_{m-1}\left(x\right)} = y-f(x_{i}) −[∂f(xi)∂L(y,f(xi))]f(x)=fm−1(x)=y−f(xi)
可以看到就是残差,可以认为负梯度方向是对残差更加泛化求解的近似。
三、GBDT完整算法
输入:训练数据集T={(x1,y1),(x2,y2),…,(xN,yN)}T=\{\left(x_1,y_1\right),\left(x_2,y_2\right),\dots,\left(x_N,y_N\right)\}T={(x1,y1),(x2,y2),…,(xN,yN)}; 损失函数L(y,f(x))L\left(y,f\left(x\right)\right)L(y,f(x))
输出:梯度提升决策树f^(x)\hat{f}\left(x\right)f^(x)
(1)初始化一个弱学习器
f0(x)=argminc∑i=1NL(yi,c)f_0\left(x\right)=\mathop{\arg\min}_c\sum_{i=1}^N L\left(y_i,c\right)f0(x)=argminci=1∑NL(yi,c)
(2)对m=1,2,…,Mm=1,2,\dots,Mm=1,2,…,M
(a)对i=1,2,…,Ni=1,2,\dots,Ni=1,2,…,N,计算
rmi=−[∂L(y,f(xi))∂f(xi)]f(x)=fm−1(x)r_{mi}=-\left[\frac{\partial L\left(y,f\left(x_i\right)\right)}{\partial f\left(x_i\right)}\right]_{f\left(x\right)=f_{m-1}\left(x\right)}rmi=−[∂f(xi)∂L(y,f(xi))]f(x)=fm−1(x)
与BDT类似只是这里把求了近似残差。
(b)对rmir_{mi}rmi拟合一个回归树,得到第mmm棵树的叶结点区域Rmj,j=1,2,…,JR_{mj},j=1,2,\dots,JRmj,j=1,2,…,J
(c)对j=1,2,…,Jj=1,2,\dots,Jj=1,2,…,J,计算
cmj=argminc∑xi∈RmjL(yi,fm−1(xi)+c)c_{mj}=\mathop{\arg\min}_c\sum_{x_i\in R_{mj}} L\left(y_i, f_{m-1}\left(x_i\right)+c\right)cmj=argmincxi∈Rmj∑L(yi,fm−1(xi)+c)
(d)更新fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj)f_m\left(x\right)=f_{m-1}\left(x\right)+\sum_{j=1}^J c_{mj} I\left(x\in R_{mj}\right)fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj)
(3)得到回归梯度提升决策树
f^(x)=∑m=1M∑j=1JcmjI(x∈Rmj)\hat{f}\left(x\right)=\sum_{m=1}^M \sum_{j=1}^J c_{mj} I\left(x\in R_{mj}\right) f^(x)=m=1∑Mj=1∑JcmjI(x∈Rmj)
参考
- 《机器学习》. 周志华
- 《统计学习方法》. 李航
- [机器学习]GBDT|XGboost|Adaboost详解及公式推导
- XGBoost设计思路与数学推导
- RF,GBDT和Xgboost构造新特征+LR融合的原理及实践
- xgboost相比传统gbdt有何不同?xgboost为什么快?xgboost如何支持并行?
- 机器学习18-XGBoost的推导过程
- RF,GBDT,xgboost调参方法整理
- 从决策树到GBDT & Xgboost(一)
- GBDT和XGBOOST的区别
- XgBoost推导与总结
- GBDT和XGBOOST的区别
- xgboost与GBDT区别、优势
- XGBoost Plotting API以及GBDT组合特征实践
- boosting-adaboost、GBDT、xgboost、lightGBM
- RF、GBDT、XGboost特征选择重要性计算 或 如何做特征选择的?
- RF、GBDT、XGBoost、lightGBM原理与区别
- xgboost gbdt特征点分烈点位置
- GBDT和XGBOOST的区别
- RF GBDT XGBOOST的区别与联系
- xgboost相比传统gbdt有何不同?xgboost为什么快?xgboost如何支持并行?
- 常见算法(logistic回归,随机森林,GBDT和xgboost)