Tidymodels:如何基于运行结果过滤workflowsets对象
你可以通过 rank_results() 结合 dplyr 筛选 + 半连接的链式操作实现需求,全程不需要额外定义中间变量,写法非常简洁。
仅提取符合条件的指标结果
如果你只需要拿到满足 roc_auc >= 0.8 的指标明细,直接筛选即可:
library(tidyverse) library(tidymodels) filtered_auc_res <- rank_results(titanic_models_result, rank_metric = "roc_auc") %>% filter(.metric == "roc_auc", mean >= 0.8)
保留完整workflowset对象结构
如果你需要保留原workflowset的info、option、result列结构,方便后续继续调优/提取模型,用半连接关联筛选结果即可:
filtered_workflows <- titanic_models_result %>% semi_join( # 先筛选出符合条件的工作流ID rank_results(., rank_metric = "roc_auc") %>% filter(.metric == "roc_auc", mean >= 0.8), by = "wflow_id" )
如果需要只保留每个工作流的最优参数组合满足阈值的工作流,可以在筛选时增加按最优指标排序的逻辑:
filtered_best_workflows <- titanic_models_result %>% semi_join( rank_results(., rank_metric = "roc_auc") %>% filter(.metric == "roc_auc") %>% group_by(wflow_id) %>% slice_max(mean, n = 1) %>% # 取每个工作流最高的roc_auc值 ungroup() %>% filter(mean >= 0.8), by = "wflow_id" )
内容的提问来源于stack exchange,提问作者Mischa
相关产品推荐
相关产品推荐

