Berechnung der AUPR in R [geschlossen]

14

Es ist leicht, einen Paketberechnungsbereich unter ROC zu finden, aber gibt es ein Paket, das den Bereich unter der Präzisionsrückrufkurve berechnet?


quelle
ROCR , pROC - sind wirklich nett!
Vladimir Chupakhin
Dies ist sicherlich der Fall, aber AFAIK kann die Fläche unter der Präzisionsrückrufkurve auch nicht berechnen.

Antworten:

13

Ab Juli 2016 eignet sich das Paket PRROC hervorragend für die Berechnung von ROC AUC und PR AUC.

Angenommen, Sie haben bereits einen Vektor von Wahrscheinlichkeiten (genannt probs), die mit Ihrem Modell berechnet wurden, und die wahren Klassenbezeichnungen befinden sich in Ihrem Datenrahmen, da df$label(0 und 1) dieser Code funktionieren sollte:

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: Das einzig beunruhigende ist, dass Sie verwenden, scores.class0 = fgwenn fgfür Label 1 und nicht 0 berechnet wird.

Hier sind die Beispiel-ROC- und PR-Kurven mit den Bereichen darunter:

ROC-Kurve mit AUC

PR-Kurve mit AUC

Die Balken rechts sind die Schwellenwahrscheinlichkeiten, bei denen ein Punkt auf der Kurve erhalten wird.

Beachten Sie, dass für einen zufälligen Klassifikator die ROC-AUC unabhängig vom Klassenungleichgewicht nahe bei 0,5 liegt. Die PR AUC ist jedoch schwierig (siehe Was ist "Grundlinie" in der Präzisionsrückrufkurve ).

Arun
quelle
Bitte beziehen Sie sich auf die PRROC-Dokumentation, die in der obigen Antwort verlinkt ist.
Arun
2

Ein bisschen googeln liefert ein Bioc-Paket, qpgraph ( qpPrecisionRecall), und ein Cran- Paket , minet ( auc.pr). Ich habe jedoch keine Erfahrung mit ihnen. Beide wurden entwickelt, um mit biologischen Netzwerken umzugehen.

chl
quelle
Dieses Minet sah nett aus, aber es braucht einen externen Adapter, um die entsprechenden Eingaben aus den allgemeinen Daten zu machen :-(
2

Sobald Sie eine präzise Rückrufkurve erhalten haben qpPrecisionRecall, z. B .:

pr <- qpPrecisionRecall(measurements, goldstandard)

Sie können die AUC folgendermaßen berechnen:

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

Auf der Hilfeseite von qpPrecisionRecallerfahren Sie, welche Datenstruktur in ihren Argumenten erwartet wird.

robertc
quelle
1
Benötigt die PR-Kurve keine ausgefallenere Integration? Siehe: mnd.ly/oWQQw1
1

AUPRC()ist eine Funktion im PerfMeasPaket, die viel besser ist als die pr.curve()Funktion im PRROCPaket, wenn die Daten sehr groß sind. pr.curve()ist ein Albtraum und dauert ewig, wenn Sie Vektoren mit Millionen von Einträgen haben. PerfMeasdauert im Vergleich Sekunden. PRROCist in R geschrieben und PerfMeasist in C. geschrieben

jasoncolts
quelle