XGBoost 与 Python Sklearn 梯度提升树

机器算法验证 scikit-学习 助推
2022-01-25 07:12:36

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

当我读到这篇论文

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

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

基本上,XGBoost 给出了相同的结果,但速度更快。

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

3个回答

你是对的,XGBoost('eXtreme Gradient Boosting')和 sklearn 的 GradientBoost 本质上是一样的,因为它们都是梯度提升的实现。

但是,在实际意义上,引擎盖下存在非常显着的差异。XGBoost 比 sklearn 快得多(参见http://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/)。XGBoost 非常节省内存并且可以并行化(我认为 sklearn 默认不能这样做,我不完全了解 sklearn 的内存效率,但我非常有信心它低于 XGBoost)。

两者都使用后,XGBoost 的速度相当可观,其性能优于 sklearn 的 GradientBoosting。

与 Sklearn 的梯度提升不同,Xgboost 也对树进行正则化以避免过度拟合,并且它还可以有效地处理缺失值。以下链接可能有助于准确学习 xgboost https://www.youtube.com/watch?v=Vly8xGnNiWs

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