web-dev-qa-db-fra.com

Plusieurs courbes ROC dans un tracé ROCR

Est-il possible de tracer la courbe roc pour différents classificateurs dans le même tracé en utilisant le package ROCR? J'ai essayé:

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

Mais je reçois:

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

Je vous remercie!

23
kahlo

Le problème avec votre approche lines- est qu'il n'y a pas de générique S4 lignes fonction pour un objet de classe performance défini dans le package ROCR. Mais vous pouvez utiliser la fonction de tracé générique comme vous l'avez fait avec un add = TRUE argument. Par exemple, cela provient en partie de la page d'exemple de ?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)

OU, vous pouvez stocker toutes vos prévisions dans une matrice et effectuer toutes les étapes suivantes en une seule:

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, si pour une raison quelconque vous vouliez vraiment utiliser lines pour tracer des courbes ROC consécutives, vous devriez faire qc. comme ça:

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

Faire écho à @adibender et ajouter un commentaire: l'exemple ne couvre pas comment définir des couleurs distinctes pour chaque courbe individuelle en utilisant la deuxième approche (tracer tout à la fois). Dans ce cas, passez col comme 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))
2
Scott Kaiser

R a des fonctions pour dessiner plusieurs tracés dans une seule fenêtre. Et si le package ne prend pas en charge plusieurs tracés dans une seule fenêtre, vous pouvez résoudre le problème avec les instruments standard de R. Autre manière: Exemple de plusieurs ROC Article avec ce script: n exemple de ROC courbes traçant avec ROCR

1
psyprog