当我使用xgboost来训练我的2-cates classification problem数据时,我想使用早期停止来获得最好的模型,但是我不知道在我的预测中使用哪一个会返回3种不同的选择。例如,我是否应该使用
preds = model.predict(xgtest, ntree_limit=bst.best_iteration)或者我应该用
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)
提前谢谢。
发布于 2021-06-25 07:51:24
在我看来,这两个参数都是指相同的想法,或者至少有相同的目标。但我宁愿用:
preds = model.predict(xgtest, ntree_limit=bst.best_iteration)从源代码中,我们可以看到这里将放弃best_ntree_limit,转而支持best_iteration。
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是或将要被废弃的。
https://stackoverflow.com/questions/43534219
复制相似问题