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