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

tidymodels模型调优时,如何收集运行时间作为评估指标?

在tidymodels中收集tune_grid的模型拟合时间

官方内置方案:使用callback_timer()

tidymodels的tune包提供了内置的计时回调函数callback_timer(),可以直接在tune_grid()中启用,无需手动循环。

  1. 启用计时回调
    在调用tune_grid()时,通过control_grid()传入callback_timer(),它会自动记录每个模型在交叉验证折上的拟合起止时间和耗时。

  2. 提取并合并数据
    调优完成后,用collect_timing()提取计时数据,再和collect_metrics()得到的评估指标(比如AUC)合并,就能直接分析参数空间中的性能-时间权衡。

代码示例:

library(tidymodels)
data(cells, package = "modeldata")

# 构建随机森林工作流
rf_spec <- rand_forest(mtry = tune(), trees = tune()) %>%
  set_engine("ranger") %>%
  set_mode("classification")

rf_wf <- workflow() %>%
  add_formula(class ~ .) %>%
  add_model(rf_spec)

# 定义调优网格
rf_grid <- grid_regular(mtry(range = c(1, 10)), trees(range = c(50, 200)), levels = 3)

# 带计时的网格调优
set.seed(123)
rf_tune <- tune_grid(
  rf_wf,
  resamples = vfold_cv(cells, v = 3),
  grid = rf_grid,
  metrics = metric_set(roc_auc),
  control = control_grid(callbacks = callback_timer())
)

# 合并性能指标与计时数据
combined_results <- collect_metrics(rf_tune) %>%
  left_join(collect_timing(rf_tune), by = c("id", "mtry", "trees"))

# 查看平均AUC与平均耗时
combined_results %>%
  group_by(mtry, trees) %>%
  summarize(
    mean_auc = mean(.estimate),
    mean_elapsed = mean(elapsed)
  )

自定义回调(灵活扩展)

如果需要更定制化的计时逻辑(比如记录CPU时间、拆分拟合/预测阶段耗时),可以手动编写回调函数:

# 自定义计时回调
custom_timer_callback <- function() {
  callback(
    name = "custom_timer",
    # 记录训练开始时间
    start_train = function(context) {
      context$train_start <- Sys.time()
      context
    },
    # 记录训练结束时间,计算耗时并存入结果
    end_train = function(context) {
      context$train_end <- Sys.time()
      context$elapsed_secs <- as.numeric(difftime(context$train_end, context$train_start, units = "secs"))
      context$results$.elapsed <- context$elapsed_secs
      context
    }
  )
}

# 使用自定义回调运行调优
rf_tune_custom <- tune_grid(
  rf_wf,
  resamples = vfold_cv(cells, v = 3),
  grid = rf_grid,
  metrics = metric_set(roc_auc),
  control = control_grid(callbacks = custom_timer_callback())
)

# 提取数据
custom_results <- collect_metrics(rf_tune_custom) %>%
  mutate(elapsed = map_dbl(.metrics, ~ .x$.elapsed))

核心优势

  • 完全贴合tidymodels工作流,避免手动循环的冗余和出错风险
  • 计时数据与交叉验证的折、参数组合一一对应,便于精准分析
  • 可以直接基于合并后的数据集绘制AUC-耗时散点图,快速定位收益递减区间

内容的提问来源于stack exchange,提问作者bokov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:15:20