Кривая ROC для идеальной маркировки производится в перевернутом виде упаковкой ROCR - PullRequest
0 голосов
/ 11 января 2019

код

library(magrittr)
library(ROCR)
library(caret)
library(dplyr)
library(ggplot2)
data(GermanCredit)

GermanCredit %<>% arrange(Class)
GermanCredit$perfect_prob = sort(runif(nrow(GermanCredit)), decreasing = TRUE)

perf = performance(prediction(GermanCredit$perfect_prob, GermanCredit$Class), "tpr", "fpr")

data.frame(FalsePositive = unlist(perf@x.values),
           TruePositive = unlist(perf@y.values),
           method = rep(names(select(GermanCredit, perfect_prob)),
                        times=c(length(perf@x.values[[1]])))) %>%
ggplot(aes(x=FalsePositive, y=TruePositive, color=method)) +
  geom_line()

отображает кривую

enter image description here

что явно не так. Что я делаю неправильно? Я не могу понять это для моей жизни. Цель - «Плохо». Поэтому я убедился, что

> levels(GermanCredit$Class)
[1] "Bad"  "Good"

1 Ответ

0 голосов
/ 11 января 2019

Хотя каретка считает первый из уровней положительным классом, как видно при использовании

confusionMatrix(..., reference=GermanCredit$Class)

РПЦЗ считает более поздний уровень положительным классом. Логика заключается в том, что 1 является положительным классом, а 0 отрицательным, и, поскольку 0 < 1 и "Bad" < "Good", ROCR считает "Good" положительным классом здесь.

Решением является использование явного порядка:

pred = prediction(GermanCredit$perfect_prob, GermanCredit$Class, label.ordering = c("Good", "Bad")
perf = performance(pred, "tpr", "fpr")

Теперь "Good" < "Bad" и "Bad" считается положительным классом prediction.

...