如何在tidymodels workflow中同时获取双因子的pr_auc指标?
解决方案
要在workflow_map中同时获取male和female两类的pr_auc指标,且结果与collect_metrics原生输出一致,核心是自定义多类别pr_auc指标集,让重采样过程在每个fold内分别计算两类的指标,避免事后合并预测值计算的偏差。
步骤1:自定义针对两类的pr_auc指标函数
使用yardstick包创建分别指向male和female的pr_auc指标,再合并为指标集:
library(tidymodels) # 定义针对male类别的pr_auc pr_auc_male <- function(data, truth, estimate, ...) { pr_auc(data, truth = {{truth}}, estimate = {{estimate}}, positive = "male") } # 定义针对female类别的pr_auc pr_auc_female <- function(data, truth, estimate, ...) { pr_auc(data, truth = {{truth}}, estimate = {{estimate}}, positive = "female") } # 合并为自定义指标集 custom_metrics <- metric_set(pr_auc_male, pr_auc_female)
步骤2:在重采样控制中指定自定义指标
修改control_resamples,将metrics参数设为上面的自定义指标集:
ctrl <- control_resamples( save_pred = TRUE, # 可选,仍可保存预测值用于后续验证 metrics = custom_metrics )
步骤3:运行workflow_map并收集指标
用包含自定义指标的控制参数执行重采样,之后直接用collect_metrics获取两类的pr_auc:
# 假设你已定义好workflow_set和resamples对象 wf_results <- your_workflow_set %>% workflow_map( "resample", resamples = your_resamples, control = ctrl ) # 收集指标,会同时显示male和female的pr_auc及统计量 collect_metrics(wf_results)
为什么事后计算会不一致?
collect_metrics的结果是每个重采样fold内计算指标后再汇总均值/标准差,而你事后合并所有预测值计算的是整个数据集的pr_auc,没有按fold分层计算后汇总,两者的统计逻辑不同,结果自然有差异。通过自定义指标让重采样过程在每个fold内分别计算两类指标,就能保证结果与原生collect_metrics的输出逻辑一致。
内容的提问来源于stack exchange,提问作者RCchelsie
相关产品推荐
相关产品推荐

