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

如何在tidymodels框架中利用Youden index获取ML性能指标?

在tidymodels框架中利用Youden Index获取机器学习性能指标

Youden Index(尤登指数)的计算逻辑是灵敏度(Sensitivity) + 特异度(Specificity) - 1,它用于定位二分类模型中平衡两类误差的最优阈值,同时也是评估模型性能的有效指标。tidymodels生态的yardstick包没有内置该指标,但可通过ROC曲线数据推导计算,也能自定义指标集成到标准评估流程中。

一、基于ROC曲线计算最大Youden Index

假设你已完成模型训练,得到测试集的预测概率(二分类场景),操作步骤如下:

  1. 加载必要工具包
library(tidymodels)
library(yardstick)
  1. 准备预测结果数据
    模拟一组测试集的真实标签与正类预测概率:
test_pred <- tibble(
  # 真实标签,将正类设为因子的第一个水平
  truth = factor(c("positive", "negative", "positive", "positive", "negative", "negative"),
                 levels = c("positive", "negative")),
  # 正类的预测概率列
  .pred_positive = c(0.82, 0.31, 0.65, 0.90, 0.24, 0.43)
)
  1. 生成ROC数据并计算最优尤登指数
    通过roc_curve()生成不同阈值下的灵敏度、特异度,推导尤登指数后筛选最大值对应的记录:
# 生成全量阈值的ROC数据
roc_results <- roc_curve(test_pred, truth, .pred_positive)

# 计算尤登指数并提取最优结果
best_youden <- roc_results %>%
  mutate(youden_index = sensitivity + specificity - 1) %>%
  arrange(desc(youden_index)) %>%
  slice(1)

# 输出结果:包含最优阈值、尤登指数、灵敏度、特异度
print(best_youden)

二、自定义Youden Index指标集成到tidymodels评估流程

若要将尤登指数作为常规指标加入metrics()评估,可定义兼容yardstick的指标函数:

# 定义向量版计算函数(适配yardstick接口)
youden_index_vec <- function(truth, estimate, ...) {
  roc_curve_vec(truth, estimate, ...) %>%
    mutate(youden = sensitivity + specificity - 1) %>%
    pull(youden) %>%
    max()
}

# 注册为正式的yardstick指标
youden_index <- new_metric(
  name = "youden",
  direction = "maximize", # 尤登指数越大性能越好
  type = "prob", # 属于概率型指标
  vec_fn = youden_index_vec
)

# 使用自定义指标评估模型
test_pred %>%
  metrics(truth, .pred_positive, youden = youden_index(truth, .pred_positive))

注意事项

  • 仅适用于二分类任务,多分类场景需拆分为一对一的二分类子任务分别计算
  • 确保真实标签truth为因子类型,正类位置需与roc_curve()的event_level参数匹配(默认正类为第一个水平)
  • 自定义指标需遵循yardstick接口规范,保证与tidymodels的训练、评估流程兼容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:37:35