Ответы:
По состоянию на июль 2016 года пакет PRROC отлично работает для вычислений как ROC AUC, так и PR AUC.
Предполагая, что у вас уже есть вектор вероятностей (называемый probs
), вычисленный с вашей моделью, и истинные метки классов находятся в вашем фрейме данных какdf$label
(0 и 1), этот код должен работать:
install.packages("PRROC")
require(PRROC)
fg <- probs[df$label == 1]
bg <- probs[df$label == 0]
# ROC Curve
roc <- roc.curve(scores.class0 = fg, scores.class1 = bg, curve = T)
plot(roc)
# PR Curve
pr <- pr.curve(scores.class0 = fg, scores.class1 = bg, curve = T)
plot(pr)
PS: единственное, что сбивает с толку, вы используете scores.class0 = fg
когда fg
вычисляется для метки 1, а не 0.
Вот примеры кривых ROC и PR с областями под ними:
Столбцы справа - это пороговые вероятности, при которых получается точка на кривой.
Обратите внимание, что для случайного классификатора ROC AUC будет близок к 0,5 независимо от дисбаланса класса. Однако PR AUC сложен (см. « Что такое« базовый уровень »в кривой точного отзыва ).
Как только вы получите точную кривую отзыва qpPrecisionRecall
, например:
pr <- qpPrecisionRecall(measurements, goldstandard)
Вы можете рассчитать его AUC, выполнив это:
f <- approxfun(pr[, 1:2])
auc <- integrate(f, 0, 1)$value
Страница справки qpPrecisionRecall
дает вам подробную информацию о том, что структура данных ожидает в своих аргументах.
AUPRC()
это функция в PerfMeas
пакете, которая намного лучше, чем pr.curve()
функция в PRROC
пакете, когда данные очень большие.
pr.curve()
это кошмар, и он занимает вечность, когда у вас есть векторы с миллионами записей. PerfMeas
занимает секунды в сравнении. PRROC
написано на R и PerfMeas
написано на C.