XGBoost vs Python Sklearn梯度增强树


20

我试图了解XGBoost的工作原理。我已经了解了梯度增强树如何在Python sklearn上工作。我不清楚XGBoost是否以相同的方式工作,但速度更快,或者它与python实现之间存在根本差异。

当我读这篇论文时

http://learningsys.org/papers/LearningSys_2015_paper_32.pdf

在我看来,XGboost的最终结果与Python实现中的结果相同,但是主要区别在于XGboost如何在每个回归树中找到最佳分割。

基本上,XGBoost提供相同的结果,但是速度更快。

这是正确的,还是我还缺少其他东西?

Answers:


18

没错,XGBoost(“ eXtreme Gradient Boosting”)和sklearn的GradientBoost从本质上来说都是相同的,因为它们都是渐变增强的实现。

但是,从实际意义上说,引擎盖下有很大的不同。XGBoost 比sklearn的速度要快得多(请参阅http://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/)。XGBoost的内存效率很高,并且可以并行化(我认为sklearn默认情况下不能这样做,我不完全了解sklearn的内存效率,但是我非常有信心它低于XGBoost的内存效率)。

两者结合使用后,XGBoost的速度令人印象深刻,其性能优于sklearn的GradientBoosting。


1
也有性能差异。Xgboost使用二阶导数在每个终端节点中找到最佳常数。标准实现仅使用一阶导数。
Zelazny17年7

@ Zelazny7您是否对您的陈述有参考?人们会期望计算二阶导数会降低性能。这也意味着将使用除梯度下降(其他任何形式)之外的功能。
meh


2
有关数据科学的问答:为什么xgboost比sklearn快得多,并且在这方面os统计:XGBoost损失函数与泰勒扩展近似
眨眼

确认@ K88的帖子后,sklearn的GradientBoostingClassifier没有n_jobs可用的接口参数。sklearn的算法内部无法进行并行处理。
bmc


1

XGboost是GBDT的实现,它具有行列化功能(它使用了列采样和行采样),可以通过不使用GBDT的每个基本模型的所有训练数据来进行行采样。我们不对每个基本模型使用所有训练数据,而是对行的子集进行采样,并仅使用这些数据行来构建每个基本模型。这确保了过拟合的机会较小,这是简单GBDT的一个主要问题,XGBoost试图使用这种随机化来解决。

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.