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

Zero-R模型使用Caret混淆矩阵计算灵敏度特异度结果不一致问题

问题原因
  1. 指标定义匹配错误
    你手动计算得到的0.6187~0.6305区间数值实际是整体分类准确率,而非灵敏度。Zero-R模型会全量预测为训练集中占比更高的类别,此处全预测为B,准确率恰好等于测试集B类样本的占比,和你给出的区间完全吻合。
    按照你指定positive="B"的参数设定:
  • 灵敏度定义为「实际为B的样本中被预测为B的比例」,所有B类样本都被正确预测,因此结果为1.0000
  • 特异度定义为「实际为M的样本中被预测为M的比例」,所有M类样本都被预测为B,因此结果为0.0000
    函数本身的输出符合指标定义,不存在计算错误。
  1. 因子水平警告触发原因
    你的预测结果全为B,导致预测值变量testDiagnosisPred的因子水平仅包含"B",和真实标签testDiagnosis的双水平(B、M)不一致,因此触发了自动重编码的警告,该警告本次未影响计算结果,但其他场景下可能导致指标计算偏差。
解决方法
  • 消除警告:生成预测结果后,手动统一预测值和真实标签的因子水平,代码如下:
testDiagnosisPred <- factor(testDiagnosisPred, levels = levels(testDiagnosis))
  • 匹配业务需求调整参数:如果你的分析场景中需要将恶性(M)作为核心识别的正类,修改调用参数为positive = "M"即可得到对应指标;如果确实以B为正类,可直接从函数返回结果中提取准确率指标,无需手动计算,代码如下:
cm <- confusionMatrix(testDiagnosisPred, testDiagnosis, positive = "B")
# 直接读取准确率
acc <- cm$overall["Accuracy"]
# 直接读取灵敏度
sens <- cm$byClass["Sensitivity"]
  • 手动校验逻辑:如果需要自行核对结果,可先提取原始混淆矩阵再计算,避免指标定义混淆:
raw_cm <- cm$table
# 正类为B时的灵敏度计算
tp <- raw_cm["B", "B"]
fn <- raw_cm["M", "B"]
calc_sens <- tp/(tp + fn)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:21:00