XGBoost - 帮助解释助推器的行为。为啥第 0 次迭代总是最好的?

Posted

技术标签:

【中文标题】XGBoost - 帮助解释助推器的行为。为啥第 0 次迭代总是最好的?【英文标题】:XGBoost- Help interpreting the booster behaviour. Why is the 0th iteration always coming out to be best?XGBoost - 帮助解释助推器的行为。为什么第 0 次迭代总是最好的? 【发布时间】:2021-05-06 07:12:14 【问题描述】:

我正在训练一个 XGBoost 模型,但无法解释模型的行为。

early_stopping_rounds =10 num_boost_round=100 数据集不平衡,有 458644 个 1 和 7975373 个 0 评估指标是 AUCPR param = 'max_depth':6, 'eta':0.03, 'silent':1, 'colsample_bytree': 0.3,'objective':'binary:logistic', 'nthread':6, 'subsample': 1、'eval_metric':['aucpr']

根据我对“early_stopping_rounds”的理解,训练应该在测试/评估数据集的评估指标 (aucpr) 连续 10 轮没有改善后停止。然而,在我的例子中,即使评估数据集的 AUCPR 有明显改善,训练仍然在第 10 个提升阶段后停止。请参阅下面的培训日志。此外,当第 10 次迭代的 AUCPR 明显高于第 0 次迭代时,最好的迭代是第 0 次迭代。

这是正确的吗?如果不是,可能出了什么问题?如果是,请纠正我对早期停止轮次和最佳迭代的理解。

【问题讨论】:

【参考方案1】:

很有趣!!

所以事实证明early_stopping 看起来最小化(RMSE、对数损失等)并最大化(MAP、NDCG、AUC)-https://xgboost.readthedocs.io/en/latest/python/python_intro.html

当您使用aucpr 时,它实际上是在尝试将其最小化——也许这是默认行为。

调用xgboost.train()时尝试设置maximize=True - https://github.com/dmlc/xgboost/issues/3712

【讨论】:

天啊!应该想到这一点 :D 大帮助!非常感谢@MusHusKat。

以上是关于XGBoost - 帮助解释助推器的行为。为啥第 0 次迭代总是最好的?的主要内容,如果未能解决你的问题,请参考以下文章

eli5 解释预测 XGBoost 模型

机器学习黑盒?SHAP(SHapley Additive exPlanations)使用 XGBoost 的可解释机器学习

Sagemaker 中 XGBoost 的功能重要性

为啥 Xgboost 中的功能不匹配错误

特征重要性可以用来解释模型预测的“为啥以及哪个特征有贡献”?

为啥使用 XGBoost 的 rmse 和 mse 如此之大?