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

如何更新tidymodels工作流集以移除RMSE相同的参数配置

移除tidymodels中拟合结果重复的超参数组合

问题解答

1. 是否可以更新workflow set/tibble以删除部分配置?

可以。Workflow set本质是tibble结构,你可以提取其中的调优结果,筛选出需要保留的配置后,替换原workflow set中的result列,或者重新构造符合格式的对象。

2. 是否存在函数可提取仅对应独特拟合结果的参数?stacks::add_candidates()似乎具备此功能,但我不确定其输出能否转换回workflow set/tibble?

stacks::add_candidates()确实会自动移除预测结果重复的候选模型,但它的输出是data_stack专用对象,无法直接转回workflow set。不过可以借助它的筛选结果,或者手动基于拟合指标/预测结果去重,再将筛选后的参数整合回workflow set。

具体实现方法

方法一:手动基于拟合指标去重

从调优结果中提取性能指标,按指标均值分组,每组保留一个超参数配置(示例中保留每组任意一个),再更新workflow set:

library(tidymodels)
library(dplyr)

# 从tune_results中提取具体调优结果
tune_res <- tune_results$result[[1]]

# 提取性能指标并去重:按rmse和rsq的均值分组,保留每组唯一配置
unique_metrics <- tune_res %>%
  collect_metrics() %>%
  filter(.metric %in% c("rmse", "rsq")) %>%
  pivot_wider(names_from = .metric, values_from = mean) %>%
  distinct(rmse, rsq, .keep_all = TRUE) %>%
  select(penalty)

# 筛选调优结果中符合条件的配置
filtered_tune_res <- tune_res %>%
  filter(penalty %in% unique_metrics$penalty)

# 更新原workflow set的result列
tune_results_clean <- tune_results %>%
  mutate(result = list(filtered_tune_res))

# 查看清理后的结果
tune_results_clean$result[[1]] %>% collect_metrics()

方法二:借助stacks的筛选结果

利用stacks自动去重后的候选参数,反向筛选原调优结果:

library(stacks)

# 创建stack并获取去重后的候选模型信息
data_stack <- stacks() %>%
  add_candidates(tune_results)

# 提取保留的penalty参数值
kept_penalties <- data_stack$candidates %>%
  filter(model == "lasso_lasso") %>%
  select(penalty) %>%
  distinct()

# 筛选原调优结果
filtered_tune_res <- tune_results$result[[1]] %>%
  filter(penalty %in% kept_penalties$penalty)

# 更新workflow set
tune_results_clean <- tune_results %>%
  mutate(result = list(filtered_tune_res))

补充说明

  • 手动去重时,若需要更严格的判定(比如所有交叉验证折叠的预测结果完全一致),可以基于预测值的哈希值或者直接对比预测结果来分组去重。
  • 借助stacks的方法更便捷,适合后续需要进行模型堆叠的场景,它的去重逻辑是基于预测结果的一致性,比单纯的指标均值去重更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:22:27