一个图ROCR中的多个ROC曲线

时间:2012-12-29 19:43:18

标签: r plot roc

是否可以使用ROCR包在同一图中绘制不同分类器的roc曲线?我试过了:

>plot(perf.neuralNet, colorize=TRUE)
>lines(perf.randomForest)

但我明白了:

Error en as.double(y) : 
  cannot coerce type 'S4' to vector of type 'double'

谢谢!

3 个答案:

答案 0 :(得分:35)

lines方法的问题在于S4包中定义的类performance的对象没有通用ROCR行函数。但您可以像使用其他add = TRUE参数一样使用通用绘图函数。例如,部分来自?plot.performance的示例页面:

library(ROCR)
data(ROCR.simple)
pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels )
pred2 <- prediction(abs(ROCR.simple$predictions + 
                        rnorm(length(ROCR.simple$predictions), 0, 0.1)), 
        ROCR.simple$labels)
perf <- performance( pred, "tpr", "fpr" )
perf2 <- performance(pred2, "tpr", "fpr")
plot( perf, colorize = TRUE)
plot(perf2, add = TRUE, colorize = TRUE)

或者,您可以将所有预测存储在矩阵中,并在一个中执行所有后续步骤:

preds <- cbind(p1 = ROCR.simple$predictions, 
                p2 = abs(ROCR.simple$predictions + 
                rnorm(length(ROCR.simple$predictions), 0, 0.1)))

pred.mat <- prediction(preds, labels = matrix(ROCR.simple$labels, 
                nrow = length(ROCR.simple$labels), ncol = 2) )

perf.mat <- performance(pred.mat, "tpr", "fpr")
plot(perf.mat, colorize = TRUE)
不过,如果你出于某种原因真的想用lines来绘制连续的ROC曲线,你就必须这样做。像这样:

plot(perf) 
lines(perf2@x.values[[1]], perf2@y.values[[1]], col = 2)

答案 1 :(得分:2)

回应@adibender并添加注释:该示例未介绍如何使用第二个(一次全部绘制)方法为每条曲线设置单独的颜色。在这种情况下,将col作为列表传递:

library(ROCR)
data(ROCR.hiv)
x   <- prediction(ROCR.hiv$hiv.nn$predictions, ROCR.hiv$hiv.nn$labels)
ROC <- performance(x, "tpr", "fpr")
plot(ROC, col = as.list(1:10))

答案 2 :(得分:1)

R具有在一个窗口中绘制多个绘图的功能。如果包在一个窗口中不支持多个绘图,则可以使用R的标准工具解决问题。其他方式:Example of several ROCs 使用此脚本的文章:An example of ROC curves plotting with ROCR