2012-12-29 19 views
19

E 'possibile tracciare la curva roc per classificatori diffrenti nello stesso grafico utilizzando il pacchetto ROCR? Ho provato:Più curve ROC in un grafico ROCR

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

Ma ottengo:

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

Grazie!

risposta

30

Il problema con il vostro lines -approach è che non c'è alcuna funzione generica S4 per un oggetto della classe performance definita nel pacchetto ROCR. Ma puoi usare la funzione di stampa generica come hai fatto con un argomento aggiuntivo add = TRUE. Per esempio, questo è in parte dalla pagina esempio di ?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) 

O, è possibile memorizzare tutti i tuoi pronostici in una matrice e fare tutte le fasi successive in uno:

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) 

Btw, se si per qualche motivo volevo davvero usare lines per tracciare curve ROC consecutive che dovresti fare sth. in questo modo:

plot(perf) 
lines([email protected][[1]], [email protected][[1]], col = 2) 
+1

Eccellente! Esattamente quello che stavo cercando! – kahlo

1

R ha funzioni per disegnare diversi grafici in una finestra. E se il pacchetto non supporta diversi appezzamenti in una finestra, è possibile risolvere il problema con gli strumenti standard di R. Altro modo: Example of several ROCs articolo con questo script: An example of ROC curves plotting with ROCR

+0

Grazie! L'unico problema è che questa soluzione sembra essere per i dati di convalida incrociata, quindi non è possibile ad esempio aggiungere una legenda per distinguere quale curva appartiene a quale classificatore. E quali sono gli strumenti per disegnare più trame nella stessa finestra? – kahlo

+0

È possibile utilizzare la sottotramma della funzione o consultare questo documento: [collegamento] http://www.statmethods.net/advgraphs/layout.html – psyprog

2

Riprendendo @adibender, e aggiungendo un commento: nell'esempio non comprende come impostare colori separati per ogni singola curva utilizzando il secondo (terreno tutto in una volta) approccio. In questo caso, passa come un elenco:

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