当我使用 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 中的一组。如果有多个,它将使用最后一个。
火车(...,评估=评估,early_stopping_rounds=10)
该模型将进行训练,直到验证分数停止提高。
验证错误至少需要每一次减少
Early_stopping_rounds 继续训练。
如果发生提前停止,模型将具有三个附加字段:
bst.best_score、bst.best_iteration 和 bst.best_ntree_limit。注意
train() 将返回最后一次迭代的模型,而不是最好的模型。
普罗
法令
经过训练或加载的模型可以执行预测
数据集。
# 7 entities, each contains 10 features
data = np.random.rand(7, 10)
dtest = xgb.DMatrix(data)
ypred = bst.predict(dtest)
如果提早停止
在训练期间启用,您可以获得最佳预测
使用 bst.best_ntree_limit 进行迭代:
ypred = bst.predict(dtest,ntree_limit=bst.best_ntree_limit)
提前致谢。
在我看来,这两个参数指的是同一个想法,或者至少有相同的目标。但我宁愿使用:
preds = model.predict(xgtest, ntree_limit=bst.best_iteration)
从源码中我们可以看到here https://github.com/dmlc/xgboost/blob/663136aa08c00598d8b49adf5901e4cb2ce187da/python-package/xgboost/core.py#L1142 that 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
已被删除提前停车 https://xgboost.readthedocs.io/en/latest/python/python_intro.html#early-stopping文档页面。
所以我认为这个属性的存在只是为了向后兼容的原因。因此,从这段代码片段和文档中,我们可以假设best_ntree_limit
已被或将被弃用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)