Несколько кривых ROC на одном графике ROCR

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

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

Но я получаю:

Ошибка en as.double(y): невозможно принудить тип «S4» к вектору типа «double»

Спасибо!


person kahlo    schedule 29.12.2012    source источник


Ответы (3)


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

Кстати, если вы по какой-то причине действительно хотите использовать lines для построения последовательных кривых ROC, вам придется сделать что-то еще. так:

plot(perf) 
lines([email protected][[1]], [email protected][[1]], col = 2)
person adibender    schedule 29.12.2012
comment
Превосходно! Именно то, что я искал! - person kahlo; 30.12.2012

Повторяя @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))
person Scott Kaiser    schedule 30.12.2015

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

person psyprog    schedule 29.12.2012
comment
Спасибо! Единственная проблема заключается в том, что эти решения, по-видимому, предназначены для данных перекрестной проверки, поэтому невозможно, например, добавить легенду, чтобы различать, какая кривая принадлежит какому классификатору. А какие есть инструменты для рисования нескольких графиков в одном окне? - person kahlo; 30.12.2012
comment
Вы можете использовать подзаголовок функции или посмотреть этот документ: [ссылка] statmethods.net/advgraphs/layout.html - person psyprog; 31.12.2012