Calcul de l'AUPR dans R [fermé]

14

Il est facile de trouver une zone de calcul de package sous ROC, mais existe-t-il un package qui calcule la zone sous une courbe de rappel de précision?


la source
ROCR , pROC - sont vraiment sympas!
Vladimir Chupakhin
Ils le sont certainement, mais AFAIK ne peut pas non plus calculer l'aire sous la courbe de rappel de précision.

Réponses:

13

Depuis juillet 2016, le package PRROC fonctionne très bien pour calculer à la fois ROC AUC et PR AUC.

En supposant que vous disposez déjà d'un vecteur de probabilités (appelé probs) calculé avec votre modèle et que les véritables étiquettes de classe sont dans votre bloc de données car df$label(0 et 1) ce code devrait fonctionner:

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: La seule chose déconcertante est que vous utilisez scores.class0 = fgquand fgest calculé pour l'étiquette 1 et non 0.

Voici les exemples de courbes ROC et PR avec les zones en dessous:

Courbe ROC avec AUC

Courbe PR avec AUC

Les barres à droite sont les probabilités de seuil auxquelles un point de la courbe est obtenu.

Notez que pour un classificateur aléatoire, ROC AUC sera proche de 0,5 quel que soit le déséquilibre de classe. Cependant, l'ASC PR est délicate (voir Qu'est - ce que la "ligne de base" dans la courbe de rappel de précision ).

arun
la source
Veuillez vous référer à la documentation PRROC liée dans la réponse ci-dessus.
arun
2

Un petit googling renvoie un paquet bioc, qpgraph ( qpPrecisionRecall), et un autre cran, minet ( auc.pr). Je n'ai cependant aucune expérience avec eux. Les deux ont été conçus pour gérer les réseaux biologiques.

chl
la source
Ce minet avait l'air bien, mais il doit avoir un adaptateur externe pour effectuer une entrée appropriée à partir des données générales :-(
2

Une fois que vous avez obtenu une courbe de rappel de précision qpPrecisionRecall, par exemple:

pr <- qpPrecisionRecall(measurements, goldstandard)

vous pouvez calculer son ASC en procédant comme suit:

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

la page d'aide de qpPrecisionRecallvous donne des détails sur ce que la structure de données attend dans ses arguments.

robertc
la source
1
La courbe PR ne nécessite-t-elle pas une intégration plus sophistiquée? Voir: mnd.ly/oWQQw1
1

AUPRC()est une fonction du PerfMeaspackage qui est bien meilleure que la pr.curve()fonction du PRROCpackage lorsque les données sont très volumineuses. pr.curve()est un cauchemar et prend une éternité pour se terminer lorsque vous avez des vecteurs avec des millions d'entrées. PerfMeasprend quelques secondes en comparaison. PRROCs'écrit en R et PerfMeass'écrit en C.

jasoncolts
la source