You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:55:24