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

如何用R的yardstick包计算ROC AUC?解决因子输入报错问题

解决ROC-AUC计算的报错问题

问题根源

ROC-AUC指标依赖连续的预测概率值,而非离散的分类结果。你传入的prediction是因子型的分类标签(模型输出的最终分类结果),不符合roc_auc()对输入数据类型的要求,因此触发报错。

解决步骤

1. 从朴素贝叶斯模型中提取预测概率

假设你用e1071包训练高斯朴素贝叶斯模型(R中最常用的实现方式),先确认训练代码,再提取概率:

library(e1071)
# 训练高斯朴素贝叶斯模型(特征列为outcome以外的所有列)
nb_model <- naiveBayes(outcome ~ ., data = train_pre_post)

# 提取每个样本属于两类的概率矩阵,type="raw"指定返回概率而非分类标签
pred_probs <- predict(nb_model, newdata = train_pre_post, type = "raw")
# 把"rip"(死亡)类别的概率存入数据集,作为ROC计算的输入
train_pre_post$rip_prob <- pred_probs[, "rip"]

2. 使用yardstick计算ROC-AUC

用新增的数值型概率列rip_prob替代prediction,同时明确指定阳性事件为rip,避免默认类别顺序的干扰:

library(yardstick)
library(dplyr)

# 计算ROC曲线下面积
roc_auc_result <- train_pre_post %>%
  roc_auc(truth = outcome, estimate = rip_prob, event = "rip")

print(roc_auc_result)

额外说明

  • 若你使用的是其他朴素贝叶斯包(如naivebayes),核心逻辑一致:找到返回概率的参数(通常是type="prob"或type="raw")提取概率值即可。
  • ROC曲线的本质是遍历所有可能的概率阈值,计算不同阈值下的灵敏度和特异度,因此必须依赖连续的概率值——已确定的分类结果仅对应某一个固定阈值(比如0.5)的判断,无法生成完整的ROC曲线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:12:57