Calcolo di AUPR in R [chiuso]


14

È facile trovare un'area di calcolo del pacchetto in ROC, ma esiste un pacchetto che calcola l'area sotto la curva di richiamo di precisione?


ROCR , pROC - sono davvero carini!
Vladimir Chupakhin,

Lo sono certamente, ma AFAIK non può calcolare l'area sotto la curva di richiamo di precisione.

Risposte:


13

A partire da luglio 2016, il pacchetto PRROC funziona perfettamente per il calcolo di ROC AUC e PR AUC.

Supponendo che tu abbia già un vettore di probabilità (chiamato probs) calcolato con il tuo modello e che le etichette della vera classe siano nel tuo frame di dati come df$label(0 e 1) questo codice dovrebbe funzionare:

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: L'unica cosa sconcertante è che usi scores.class0 = fgquando fgviene calcolato per l'etichetta 1 e non per 0.

Ecco le curve di esempio ROC e PR con le aree sottostanti:

Curva ROC con AUC

Curva PR con AUC

Le barre a destra sono le probabilità di soglia in cui si ottiene un punto sulla curva.

Si noti che per un classificatore casuale, ROC AUC sarà vicino a 0,5 indipendentemente dallo squilibrio di classe. Tuttavia, la PR AUC è complicata (vedere Cos'è la "linea di base" nella curva di richiamo di precisione ).


Si prega di fare riferimento alla documentazione PRROC collegata nella risposta sopra.
arun

2

Un po 'di google restituisce un pacchetto bioc, qpgraph ( qpPrecisionRecall) e uno cran, minet ( auc.pr). Non ho esperienza con loro, comunque. Entrambi sono stati ideati per gestire reti biologiche.


Questo minet sembrava carino, ma deve avere un adattatore esterno per fare l'input appropriato dai dati generali :-(

2

Una volta ottenuta una curva di richiamo di precisione qpPrecisionRecall, ad esempio:

pr <- qpPrecisionRecall(measurements, goldstandard)

puoi calcolare la sua AUC in questo modo:

f <- approxfun(pr[, 1:2])
auc <- integrate(f, 0, 1)$value

la pagina di aiuto di qpPrecisionRecallfornisce dettagli su ciò che la struttura dei dati si aspetta nei suoi argomenti.


1
La curva PR non richiede un'integrazione più elaborata? Vedi: mnd.ly/oWQQw1

1

AUPRC()è una funzione nel PerfMeaspacchetto che è molto meglio della pr.curve()funzione nel PRROCpacchetto quando i dati sono molto grandi. pr.curve()è un incubo e impiega un'eternità a finire quando hai vettori con milioni di voci. PerfMeasrichiede secondi in confronto. PRROCè scritto in R ed PerfMeasè scritto in C.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.