„Krzywa linii podstawowej” na wykresie krzywej PR jest linią poziomą o wysokości równej liczbie pozytywnych przykładów stosunku do całkowitej liczby danych treningowych , tj. odsetek pozytywnych przykładów w naszych danych ( ).N PP.N.P.N.
OK, dlaczego tak jest? Załóżmy, że mamy „klasyfikator śmieci” . zwraca losową prawdopodobieństwa do -tej przykład próbka się w klasie . Dla wygody powiedz . Bezpośrednie implikacje tego losowego przypisania klas są takie, że będzie miał (oczekiwaną) precyzję równą odsetkowi pozytywnych przykładów w naszych danych. To jest tylko naturalne; każda całkowicie losowa podpróbka naszych danych będzie miała poprawnie sklasyfikowane . Będzie to prawdą dla każdego progu prawdopodobieństwaC J p i idojotdojotpjaja A p i ∼ U [ 0 , 1 ] C J E { PyjaZApja∼ U[ 0 , 1 ]dojotqCJq[0,1]qACJqpi∼U[0,1]q(100(mi{ PN.}qmożemy wykorzystać jako granicę decyzji prawdopodobieństwa członkostwa w klasie zwrócone przez . ( oznacza wartość w gdzie wartości prawdopodobieństwa większe lub równe są sklasyfikowane w klasie ) Z drugiej strony wydajność przywołania jest (w oczekiwaniu) równa jeżeli . Na dowolnym progu wybieramy (w przybliżeniu) naszych całkowitych danych, które następnie będą zawierać (w przybliżeniu) całkowitej liczby instancji klasydojotq[0,1]qACJqpi∼U[0,1]q( 100 ( 1 - q ) ) % A x y P(100(1−q))%(100(1−q))%Aw próbce. Stąd linia pozioma, o której wspominaliśmy na początku! Dla każdej wartości przywołania ( wartości na wykresie PR) odpowiadająca jej wartość dokładności ( wartości na wykresie PR) jest równa .xyPN
Szybka uwaga dodatkowa: Próg ogólnie nie jest równy 1 minus oczekiwane wycofanie. Dzieje się tak w przypadku wspomnianego powyżej tylko z powodu losowego równomiernego rozkładu wyników ; dla innego rozkładu (np. ) ta przybliżona relacja tożsamości między a przywołaniem nie ma zastosowania; Zastosowano ponieważ jest najłatwiejszy do zrozumienia i wizualizacji mentalnej. Jednak dla innego losowego rozkładu w profil PR się nie zmieni. Tylko rozmieszczenie wartości PR dla danych wartości ulegnie zmianie.C J C J p i ∼ B ( 2 ,qCJCJq U [ 0 , 1 ] [ 0 , 1 ] C J qpi∼B(2,5)qU[0,1][0,1]CJq
Teraz odnośnie doskonały klasyfikatora , to znaczy jeden klasyfikator, który powraca prawdopodobieństwo do próbki instancji samopoczucia klasy jeśli jest rzeczywiście w klasie i dodatkowo zwraca prawdopodobieństwo jeśli nie jest członkiem klasy . Oznacza to, że dla każdego progu będziemy mieć dokładność (tj. W kategoriach graficznych otrzymamy linię zaczynającą się od precyzji ). Jedynym punktem, w którym nie otrzymujemy precyzji, jest . Dla 1 y i ACP1yiA AyiA 0 y i A q 100 % 100 % 100 % q = 0 q = 0 P.CP0yiAq100%100%100%q=0q=0, Dokładność spada proporcji pozytywne przykłady, w serwerze ( ), a (szalenie?), Że sklasyfikowanie nawet punkty o prawdopodobieństo klasy jako w klasie . Wykres PR ma tylko dwie możliwe wartości precyzji, i . 0AACP1PPN0AACP1PN
OK i trochę kodu R, aby zobaczyć to z pierwszej ręki na przykładzie, w którym wartości dodatnie odpowiadają naszej próbki. Zauważ, że robimy „soft-zadanie” w kategorii klasy w tym sensie, że wartość prawdopodobieństwo związane z każdym punktem ilościowo do naszej pewności, że ten punkt jest klasy .A40%A
rm(list= ls())
library(PRROC)
N = 40000
set.seed(444)
propOfPos = 0.40
trueLabels = rbinom(N,1,propOfPos)
randomProbsB = rbeta(n = N, 2, 5)
randomProbsU = runif(n = N)
# Junk classifier with beta distribution random results
pr1B <- pr.curve(scores.class0 = randomProbsB[trueLabels == 1],
scores.class1 = randomProbsB[trueLabels == 0], curve = TRUE)
# Junk classifier with uniformly distribution random results
pr1U <- pr.curve(scores.class0 = randomProbsU[trueLabels == 1],
scores.class1 = randomProbsU[trueLabels == 0], curve = TRUE)
# Perfect classifier with prob. 1 for positives and prob. 0 for negatives.
pr2 <- pr.curve(scores.class0 = rep(1, times= N*propOfPos),
scores.class1 = rep(0, times = N*(1-propOfPos)), curve = TRUE)
par(mfrow=c(1,3))
plot(pr1U, main ='"Junk" classifier (Unif(0,1))', auc.main= FALSE,
legend=FALSE, col='red', panel.first= grid(), cex.main = 1.5);
pcord = pr1U$curve[ which.min( abs(pr1U$curve[,3]- 0.50)),c(1,2)];
points( pcord[1], pcord[2], col='black', cex= 2, pch = 1)
pcord = pr1U$curve[ which.min( abs(pr1U$curve[,3]- 0.20)),c(1,2)];
points( pcord[1], pcord[2], col='black', cex= 2, pch = 17)
plot(pr1B, main ='"Junk" classifier (Beta(2,5))', auc.main= FALSE,
legend=FALSE, col='red', panel.first= grid(), cex.main = 1.5);
pcord = pr1B$curve[ which.min( abs(pr1B$curve[,3]- 0.50)),c(1,2)];
points( pcord[1], pcord[2], col='black', cex= 2, pch = 1)
pcord = pr1B$curve[ which.min( abs(pr1B$curve[,3]- 0.20)),c(1,2)];
points( pcord[1], pcord[2], col='black', cex= 2, pch = 17)
plot(pr2, main = '"Perfect" classifier', auc.main= FALSE,
legend=FALSE, col='red', panel.first= grid(), cex.main = 1.5);
gdzie czarne kółka i trójkąty oznaczają odpowiednio i na pierwszych dwóch wykresach. Od razu widzimy, że klasyfikatory „śmieci” szybko osiągają precyzję równą ; podobnie idealny klasyfikator ma dokładność we wszystkich zmiennych przywracania. Nic dziwnego, że AUCPR dla „śmieciowego” klasyfikatora jest równy odsetkowi pozytywnego przykładu w naszej próbce ( ), a AUCPR dla „doskonałego klasyfikatora” jest w przybliżeniu równy .q = 0,20 P.q=0.50q=0.20 1≈0,401PN1≈0.401
Realistycznie wykres PR idealnego klasyfikatora jest nieco bezużyteczny, ponieważ nie można nigdy odwołać (nigdy nie przewidujemy tylko klasy ujemnej); po prostu zaczynamy rysować linię od lewego górnego rogu zgodnie z konwencją. Ściśle mówiąc, powinno to po prostu pokazywać dwa punkty, ale byłby to okropny zakręt. :RE0
Dla przypomnienia, w CV jest już bardzo dobra odpowiedź dotycząca użyteczności krzywych PR: tutaj , tutaj i tutaj . Dokładne ich przeczytanie powinno zapewnić ogólne zrozumienie krzywych PR.