首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bst.best_score,bst.best_iteration和bst.best_ntree_limit有什么区别?

bst.best_score,bst.best_iteration和bst.best_ntree_limit有什么区别?
EN

Stack Overflow用户
提问于 2017-04-21 04:54:16
回答 1查看 5.2K关注 0票数 17

当我使用xgboost来训练我的2-cates classification problem数据时,我想使用早期停止来获得最好的模型,但是我不知道在我的预测中使用哪一个会返回3种不同的选择。例如,我是否应该使用

代码语言:javascript
复制
preds = model.predict(xgtest, ntree_limit=bst.best_iteration)

或者我应该用

代码语言:javascript
复制
preds = model.predict(xgtest, ntree_limit=bst.best_ntree_limit)

或者两者都对,它们应该适用于不同的情况吗?如果是的话,我如何判断使用哪一种?

这里是xgboost文档的原始引文,但它没有给出原因,我也没有找到这些参数之间的比较:

早期停止 如果您有一个验证集,您可以使用早期停止来找到最佳的助推轮数。早期停止至少需要一组水平。如果有一个以上的,它将使用最后一个。 火车(.,evals=evals,early_stopping_rounds=10) 该模型将训练,直到验证分数停止改善。验证错误至少需要减少每一个early_stopping_rounds才能继续培训。 如果出现早期停止,则模型将有三个附加字段: bst.best_score、bst.best_iteration和bst.best_ntree_limit。请注意,train()将返回上一次迭代中的模型,而不是最好的模型。普雷德 经过训练或加载的模型可以对数据集执行预测。7个实体,每个实体包含10个特性-- data = np.random.rand(7,10) dtest =xgb.DMatrix(数据) ypred = bst.predict(dtest)如果在培训期间启用了早期停止,则可以使用bst.best_ntree_limit从最佳迭代中得到预测: ypred = bst.predict(dtest,ntree_limit=bst.best_ntree_limit)

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-06-25 07:51:24

在我看来,这两个参数都是指相同的想法,或者至少有相同的目标。但我宁愿用:

代码语言:javascript
复制
preds = model.predict(xgtest, ntree_limit=bst.best_iteration)

从源代码中,我们可以看到这里将放弃best_ntree_limit,转而支持best_iteration

代码语言:javascript
复制
def _get_booster_layer_trees(model: "Booster") -> Tuple[int, int]:
    """Get number of trees added to booster per-iteration.  This function will be removed
    once `best_ntree_limit` is dropped in favor of `best_iteration`.  Returns
    `num_parallel_tree` and `num_groups`.
    """

此外,best_ntree_limit已经从EarlyStopping文档页面中删除。

因此,我认为这个属性只存在于向后兼容的原因。因此,从这个代码片段和文档中,我们可以假设best_ntree_limit是或将要被废弃的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43534219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档