如何从LightGBM Booster中获取最优迭代轮次的相关指标?
获取LightGBM Booster对象的训练与验证指标(最优轮次)
一、直接获取最优轮次的指标
训练得到的Booster对象自带best_score_属性,它存储了早停机制触发时,最优迭代轮次下所有数据集的指标值;best_iteration属性则返回最优轮次的编号(1-based)。
示例代码:
# 获取最优轮次编号 best_round = lgb_class.best_iteration # 获取最优轮次的所有指标 best_scores = lgb_class.best_score_ # 提取训练集的binary_logloss train_best_loss = best_scores['training']['binary_logloss'] # 提取验证集的binary_logloss(对应valid_sets中的第二个数据集,key为valid_0) valid_best_loss = best_scores['valid_0']['binary_logloss'] print(f"最优迭代轮次:第{best_round}轮") print(f"训练集binary_logloss: {train_best_loss:.6f}") print(f"验证集binary_logloss: {valid_best_loss:.6f}")
二、获取所有迭代轮次的指标
如果需要查看每一轮的指标变化,可以使用evals_result_属性,它会记录训练过程中每一轮各数据集的指标数值(列表形式,0-based索引,对应第1到第N轮)。
示例代码:
# 获取所有轮次的指标记录 all_eval_results = lgb_class.evals_result_ # 提取训练集每一轮的binary_logloss列表 train_loss_history = all_eval_results['training']['binary_logloss'] # 提取验证集每一轮的binary_logloss列表 valid_loss_history = all_eval_results['valid_0']['binary_logloss'] # 查看第100轮的指标(注意索引为99,因为是0-based) print(f"第100轮训练集logloss: {train_loss_history[99]:.6f}") print(f"第100轮验证集logloss: {valid_loss_history[99]:.6f}")
关键属性说明
best_iteration:早停时的最优迭代次数,以1为起始计数best_score_:字典结构,键为数据集名称(training对应训练集,valid_0、valid_1对应后续验证集),值为该数据集在最优轮次的指标字典evals_result_:字典结构,键为数据集名称,值为该数据集每一轮的指标列表,列表索引对应迭代轮次(索引i对应第i+1轮)
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

