XGBoost和GBDT的区别

前辈的总结如下:

1. 传统GBDT以CART作为基分类器,XGBoost还支持线性分类器,这个时候XGBoost相当于带L1和L2正则化项的Logistic回归(分类问题)或者线性回归(回归问题)。

2. 传统的GBDT只用了一阶导数信息(使用牛顿法的除外),而XGBoost对损失函数做了二阶泰勒展开。并且XGBoost支持自定义损失函数,只要损失函数一阶、二阶可导。

3. XGBoost的目标函数多了正则项, 相当于预剪枝,使得学习出来的模型更加不容易过拟合。

4. XGBoost还有Shrinkage和列抽样,进一步防止过拟合。

5. 对缺失值的处理。对于特征的值有缺失的样本,XGBoost可以自动学习出它的分裂方向。

6. XGBoost工具支持并行。当然这个并行是在特征的粒度上,而非tree粒度,因为本质还是boosting算法。
 

xgboost算法作为GBDT的一种高效实现,做了很多深度优化。

  • 支持线性基分类器
  • 损失函数二阶泰勒近似,支持自定义损失函数
  • 正则项控制树的复杂度(叶子数,权重L2平滑)
  • Shinkage减小每棵树的影响, 列子抽样,列Block预排序,buffer预取cache-aware,
  • 百分位点分桶近似分裂,缺失值分裂处理,level-wise并行分裂。

 

为什么xgboost可以处理缺失数据

1. xgboost在寻找分裂点时不考虑缺失值的数值,只对该列特征值为non-missing的样本上对应的特征值进行遍历。为了保证完备性,缺失值数据会被分到左子树或右子树分别计算损失,选择最优的那一个。
2. 可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。
3. 如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。

参考:

赵大寳個人小站

XGBoost论文精读。

机器学习算法中 GBDT 和 XGBOOST 的区别有哪些?

 

 

你可能感兴趣的:(机器学习)