在TidyModels中绘制LightGBM训练性能(调整树数量)
提取LightGBM训练&验证集逐树性能并绘图(TidyModels + Bonsai)
1. 训练模型时指定验证集与评估指标
训练阶段必须通过control_lightgbm()传入验证集并指定RMSE作为评估指标,确保模型记录每棵树的性能数据:
library(tidymodels) library(bonsai) library(lightgbm) # 定义LightGBM回归模型规格 lgb_spec <- boost_tree( trees = 500 # 可按需添加tree_depth、learn_rate等调参参数 ) %>% set_engine("lightgbm") %>% set_mode("regression") # 训练模型,传入验证集并指定评估指标 lgb_fit <- fit( lgb_spec, y ~ ., # 替换为你的建模公式 data = train_data, # 替换为你的训练集 control = control_lightgbm( valid_data = list(validation = val_data), # 命名验证集,方便后续识别 eval_metric = "rmse" ) )
2. 提取逐树性能数据
训练完成后,底层LightGBM booster对象存储在lgb_fit$fit中,用lgb.eval.result()提取训练集与验证集的RMSE数据:
# 提取所有树的评估结果 eval_results <- lgb.eval.result(lgb_fit$fit)
返回的eval_results是数据框,包含iter(树的数量)、train_rmse(训练集RMSE)、validation_rmse(验证集RMSE)等核心列。
3. 筛选每隔n棵树的数据
按需求筛选间隔树数的数据(示例为每隔10棵,最多500棵):
library(dplyr) n <- 10 # 自定义间隔数 filtered_results <- eval_results %>% filter(iter %% n == 0, iter <= 500)
4. 绘制RMSE性能曲线
用ggplot2绘制训练集与验证集的RMSE变化曲线:
library(ggplot2) ggplot(filtered_results, aes(x = iter)) + geom_line(aes(y = train_rmse, color = "训练集"), linewidth = 1) + geom_line(aes(y = validation_rmse, color = "验证集"), linewidth = 1) + labs( x = "树的数量", y = "RMSE", title = "LightGBM训练集与验证集RMSE变化趋势", color = "数据集" ) + scale_color_manual(values = c("训练集" = "#2E86AB", "验证集" = "#F24C00")) + theme_minimal()
调参场景下的处理
如果使用tune_grid()等调参工具,需先提取最佳模型再重复上述步骤:
# 假设调参结果为tune_res best_model <- tune_res %>% select_best("rmse") %>% finalize_model(lgb_spec) %>% fit( y ~ ., data = train_data, control = control_lightgbm(valid_data = list(validation = val_data), eval_metric = "rmse") ) # 后续提取与绘图步骤同上 eval_results <- lgb.eval.result(best_model$fit)
内容的提问来源于stack exchange,提问作者AdrianD
相关产品推荐
相关产品推荐

