1. 从Gradient Descend到GBDT
集成学习之Boosting —— Gradient Boosting原理
2. Xgboost原理详解
2.1 从GBDT到Xgboost
相对于GBDT,Xgboost的优化主要体现在以下三个方面:
- 算法本身的优化:
- GBDT只支持决策树,Xgboost还支持使用其他弱分类器;
- GBDT使用损失函数的负梯度(一阶导数)作为分类器的拟合目标,Xgboost使用损失函数的二阶泰勒展开来逼近损失函数,同时使用了一阶导数信息和二阶导数信息;
- Xgboost在损失函数中加入了正则项来防止过拟合。
- 算法健壮性:
- 可以处理特征缺失值
- 在寻找split point的时候,不会对该特征为missing的样本进行遍历统计,只对该列特征值为non-missing的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找split point的时间开销。
- 在逻辑实现上,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向进行分裂即可。
- 如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。
- 可以处理特征缺失值
- 运行效率优化:
- 特征粒度的并行化(预排序)
- 其他工程优化
为什么要用二阶泰勒展开逼近损失函数?
为了任意损失函数的展开形式都与MSE损失的展开形式统一:
Xgboost可以使用任意自定义损失函数,只要该函数二阶可导。
为什么二阶泰勒展开效果比GBDT的一阶导数要好?
二阶信息本身就能让梯度收敛更快更准确,这一点在优化算法里的牛顿法里已经证实了。类似于在求物体运动的问题里,知道速度的同时还知道加速度。
GDBT与Xgboost的优化过程区别
-
GBDT每一轮迭代都是用弱(基)分类器去拟合上一轮损失函数对上一轮集合分类器的一阶导,树节点的分裂使用均方误差。
-
Xgboost直接极小化每一轮的损失函数的值。对应到树分类器有:
max 1 2 G L 2 H L + λ + 1 2 G R 2 H R + λ − 1 2 ( G L + G