2012-12-29 6 views
19

Ist es möglich, die Roc-Kurve für verschiedene Klassifikatoren in demselben Diagramm mit dem ROCR-Paket zu plotten? Ich habe versucht:Mehrere ROC-Kurven in einem Diagramm ROCR

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

Aber ich bekomme:

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

Thank you!

Antwort

30

Das Problem mit Ihrem lines -Ansatz ist, dass es keine Generische S4 Linien Funktion für ein Objekt der Klasse performance im ROCR Paket definiert. Aber Sie können die generische Plotfunktion wie mit einem zusätzlichen add = TRUE Argument verwenden. Zum Beispiel ist dies zum Teil aus der Beispielseite von ?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) 

OR, können Sie alle Ihre Vorhersagen in einer Matrix und tun, die alle nachfolgenden Schritte in einem:

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, wenn Sie Aus irgendeinem Grund wollte wirklich lines verwenden, um aufeinander folgende ROC-Kurven zu plotten, die Sie tun müssten, tun. wie folgt aus:

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

Excellent! Genau das, was ich gesucht habe! – kahlo

1

R hat Funktionen zum Zeichnen mehrerer Diagramme in einem Fenster. Example of several ROCs Artikel mit diesem Skript: Und wenn Paket mehr Parzellen in einem Fenster nicht unterstützt, können Sie Probleme mit Standardgeräten von R. Anderer Art und Weise lösen An example of ROC curves plotting with ROCR

+0

Vielen Dank! Das einzige Problem ist, dass diese Lösungen für Kreuzvalidierungsdaten zu sein scheinen. Daher ist es beispielsweise nicht möglich, eine Legende hinzuzufügen, um zu unterscheiden, welche Kurve zu welchem ​​Klassifizierer gehört. Und welches sind die Instrumente, um mehrere Parzellen im selben Fenster zu zeichnen? – kahlo

+0

Sie können Funktion Subplot verwenden oder dieses Dokument sehen: [Link] http://www.statmethods.net/advgraphs/layout.html – psyprog

2

Echoing @adibender und das Hinzufügen Kommentar: Das Beispiel bezieht sich nicht wie getrennte Farben für jede einzelne Kurve, um den zweiten (Plot auf einmal) Ansatz. Übergeben Sie in diesem Fall die Spalte col als Liste:

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