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?


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


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.