GBM与XGBOOST?关键区别?


39

我试图了解GBM和XGBOOST之间的关键区别。我尝试用Google搜索它,但是找不到任何好的答案来解释这两种算法之间的差异,以及为什么xgboost几乎总是比GBM更好。是什么使XGBOOST如此之快?


XGBoost并没有那么快。请参考此实验
Agcala,

Answers:


35

引用作者xgboost

xgboost和gbm都遵循梯度增强的原理。但是,建模细节有所不同。具体来说,xgboost使用更规范化的模型形式化来控制过度拟合,从而使其具有更好的性能。

我们已经更新了关于模型介绍的综合教程,您可能需要看一下。助树介绍

但是,名称xgboost实际上是指旨在推动增强型树算法的计算资源限制的工程目标。这就是为什么许多人使用xgboost的原因。对于模型,将其称为正则化梯度增强可能更合适。

编辑:有一个xgboost 的详细指南,它显示了更多差异。

参考文献

https://www.quora.com/What-is-the-difference-between-the-R-gbm-gradient-boosting-machine-and-xgboost-extreme-gradient-boosting

https://xgboost.readthedocs.io/en/latest/tutorials/model.html


2
好答案。OP还询问为什么xgboost这么快。原因是虽然无法对集合本身进行并行化,因为每个树都依赖于前一个,但是您可以并行化每个树的每个深度内的多个节点的构建。这些类型的细节使xgboost如此之快。
里卡多·克鲁兹

13

除了Icyblade给出的答案之外,xgboost的开发人员还对实现的不同部分进行了许多重要的性能增强,从而在速度和内存利用率方面产生了很大的不同:

  1. 稀疏矩阵与稀疏感知算法的结合使用
  2. 改进的数据结构可提高处理器缓存利用率,从而使其更快。
  3. 更好地支持多核处理,从而减少了总体培训时间。

根据我在训练大型数据集(500万条以上记录)时使用GBM和xgboost的经验,我发现同一数据集的内存利用率(R中)显着降低,并且发现使用多核来减少训练时间更容易。


10

一个非常重要的区别是xgboost实施了DART,即回归树的辍学正则化

参考文献

Rashmi,KV,&Gilad-Bachrach,R.(2015年)。飞镖:退出符合多个加性回归树。arXiv预印本arXiv:1505.01866。


1
Dart在LGBM中也实现了xgboost_dart_mode
agcala

0

我认为,梯度增强和Xgboost之间的区别在于xgboost,算法通过并行化树结构(该结构在本博客中可以看到)而集中在计算能力

梯度增强仅关注方差,而不关注偏差之间的权衡,因为xg增强也可以关注正则化因子。


-1

XGBoost的实现存在错误。 在v 082上的GPU上进行训练时,无声地崩溃了v 0.90也发生在我身上,因此到目前为止,该问题尚未得到解决,并且GitHub中提供的“修复”对我不起作用。

LGBM 2.3.1就像开箱即用一样具有魅力,尽管安装它需要付出更多的努力。到目前为止,在GPU上进行培训还没有问题。

关于XGBoost是“ 这么快 ”,你应该看看这些基准


OP没有询问xgboost与lightgbm。
oW_
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.