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

如何基于多指标从workflow_set(tidymodels)中筛选多个最优模型

你需要的workflowsets包中多模型排序筛选的核心函数是rank_results(),结合tidyverse的筛选函数即可实现你的需求,操作步骤如下:

1. 核心功能实现

按单指标筛选Top2模型

直接调用rank_results(),指定你要排序的核心指标,设置select_best = TRUE会自动取每个工作流的最优参数结果排序:

library(tidyverse)
library(workflowsets)

# 示例按召回率(recall)排序,可替换为你需要的sensitivity、specificity等指标
ranked_models <- rank_results(
  grid_results,
  rank_metric = "recall", # 指定排序依据的指标
  select_best = TRUE # 每个工作流仅保留最优参数的结果
)

# 取排名前2的模型
top2_models <- slice_head(ranked_models, n = 2)

返回结果的wflow_id列对应你定义的不同不平衡处理方法:unba(无处理)、b_sm(SMOTE)、b_ro(ROSE)、b_up(上采样)、b_ad(ADASYN),rank列即为整体排名。

按不平衡处理维度筛选

如果要单独看某一种不平衡处理方法的最优参数,用extract_workflow_set_result()提取对应工作流的结果即可:

# 示例提取SMOTE处理的最优参数,metric替换为你需要的指标
smote_best_param <- grid_results %>%
  extract_workflow_set_result("b_sm") %>% # 传入对应不平衡处理的wflow_id
  select_best(metric = "recall")

按多指标综合筛选Top2

如果需要结合多个指标计算综合得分排序,先汇总所有指标结果自定义计算规则即可:

# 汇总所有工作流的最优参数指标
all_metrics <- collect_metrics(grid_results, summarize = TRUE) %>%
  group_by(wflow_id, .metric) %>%
  slice_max(mean, n = 1) %>%
  ungroup() %>%
  pivot_wider(names_from = .metric, values_from = mean)

# 示例:自定义权重计算综合得分,召回率占60%,精确率占40%,可自行调整指标和权重
all_metrics <- all_metrics %>%
  mutate(composite_score = recall * 0.6 + precision * 0.4) %>%
  arrange(desc(composite_score))

# 取综合得分Top2的模型
top2_composite <- slice_head(all_metrics, n = 2)

2. 注意事项

你提供的代码中rec_obj_all_up的配方定义存在笔误:recipe(clas ~ .)应改为recipe(class ~ .),否则会报错找不到响应变量。

内容的提问来源于stack exchange,提问作者Joselina Davyt-Colo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:39:02