xgboost - XGBoost - 帮助解释助推器的行为。为什么第 0 次迭代总是最好的?
问题描述
我正在训练 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 次迭代。
解决方案
很有意思!!
所以事实证明,early_stopping
看起来最小化(RMSE、日志损失等)和最大化(MAP、NDCG、AUC) - https://xgboost.readthedocs.io/en/latest/python/python_intro.html
当您使用aucpr
时,它实际上是在尝试将其最小化——也许这是默认行为。
maximize=True
调用时尝试设置xgboost.train()
- https://github.com/dmlc/xgboost/issues/3712
推荐阅读
- graph - 在图中找到访问某些选择节点的路径
- python - 如何检查消息是否在特定服务器中(discord.py)
- android - Use mobile like Bluetooth dongle for pc
- javascript - 如何让进度条与 Ajax Uplaod Image 一起使用
- r - 在R中通过索引获取一列的名称
- intellij-idea - 安装 spark.streaming.twitter Intellij
- database - 使用 Tableau 等外部工具的 AWS 数据库故障转移
- javascript - 我可以从 android 商店安装一个渐进式网络应用程序吗?
- ios - 各种类似的 simd_ 函数有何不同?
- php - 如何在按钮单击时更新第一行