ROC 曲线/AUC 值作为性能指标

数据挖掘 机器学习 r 分类 表现
2022-02-17 18:50:49

我想使用 R 绘制 ROC 曲线。我有一个预测矩阵,其中每一列显示对应于不同方法的预测值。另外,我有一个标签向量。预测列的列名是ccsbadaIbadaII标签向量的列名是valueROCR为此使用库:

library(ROCR)
pred1 <- prediction(df$ccs,df$value)
roc <- performance(pred1,"tpr","fpr");
pred2 <- prediction(df$badaI,df$value)
roc2  <- performance(pred2,"tpr","fpr")
pred3 <- prediction(df$badaII,df$value)
roc3 <- performance(pred3,"tpr","fpr")
auc<- performance(pred,"auc")
auc = round(unlist(auc@y.values),2)
auc2<- performance(pred2,"auc")
auc2 = round(unlist(auc2@y.values),2)
auc3<- performance(pred3,"auc")
auc3 = round(unlist(auc3@y.values),2)
plot(roc,col="black",lty=1, lwd=4, cex.lab=1.5,axt="n")
axis(1,cex.axis=1.0);axis(2,cex.axis=1.0)
plot(roc2, add=TRUE,col="black",lty=3, lwd=4)
plot(roc3, add=TRUE,col="black",lty=2, lwd=4)
abline(0,1,col="gray60")
legend(0.3,0.30,c(paste0("CCS, ","AUC = ",auc),paste0("BADAI, ","AUC = ",auc2),paste0("BADAII, ","AUC = ",auc3)),
      lty=c(1,3,2), col=c('black','black','black'), lwd=4,cex=1.4,bty="n")

使用上面的代码时,我得到以下情节: 在此处输入图像描述

我有疑问:在查看数据时,很明显ccsbadaII应该具有AUC比 更高的值badaI,但结果却是相反的。谁能帮助我理解它为什么会这样?使用dput的数据df是:

structure(list(ccs = c(0.16, 0.04, 0.18, 0.09, 0.14, 0.14, 0.04, 
0.04, 0.08, 0.76, 0.03, 0.03, 0.68, 0.06, 0.83, 0.15, 0.07, 0.02, 
0.93, 0.22, 0.28, 0.11, 0.05, 0.01, 0.17, 0.15, 1, 0.13, 0.23, 
0.44, 1), badaI = c(0.61, 0.11, 0.53, 0.79, 0.75, 0.82, 0.57, 
0.67, 0.4, 0.95, 0.49, 0.61, 0.97, 0.52, 0.98, 0.7, 0.03, 0.18, 
0.85, 0.94, 0.9, 0.77, 0, 0.37, 0.47, 0.88, 0.99, 0.55, 0.86, 
0.96, 0.99), badaII = c(0.32, 0, 0.27, 0.12, 0.33, 0.12, 0.56, 
0, 0.32, 0.18, 0.18, 0.11, 0.18, 0.54, 0.37, 0.33, 1, 0.39, 0.29, 
0.11, 0.32, 0.53, 0.25, 0.21, 0.15, 0.16, 0.85, 0.31, 0.44, 1, 
1), value = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1)), .Names = c("ccs", 
"badaI", "badaII", "value"), row.names = c(NA, -31L), class = "data.frame")

更新 我使用下图来进一步解释我的直觉。该图是使用相同的预测值绘制的。 在此处输入图像描述

根据value列,编号为 15、27、30、31 的观测值具有标签 as 1,其余观测值具有0值。在查看上图时,很明显orCCSbadaII区分 0 和 1 之间的差异0和1。badaIbadaI1

我无法将我的直觉与 ROC 情节联系起来。@TBSRounder,我理解你所说的,但我需要用 ROC 图来支持上图,我觉得这很令人失望。谁能帮我将上图与 ROC 图关联起来?

1个回答

您发布的结果是正确的,我快速检查library(pROC)并得到了同样的结果。AUC/ROC 的重要特征是调用样本“1”或“0”的切点未设置为 0.5。对于您的每个预测变量,数字的范围根本不重要。重要的是更高的数字与真正的正面标签相关联的频率。例子:

Method 1:[1, 3, 5, 6, 9, 14] (predictor)
Method 1:[0, 0, 1, 0 ,1 , 1] (true label)
AUC: 0.8889

Method 2:[[0.01, 0.02, 200 , 250, 300, 1000000] (predictor)
Method 2:[0, 0, 1, 0 ,1 , 1] (true label)
AUC: 0.8889

AUC 度量只是衡量真实“1”样本的数量高于真实“0”样本的频率。预测变量甚至不必以 [0,1] 为界,它可以是任何范围。

如果对它进行排序,您的情节会提供更多信息。考虑以下三种方法中每一种的排序图(粗略,抱歉),其中“1”标签以蓝色突出显示。badaI 显然具有最接近较高值的“1”分组。

按方法排序的值