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 = fg
gdy fg
jest 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 qpPrecisionRecall
szczegółowe informacje o tym, czego oczekuje struktura danych w swoich argumentach.
AUPRC()
to funkcja w PerfMeas
pakiecie, która jest znacznie lepsza niż pr.curve()
funkcja w PRROC
pakiecie, gdy dane są bardzo duże.
pr.curve()
jest koszmarem i trwa wiecznie, gdy masz wektory z milionami wpisów. PerfMeas
w porównaniu zajmuje kilka sekund. PRROC
jest napisane w R i PerfMeas
jest napisane w C.