Odpowiedzi:
Od lipca 2016 r. Pakiet PRROC świetnie sprawdza się w obliczaniu zarówno ROC AUC, jak i PR AUC.
Zakładając, że masz już wektor prawdopodobieństwa (nazywany probs) obliczony dla twojego modelu, a prawdziwe etykiety klas znajdują się w ramce danych, ponieważ df$label(0 i 1) ten kod powinien działać:
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: Jedyne niepokojące jest to, że używasz go, scores.class0 = fggdy fgjest obliczany dla etykiety 1, a nie 0.
Oto przykładowe krzywe ROC i PR z obszarami pod nimi:
Słupki po prawej to prawdopodobieństwo progowe, przy którym uzyskuje się punkt na krzywej.
Należy zauważyć, że dla losowego klasyfikatora AUC ROC będzie bliskie 0,5, niezależnie od nierównowagi klasy. Jednak AUC PR jest trudne (patrz Co to jest „linia bazowa” na krzywej przywołania dokładności ).
Po uzyskaniu precyzyjnej krzywej przywołania qpPrecisionRecall, np .:
pr <- qpPrecisionRecall(measurements, goldstandard)
możesz obliczyć jego AUC, wykonując następujące czynności:
f <- approxfun(pr[, 1:2])
auc <- integrate(f, 0, 1)$value
strona pomocy zawiera qpPrecisionRecallszczegółowe informacje o tym, czego oczekuje struktura danych w swoich argumentach.
AUPRC()to funkcja w PerfMeaspakiecie, która jest znacznie lepsza niż pr.curve()funkcja w PRROCpakiecie, gdy dane są bardzo duże.
pr.curve()jest koszmarem i trwa wiecznie, gdy masz wektory z milionami wpisów. PerfMeasw porównaniu zajmuje kilka sekund. PRROCjest napisane w R i PerfMeasjest napisane w C.