Cálculo de AUPR en R [cerrado]

14

Es fácil encontrar un área de cálculo de paquetes bajo ROC, pero ¿hay un paquete que calcule el área bajo la curva de recuperación de precisión?


fuente
ROCR , pROC : ¡son realmente agradables!
Vladimir Chupakhin
Ciertamente lo son, pero AFAIK tampoco puede calcular el área bajo la curva de recuperación de precisión.

Respuestas:

13

A partir de julio de 2016, el paquete PRROC funciona muy bien para calcular tanto ROC AUC como PR AUC.

Suponiendo que ya tiene un vector de probabilidades (llamado probs) calculado con su modelo y las etiquetas de clase verdaderas están en su marco de datos ya que df$label(0 y 1) este código debería 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)

PD: Lo único desconcertante es que se usa scores.class0 = fgcuando fgse calcula para la etiqueta 1 y no para 0.

Aquí están las curvas ROC y PR de ejemplo con las áreas debajo de ellas:

Curva ROC con AUC

Curva PR con AUC

Las barras a la derecha son las probabilidades de umbral en las que se obtiene un punto en la curva.

Tenga en cuenta que para un clasificador aleatorio, ROC AUC estará cerca de 0.5 independientemente del desequilibrio de clase. Sin embargo, el PR AUC es complicado (ver ¿Qué es la "línea de base" en la curva de recuperación de precisión )?

arun
fuente
Consulte la documentación de PRROC vinculada en la respuesta anterior.
Arun
2

Un pequeño google devuelve un paquete bioc, qpgraph ( qpPrecisionRecall), y uno cran, minet ( auc.pr). Sin embargo, no tengo experiencia con ellos. Ambos han sido diseñados para tratar con redes biológicas.

chl
fuente
Este minet se veía bien, pero necesita tener un adaptador externo para hacer la entrada apropiada de los datos generales :-(
2

Una vez que tenga una curva de recuperación de precisión qpPrecisionRecall, por ejemplo:

pr <- qpPrecisionRecall(measurements, goldstandard)

puedes calcular su AUC haciendo esto:

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

la página de ayuda de qpPrecisionRecallle brinda detalles sobre qué estructura de datos espera en sus argumentos.

robertc
fuente
1
¿La curva PR no requiere una integración más elegante? Ver: mnd.ly/oWQQw1
1

AUPRC()es una función en el PerfMeaspaquete que es mucho mejor que la pr.curve()función en el PRROCpaquete cuando los datos son muy grandes. pr.curve()es una pesadilla y lleva mucho tiempo terminar cuando tienes vectores con millones de entradas. PerfMeasToma segundos en comparación. PRROCestá escrito en R y PerfMeasestá escrito en C.

jasoncolts
fuente