如何通过Xgboost.train获取最佳迭代轮次的Booster而非最后迭代轮次的?
获取XGBoost训练中最佳迭代轮次的Booster模型
我懂你的痛点——用xgb.train()训练时,默认返回的是最后一轮迭代的模型,但我们真正需要的是早停机制挑中的最佳轮次模型对吧?别担心,XGBoost其实已经把这个需求考虑进去了,你手里的xgb1对象就能直接调用最佳模型,具体操作看下面:
直接用现有Booster调用最佳模型做预测
你已经打印出了xgb1.best_iteration和xgb1.best_ntree_limit,这俩就是关键参数。当你需要预测时,只需要在predict()方法里指定ntree_limit=xgb1.best_ntree_limit,就能用最佳轮次的模型来计算,而不是最后一轮的:# 使用最佳迭代轮次的模型进行预测 preds_best = xgb1.predict(xgtest, ntree_limit=xgb1.best_ntree_limit)单独提取/保存最佳Booster对象
如果你想把最佳模型单独存成一个独立的Booster对象,或者保存到文件,可以这么做:# 方式1:保存最佳模型到文件 xgb1.save_model('best_xgb_model.model', ntree_limit=xgb1.best_ntree_limit) # 后续加载这个最佳模型 best_booster = xgb.Booster() best_booster.load_model('best_xgb_model.model')# 方式2:直接从现有对象中提取最佳轮次的Booster best_booster = xgb1.get_booster().slice(0, xgb1.best_ntree_limit)
其实你不用额外去“获取新的Booster”,原有的xgb1已经包含了所有迭代轮次的模型参数,通过ntree_limit就能精准定位到最佳那一轮,这是XGBoost为早停机制设计的便捷用法。你打印的xgb1.best_score也能对应验证这是最佳轮次的评估分数哦。
内容的提问来源于stack exchange,提问作者Paul Wu
相关产品推荐
相关产品推荐

