2012-12-29 34 views
19

是否可以使用ROCR軟件包繪製不同分類器的roc曲線?我已經試過:一張圖中的多個ROC曲線ROCR

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

,但我得到:

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

謝謝!

回答

30

lines -approach的問題是,有沒有,如果包不支持的幾個地塊在一個窗口中,你可以與其他R.路標準儀器解決問題通用S4行功能用於在ROCR包中定義的類performance的對象。但是您可以像使用額外的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([email protected][[1]], [email protected][[1]], col = 2) 
+1

優秀!正是我在找什麼! – kahlo

1

R具有在一個窗口中繪製幾個圖的功能。 Example of several ROCs 條與此腳本:An example of ROC curves plotting with ROCR

+0

謝謝!唯一的問題是這個解決方案似乎是用於交叉驗證的數據,所以例如添加圖例來區分哪條曲線屬於哪個分類器是不可能的。哪些是在同一個窗口中繪製幾個圖的工具? – kahlo

+0

您可以使用函數子圖或查看此文檔:[鏈接] http://www.statmethods.net/advgraphs/layout.html – psyprog

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))