为什么xgboost比sklearn GradientBoostingClassifier快得多?


29

我正在尝试通过50个具有100个数字特征的示例训练一个梯度提升模型。XGBClassifier我的机器43秒内把手500棵树,而GradientBoostingClassifier只处理10棵(!)以1分2秒:(我没有理会试图种植500棵树,因为它会需要几个小时。我使用的是相同的learning_rate,并max_depth设置, 见下文。

是什么使XGBoost如此之快?它是否使用了sklearn家伙不知道的用于梯度增强的新颖实现方式?还是“偷工减料”并种植浅树?

ps我知道这个讨论:https : //www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey,但是那里找不到答案...

XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
gamma=0, learning_rate=0.05, max_delta_step=0, max_depth=10,
min_child_weight=1, missing=None, n_estimators=500, nthread=-1,
objective='binary:logistic', reg_alpha=0, reg_lambda=1,
scale_pos_weight=1, seed=0, silent=True, subsample=1)

GradientBoostingClassifier(init=None, learning_rate=0.05, loss='deviance',
max_depth=10, max_features=None, max_leaf_nodes=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=10,
presort='auto', random_state=None, subsample=1.0, verbose=0,
warm_start=False)

2
我猜我很快将不得不改写为“为什么LightGBM比XGBoost这么快?” :)
ihadanny

Answers:


25

因为您提到了“数字”功能,所以我猜您的功能不是分类的,并且具有很高的通用性(它们可以采用很多不同的值,因此有很多可能的分割点)。在这种情况下,由于要评估[许多特征许多分裂点],因此难以种植树木。×

我的猜测是,最大的影响来自XGBoost对分割点使用近似值的事实。如果您具有10000个可能的分割的连续特征,则XGBoost默认仅考虑“最佳” 300个分割(这是一种简化)。此行为由sketch_eps参数控制,您可以在doc中阅读有关此行为的更多信息。您可以尝试降低它并检查产生的差异。由于scikit-learn文档中没有提及它,因此我认为它不可用。您可以在他们的论文(arxiv)中了解XGBoost方法。

XGBoost还对这些分割点的评估使用了近似值。我不知道scikit通过哪个标准评估分割,但是它可以解释其余的时差。


地址注释

关于分割点的评估

但是,“ XGBoost还对此类分割点的评估使用近似值”是什么意思?据我了解,为进行评估,他们使用的是最优目标函数的精确降低,正如本文公式(7)所示。

为了评估分裂点,您必须计算,其中L是成本函数,y是目标,H i 1是迄今为止建立的模型,h i是当前添加。注意,这不是XGBoost所做的;他们通过泰勒展开式简化了成本函数,从而得到了一个非常简单的函数。他们必须针对计算的梯度和Hessian大号ÿH一世-1个+H一世大号ÿH一世-1个H一世大号大号H一世-1个,他们可以在第阶段将这些数字重新用于所有可能的拆分,从而使总体计算速度更快。您可以检查具有泰勒展开式的损失函数近似值(CrossValidated Q / A)以获得更多详细信息,或在其论文中推导这些内容。一世

关键是他们找到了一种有效地逼近方法。如果您要全面评估,而没有内部知识允许优化或避免或进行冗余计算,则每次拆分将花费更多时间。就这一点而言,这是一个近似值。但是,其他梯度提升实现也使用代理成本函数来评估拆分,并且我不知道XGBoost逼近在这方面是否比其他方法更快。大号ÿH一世-1个+H一世大号


感谢@Winks,我阅读了这篇论文,了解了选择分割候选者的近似算法的含义。但是,“ XGBoost还对此类分割点的评估使用近似值”是什么意思?据我了解,为进行评估,他们正在使用最优目标函数的精确减少量,正如本文公式(7)所示。
ihadanny

我修改了我的答案以解决您的评论。检查此Q / A,以获取有关分割点评估的更多详细信息。
眨眼2016年

非常感谢,@ Winks!如果您还可以在这里回答我更详细的问题,那就
太好

这是一个很好的答案。帽子戏法 !
eliasah '16
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.