Respostas:
Em julho de 2016, o pacote PRROC funciona muito bem para calcular o ROC AUC e o PR AUC.
Supondo que você já tenha um vetor de probabilidades (chamado probs
) calculado com seu modelo e os rótulos de classe verdadeiros estejam no seu quadro de dados, pois df$label
(0 e 1) esse código deve funcionar:
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: A única coisa desconcertante é que você usa scores.class0 = fg
quando fg
é calculado para o rótulo 1 e não 0.
Aqui estão os exemplos de curvas ROC e PR com as áreas sob elas:
As barras à direita são as probabilidades de limite nas quais um ponto na curva é obtido.
Observe que, para um classificador aleatório, o ROC AUC será próximo de 0,5, independentemente do desequilíbrio da classe. No entanto, a AUC do PR é complicada (consulte O que é "linha de base" na curva de recall de precisão ).
Depois de obter uma curva de recall de precisão qpPrecisionRecall
, por exemplo:
pr <- qpPrecisionRecall(measurements, goldstandard)
você pode calcular sua AUC fazendo o seguinte:
f <- approxfun(pr[, 1:2])
auc <- integrate(f, 0, 1)$value
a página de ajuda qpPrecisionRecall
fornece detalhes sobre o que a estrutura de dados espera em seus argumentos.
AUPRC()
é uma função no PerfMeas
pacote que é muito melhor do que a pr.curve()
função no PRROC
pacote quando os dados são muito grandes.
pr.curve()
é um pesadelo e leva uma eternidade para terminar quando você tem vetores com milhões de entradas. PerfMeas
leva segundos em comparação. PRROC
está escrito em R e PerfMeas
está escrito em C.