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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:14:55