目录
1. XGBoost原理
1.1 提升方法(Boosting)
1.2 提升决策树 (BDT,Boosting Decision Tree)
1.3 梯度提升决策树 (GBDT,Gradient Boosting Decision Tree)
1.4 极限梯度提升(XGBoost,eXtreme Gradient Boosting)
附一篇很赞的博客:https://www.pianshen.com/article/30521719325/
BDT(集成决策树):在决策树的基础上用boosting方法集成
GBDT(梯度提升决策树):在BDT的基础上使用一阶梯度进行残差拟合
XGB:GBDT做一系列优化改进
1. XGBoost原理
1.1 提升方法(Boosting)
提升方法使用加法模型和前向分步算法
加法模型
其中,为基函数,为基函数的参数,为基函数的系数。
在给定训练数据及损失函数的条件下,学习加法模型成为经验风险极小化问题:
前向分步算法求解这⼀优化问题的思路:因为学习的是加法模型,可以从前向后,每⼀步只学习⼀个基函数及其系数,逐步
逼近优化⽬标函数式( 1.2 ),则可以简化优化复杂度。具体地,每步只需优化如下损失函数:
得到参数
(b) 更新
( 3 )得到加法模型
前向分步算法将同时求解从 = 1 到 所有参数
的优化问题简化为逐次求解各个
的优化问题
1.2 提升决策树 (BDT,Boosting Decision Tree)
将Boosting中的基模型约束为决策树,将约束为1,即为BDT。
以决策树为基函数的提升⽅法为提升决策树。
提升决策树模型可以表示为决策树的加法模型:
其中,表示决策树;为决策树的参数;为树的个数。
提升决策树采⽤前向分步算法。⾸先确定初始提升决策树 ,第步的模型是
其中,为当前模型,通过经验风险极小化确定下一颗决策树的参数,
已知训练数据集 , , 为输⼊空间, , 为输出空间。
如果将输⼊空间 划分为个互不相交的区域 ,并且在每个区域上确定输出的常量 ,那么决策树可表示为
其中,参数 表示决策树的区域划分和各区域上的常量值。 是决策树的复杂度即叶⼦
结点个数。
提升决策树使⽤以下前向分步算法:
在前向分步算法的第步,给定当前模型,需要求解
得到,即第m棵树的参数。
当采⽤平⽅误差损失函数时,
其损失变为
其中,
是当前模型拟合数据的残差(residual)。对回归问题的提升决策树,只需要简单地拟合当前模型的残差。
算法 2.1 回归问题的提升决策树算法
输⼊:训练数据集 ;
输出:提升决策树
( 1 )初始化
( 2 )对
( a )按照式( 2.5 )计算残差
( b) 拟合残差 学习⼀个回归树,得到
( c )更新
( 3 )得到回归提升决策树
1.3 梯度提升决策树 (GBDT,Gradient Boosting Decision Tree)
GBDT VS BDT: BDT学习的是当前模型拟合数据的残差;GBDT学习的是损失函数关于梯度的负值。
梯度提升算法使⽤损失函数的负梯度在当前模型的值
作为回归问题提升决策树算法中残差的近似值,拟合⼀个回归树。
算法3.1 梯度提升算法
输⼊:训练数据集 ; 损失函数
输出:梯度提升决策树
( 1 )初始化
(2)对
( a)对 ,计算
(b)对 拟合⼀个回归树,得到第 棵树的叶结点区域
( c )对 ,计算
( d )更新
( 3 )得到回归梯度提升决策树
1.4 极限梯度提升(XGBoost,eXtreme Gradient Boosting)
GBDT VS XGB
- GBDT仅使用了一阶梯度拟合,XGB用到了二阶梯度拟合,自然阶数越高,拟合的精度越高。
- GBDT是经验风险最小化,容易过拟合,XGB引入了正则化项
训练数据集,其中。
决策树模型
其中, 为第棵决策树。
正则化⽬标函数,我们期待当前的树的叶子结点不要太多;我们还期待每颗叶子结点的输出值不要太大,这个是从稳定性考虑的?
其中, 。
其中,
。
第t轮⽬标函数 的⼆阶泰勒展开,并移除关于 常数项
我们可以看到两个累加项,但是前一个是对整个数据集的累加(遍历数据集),后一个是对叶子的累加(遍历叶节点),暂时没法统一。但是我们想想,所有的数据集中的数据必然应该落到叶子上,所以对数据集的遍历可以转换为对叶子结点的遍历,遍历完一个叶子结点里面的数据,我们再遍历下一个叶子节点。即我们遍历叶子结点再遍历叶子结点所有的数据。公式表达如下:
定义叶结点 j上的样本的下标集合 ,则⽬标函数可表示为按叶结点累加的形式
由于
得到每个叶结点 的最优分数为
代⼊每个叶结点 的最优分数,得到最优化⽬标函数值
假设和分别为分裂后左右结点的实例集,令,则分裂后损失减少量由下式得出