Cálculo de AUPR em R [fechado]

14

É fácil encontrar uma área de cálculo de pacotes no ROC, mas existe um pacote que calcula a área sob a curva de precisão de recuperação?


fonte
ROCR , pROC - são muito legais!
Vladimir Chupakhin
Eles certamente são, mas o AFAIK também não pode calcular a área sob a curva de precisão-recall.

Respostas:

13

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 = fgquando 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:

Curva ROC com AUC

Curva PR com AUC

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 ).

uma corrida
fonte
Por favor, consulte a documentação do PRROC vinculada na resposta acima.
arun
2

Um pouco pesquisando no Google retorna um pacote bioc, qpgraph ( qpPrecisionRecall), e um pacote cran, minet ( auc.pr). Eu não tenho experiência com eles, no entanto. Ambos foram criados para lidar com redes biológicas.

chl
fonte
Este minet parecia bom, mas ele precisa ter algum adaptador externo para fazer entrada apropriado a partir de dados geral :-(
2

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 qpPrecisionRecallfornece detalhes sobre o que a estrutura de dados espera em seus argumentos.

robertc
fonte
1
A curva PR não requer uma integração mais sofisticada? Veja: mnd.ly/oWQQw1
1

AUPRC()é uma função no PerfMeaspacote que é muito melhor do que a pr.curve()função no PRROCpacote 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. PerfMeasleva segundos em comparação. PRROCestá escrito em R e PerfMeasestá escrito em C.

jasoncolts
fonte