Es ist leicht, einen Paketberechnungsbereich unter ROC zu finden, aber gibt es ein Paket, das den Bereich unter der Präzisionsrückrufkurve berechnet?
Es ist leicht, einen Paketberechnungsbereich unter ROC zu finden, aber gibt es ein Paket, das den Bereich unter der Präzisionsrückrufkurve berechnet?
Antworten:
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:
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 ).
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.
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