Подтвердить что ты не робот

Несколько кривых ROC на одном участке ROCR

Можно ли построить кривую roc для разных классификаторов на одном и том же участке, используя пакет ROCR? Я пробовал:

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

Но я получаю:

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

Спасибо!

4b9b3361

Ответ 1

Проблема с вашим lines -approach заключается в том, что для объекта класса performance, определенного в пакете ROCR, нет общей функции S4 lines. Но вы можете использовать общую функцию графика, как и с дополнительным аргументом 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)

Btw, если вы по какой-то причине действительно хотели использовать lines для построения последовательных кривых ROC, вам нужно было бы сделать sth. например:

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

Ответ 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))

Ответ 3

R имеет функции для рисования нескольких графиков в одном окне. И если пакет не поддерживает несколько графиков в одном окне, вы можете решить проблему со стандартными инструментами R. Другой способ: Пример нескольких ROCs Статья с этим script: Пример построения кривой ROC с ROCR