2012-12-29 13 views
19

Czy możliwe jest wykreślenie krzywej roc dla różnych klasyfikatorów na tym samym wykresie za pomocą pakietu ROCR? Próbowałem:Wiele krzywych ROC na jednym wykresie ROCR

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

Ale otrzymuję:

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

Dziękujemy!

Odpowiedz

30

Problem z lines, podejściem jest, że nie ma generic S4 funkcja linii dla obiektu klasy performance zdefiniowana w pakiecie ROCR. Ale możesz użyć ogólnej funkcji fabuły, jak to robiłeś z dodatkowym argumentem add = TRUE. Na przykład jest to częściowo z przykładowej stronie ?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, można przechowywać wszystkie swoje prognozy w matrycy i wykonać wszystkie kolejne kroki w jednym:

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, jeśli ciebie z jakiegoś powodu naprawdę chciał użyć lines do wykreślenia kolejnych krzywych ROC, które musiałbyś zrobić. tak:

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

Doskonały! Dokładnie to, czego szukałem! – kahlo

1

R ma funkcje do rysowania kilku działek w jednym oknie. A jeśli pakiet nie obsługuje kilka działek w jednym oknie, można rozwiązać problemy ze standardowymi instrumentami R. inny sposób: Example of several ROCs artykułu z tego skryptu: An example of ROC curves plotting with ROCR

+0

Dzięki! Jedynym problemem jest to, że te rozwiązania wydają się być dla danych sprawdzających krzyżowo, więc nie można na przykład dodać legendy, aby odróżnić, która krzywa należy do tego klasyfikatora. A które są narzędzia do rysowania kilku działek w tym samym oknie? – kahlo

+0

Możesz użyć funkcji subplot lub zobacz ten dokument: [link] http://www.statmethods.net/advgraphs/layout.html – psyprog

2

Powtarzając @adibender i dodając komentarz: przykład nie obejmuje, jak ustawić oddzielne kolory dla każdej krzywej przy użyciu drugiego (wykres naraz) podejścia. W takim przypadku należy podać col jako listę:

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)) 
Powiązane problemy