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

R语言构建逻辑回归ROC曲线时confusionMatrix相关报错如何解决

R语言ROC绘制与混淆矩阵报错解决方法

混淆矩阵相关报错解决方案

所有关于类别水平不匹配、无重叠类别的报错,核心原因是标签取值、因子水平未对齐,预测与真实标签用了不同字段:

  • 错误根源:
    • 首次代码混淆了标签字段:训练模型用quality_binary,构造混淆矩阵时真实值取了my_type_test$quality,两个字段的取值、类别数量完全不一致
    • 修改后代码逻辑顺序错误:先给预测值赋值真实值的levels,此时还未将真实值转成因子,levels(df$Actual)为NULL,触发level数量不匹配报错
    • 可能存在预测结果全为0/全为1的情况,和真实标签完全没有重叠类别
  • 修复代码:
# 提前统一训练、测试集的标签因子水平,避免后续对齐问题
my_type_train$quality_binary <- factor(my_type_train$quality_binary, levels = c(0,1))
my_type_test$quality_binary <- factor(my_type_test$quality_binary, levels = c(0,1))

# 训练逻辑回归模型
my_log <- glm(quality_binary ~ fixed.acidity + volatile.acidity + citric.acid + chlorides + free.sulfur.dioxide + total.sulfur.dioxide +
                density + pH + sulphates + alcohol, data = my_type_train, family = "binomial")

# 生成测试集预测概率
prediction <- predict(my_log, newdata = my_type_test, type = "response")
# 转类别,提前对齐因子水平
predict_cat <- factor(ifelse(prediction < 0.5, 0, 1), levels = c(0,1))

# 生成混淆矩阵,注意第一个参数为预测值,第二个为真实值,positive填实际正类的取值
result <- confusionMatrix(predict_cat, my_type_test$quality_binary, positive = "1")
print(result)

ROC绘制与AUC计算报错解决方案

仅字符串可转符号、对象不存在的报错,核心原因是变量存储位置错误、命名不统一:

  • 错误根源:
    • 首次代码把预测概率prob存在了训练集里,调用ROC时用测试集,测试集没有prob字段
    • 混淆了标签字段,ROC计算时用了quality而非建模用的quality_binary
    • 修改后ROC对象存为roc2,画图时还在调用旧的roc对象
  • 修复代码:
# 把预测概率存在测试集里,不要存在训练集
my_type_test$prob <- prediction

library(pROC)
# 用测试集的真实标签和对应预测概率计算ROC
roc_obj <- roc(quality_binary ~ prob, data = my_type_test)
# 输出AUC值
print(auc(roc_obj))

# 绘制ROC曲线
library(ggplot2)
ggroc(roc_obj, color = "red") +
  geom_abline(slope = 1, intercept = 1, linetype = "dashed") +
  labs(title = "Logistic回归ROC曲线", x = "特异度", y = "灵敏度")

额外注意事项

  • 不要重复执行install.packages(),已安装的包直接用library()调用即可
  • 变量命名要统一,避免出现调用未定义对象的低级错误
  • 提前检查quality_binary的取值,确认只有0和1两类,无异常值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:04