Pomiar dokładności modelu opartego na regresji logistycznej

26

Mam wyszkolony model regresji logistycznej, który stosuję do testowanego zestawu danych. Zmienna zależna jest binarna (boolean). Dla każdej próbki w zestawie danych testowych stosuję model regresji logistycznej, aby wygenerować% prawdopodobieństwa, że ​​zmienna zależna będzie prawdziwa. Następnie rejestruję, czy wartość rzeczywista była prawdziwa, czy fałszywa. Ja próbuje obliczyć lub regulowane R 2 postać jak w modelu regresji liniowej.R2R2

To daje mi zapis dla każdej próbki w zestawie testowym, taki jak:

prob_value_is_true         acutal_value
   .34                          0
   .45                          1
   .11                          0
   .84                          0
    ....                        ....          

Zastanawiam się, jak przetestować dokładność modelu. Moja pierwsza próba polegała na użyciu tabeli awaryjnej i powiedzeniu „jeśli prob_value_is_true> 0,80, zgadnij, że rzeczywista wartość jest prawdziwa”, a następnie zmierz stosunek poprawności do niepoprawnej klasyfikacji. Ale to mi się nie podoba, ponieważ wydaje mi się, że oceniam 0,80 jako granicę, a nie dokładność modelu jako całości i wszystkich prob_value_is_truewartości.

Następnie próbowałem po prostu spojrzeć na każdą dyskretną wartość prob_value_is_true, na przykład, patrząc na wszystkie próbki, gdzie prob_value_is_true= 0,34 i mierząc% tych próbek, w których wartość ostra jest prawdziwa (w tym przypadku idealna dokładność byłaby, gdyby% próbek to prawda = 34%). Mógłbym stworzyć wynik dokładności modelu, sumując różnicę przy każdej dyskretnej wartościprob_value_is_true . Ale rozmiary próbek są tutaj dużym problemem, szczególnie w skrajnościach (bliskie 0% lub 100%), tak że średnie wartości rzeczywistych nie są dokładne, więc użycie ich do pomiaru dokładności modelu nie wydaje się właściwe.

Próbowałem nawet tworzyć ogromne zakresy, aby zapewnić wystarczające rozmiary próbek (0 -25, 0,5 -50, 0,5 -5,75, 0,75-1,0), ale jak zmierzyć „dobroć” tego% wartości rzeczywistej zaskakuje mnie . Powiedzmy, że wszystkie próbki, których wartość prob_value_is_truewynosi od 0,25 do 0,50, mają średnio acutal_value0,45. Czy to dobrze, skoro jest w zasięgu? Źle, ponieważ nie jest to blisko 37,5% (środek zakresu)?

Więc utknąłem na czymś, co wydaje się być łatwym pytaniem, i mam nadzieję, że ktoś może skierować mnie do zasobu lub metody obliczenia dokładności stastycznej dla modelu regresji logistycznej.

John Reed
źródło
Myślę, że przykłady zakresów: (0-.25, .25-.50, .50-.75, .75-1,0) mają sens. Czy przydałoby się zawęzić zakresy? Takich jak: 0 -0,03, 0,03-0,06, 0,06-0,09, ..... tj. Co 0,03. Może to być przydatne w regionach z wieloma punktami danych.
Mac

Odpowiedzi:

18

Miarą często używaną do walidacji regresji logistycznej jest AUC krzywej ROC (wykres wrażliwości względem 1-specyficzności - wystarczy wyszukać go w razie potrzeby). To w istocie ocenia cały zakres wartości progowych.

Wadą: ocena całego zakresu wartości progowych może nie być tym, czego szukasz, ponieważ (zwykle) obejmuje progi, które powodują bardzo dużą liczbę fałszywych negatywów lub fałszywych wyników dodatnich. Istnieją wersje AUC, które to uwzględniają (częściowe AUC), więc jeśli jest to dla ciebie problem, możesz to sprawdzić.

Nick Sabbe
źródło
1
Odkładając na chwilę wartość AUC, czy mam rację, zakładając, że konstrukcja krzywej ROC jest podobna? Dla każdej dyskretnej wartości prob_value_is_true utwórz jedną tabelę kontyngencji, używając wartości dyskretnej jako progu. Następnie zapisz Prawdziwy wskaźnik dodatni i Fałszywy wskaźnik dodatni dla każdej tabeli awaryjnej. Narysuj stawki dla wszystkich tabel nieprzewidzianych na wykresie rozrzutu i powinieneś zobaczyć krzywą ROC? Czy to brzmi dobrze?
John Reed,
Złożyłem trochę kodu, aby to zrobić, po prostu wprowadzając losowe wartości jako prawdopodobieństwo i rzeczywistą wartość, i była to linia prosta. Zakładam, że AUC mierzy odchylenie „krzywej” od dopasowanego modelu ponownie względem „linii” lub losowości?
John Reed,
Jeśli chodzi o ROC: tak, to prawda. Istnieje kilka wariantów (mniej lub bardziej wygładzonych; biorąc pod uwagę prawdopodobieństwa przewidywane dla wybranego progu lub nie). Zauważ, że (w zależności od używanego oprogramowania / wybranego języka) istnieje mnóstwo narzędzi, które już to oferują. Wrt AUC: nie jest większy ani mniejszy niż rzeczywisty obszar pod krzywą ROC. Nie z doskonałym predyktorem losowym, krzywa ROC byłaby linią prostą od (0,0) do (1,1), co dawałoby AUC 0,5. AUC ma jednak kilka fajnych interpretacji (patrz Google lub Wikipedia nawet :-))
Nick Sabbe
8

Masz rację, martwiąc się o proporcję sklasyfikowaną jako poprawną, która odzwierciedla głównie wpływ arbitralnej granicy. Poleciłbym dwa środki. Jednym z nich jest obszar -index lub ROC, jak opisali inni. Ta interpretacja jest prostsza niż myślenie o krzywej ROC i jest miarą czystej dyskryminacji predykcyjnej. Po drugie, oszacuj krzywą ciągłej kalibracji bez łączenia danych. Jeśli prognozy są oceniane na niezależnym zbiorze danych, można użyć z wyłączonym wykrywaniem wartości odstających, aby oszacować związek między przewidywanym a rzeczywistym Prob [Y = 1]. Funkcja w R pakietu będzie zrobić obie te rzeczy. Inne funkcje wclowessval.probrmsrms zrobi to samo w przypadku wewnętrznej weryfikacji, wykorzystując ponowne próbkowanie w celu usunięcia skutków nadmiernego dopasowania.

Frank Harrell
źródło
6

xx=10x=20x=30mean(y[x==10]==1)mean(y[x==20]==1)xzmienna, jak sugerujesz. Nie jest to w pełni poprawne, ponieważ będzie zależeć od wyboru pojemników, może być przydatne jako sposób na zbadanie twojego modelu.

Zasadniczo zadanie, które tu sobie postawiłeś, jest trudne. Jest tak, ponieważ przy regresji logistycznej mamy do czynienia z dwoma różnymi rodzajami rzeczy. Prognozy modelu są zmienną utajoną, podczas gdy twoja obserwowana zmienna odpowiedzi (choć prawdopodobnie generowana przez zmienną utajoną) nie jest. Oczywiście ludzie często chcą wiedzieć, jaka jest przewidywana reakcja, i to jest całkowicie rozsądne; to tylko jeden z tych przypadków, w których życie jest niesprawiedliwe.

y=1y^.5y=1y^p(y=1)y^=.31y1<.5

(0,1)R2R2c , synonim) jest prawdopodobnie najlepszym sposobem, aby myśleć o tym problemie.

gung - Przywróć Monikę
źródło
Świetna odpowiedź! Zatem w przykładzie, że 30% wszystkich przypadków to 1, przewidywane prawdopodobieństwo 0,31 konkretnego przypadku jest jak „ranking” tego przypadku w stosunku do innych przypadków na temat tego, jak blisko jest 1 (im większy, tym bliższy)? I nie należy tego postrzegać jako przewidywanego prawdopodobieństwa, że ​​ten konkretny przypadek wynosi 1?
Mac
1
y^i=.311.31.31.25
3

Myślę, że możesz ustalić próg (powiedzmy 0,5), więc jeśli twoje prawdopodobieństwo jest równe lub większe od tego progu, przewidywana klasa wyniesie 1, a w przeciwnym razie 0. Następnie możesz uzyskać miarę dokładności w następujący sposób:

confusion_matrix <- ftable(actual_value, predicted_value)
accuracy <- sum(diag(confusion_matrix))/number of events*100

Biorąc pod uwagę, że prawdopodobieństwo jest podane przez dane (x) i przy użyciu modelu wartość twojej klasy (y) wynosi 1, nie rozumiem, dlaczego zawsze otrzymujesz wartości prawdopodobieństwa mniejsze niż 0,5. Jaka jest częstotliwość twoich rzeczywistych klas (wartość_ rzeczywista)?

Manuel Ramón
źródło
2

Możesz zajrzeć do mojej paczki softclassval rzucić (na softclassval.r-forge.r-project.org znajdziesz również dwie prezentacje ustne, które przedstawiłem na temat pomysłów za pakietem).

Napisałem to dla nieco innego problemu, mianowicie jeśli referencja (np. Patolog) „odmawia” podania jasnej klasy. Można go jednak używać z „normalnymi” klasami twardymi i pozwala to uniknąć definicji progu dla zaostrzenia pierwotnie ciągłej prognozy - więc nie oceniasz wartości 0,8.

Polecam jednak używać go razem z, powiedzmy, ROC lub diagramem czułości specyficzności: wyniki często wyglądają dość źle, ponieważ „moje” metody będą karać już niewielkie odchylenia (np. 0,9 zamiast 1 daje 0,1 różnicy dla moich miar , ale wszystkie progi poniżej 0,9 to zignorują). Właściwie uważam, że jest to raczej zaleta: brak tej wrażliwości w stosunku do niewielkich odchyleń jest jednym z głównych punktów krytyki w przypadku tych „zahartowanych” miar, takich jak dokładność, wrażliwość, przypominanie itp.

Ponadto, porównując średni błąd bezwzględny (MAE) i średni błąd kwadratowy RMSE, możesz dowiedzieć się, czy masz wiele małych odchyleń czy mniej rażąco błędnych próbek.

cbeleites obsługuje Monikę
źródło
1

P.rja=janvlosoljat(za+bxja)

y.rep[i]Bernoulli(p[i])

Następnie uruchom tę symulację, powiedzmy 100 razy. Otrzymasz macierz z n rzędami (n to liczba podmiotów) ik kolumnami (w tym przypadku k = 100, liczba symulacji). Kod R:

for (j  in 1:100)
  mat.y.rep[,j] <- Bernoulli ( p) # p is a vector with a probability for each subject

Teraz obliczasz różnicę między przewidywaną w każdej symulacji a obserwowaną. Po obliczeniu tej różnicy wystarczy obliczyć średnią liczbę prawdziwie dodatnich i fałszywie dodatnich dla każdego wiersza (każdego pacjenta) i wykreślić histogram. Lub obliczyć oba dla każdej kolumny (symulacja) e wykreślić histogram (wolę to).

Mam nadzieję, że to pomoże...

Manoel Galdino
źródło
1

Istnieje wiele sposobów na oszacowanie dokładności takich prognoz, a optymalny wybór naprawdę zależy od tego, dla czego zastosowana zostanie estymacja.

Na przykład, jeśli planujesz wybrać kilka wyników o wysokim wyniku dla drogiego badania uzupełniającego, możesz chcieć zmaksymalizować precyzję przy wysokich wynikach. Z drugiej strony, jeśli badanie uzupełniające jest tanie, możesz chcieć zmaksymalizować przywołanie (czułość) przy niższych wynikach. ROC AUC może być odpowiedni, jeśli porównujesz inną metodę itp.

Od strony praktycznej, Rjest ROCRpakiet zawiera 2 użytecznych funkcji

pred.obj <- prediction(predictions, labels,...)
performance(pred.obj, measure, ...)

Razem te funkcje mogą obliczyć szeroki zakres miar dokładności, w tym globalne wartości skalarne (takie jak „auc” ) i wektory zależne od wyniku do wykreślania krzywych Precyzja przywołania i ROC ( „przed” , „rec” , „tpr” i „fpr” itp.)

Itamar
źródło
1

Musisz zdefiniować, co rozumiesz przez „dokładność”. To, co chciałbyś wiedzieć, proszę o wybaczenie za umieszczenie słów w ustach, to, jak dobrze twój model pasuje do danych treningowych, a co ważniejsze, jak dobrze ten model „uogólnia” na próbki nie zawarte w twoich danych treningowych. Chociaż krzywe ROC mogą być przydatne w analizie kompromisu między precyzją a przywołaniem dla różnych wartości progu, sugeruję dodanie błędu średniej kwadratowej lub wyniku Briera do zestawu narzędzi. Jest łatwy do obliczenia i od razu można sprawdzić, czy zmiany funkcji wpływają na dopasowanie modelu, gdy zastosuje się go do danych treningowych. Ponieważ w tym przypadku możliwy jest overfit, twoja praca nie jest tu wykonana. Aby ocenić wydajność uogólnienia lub jak dobrze radzisz sobie z danymi, których nie widziałeś, nie jest to wystarczy spojrzeć na swoje wyniki na próbkach treningowych. Oczywiście twój model jest w nich dobry, ponieważ są to wartości użyte do określenia współczynników dla twojej logistyki. Musisz odłożyć na bok niektóre próbki danych testowych. Wydajność MSE w tym zestawie powinna określać oczekiwania dotyczące uogólnienia zgodnie z nierównością Hoeffdinga. Twój maksymalny błąd uogólnienia będzie zależeć od liczby funkcji w twoim modelu, a także od liczby próbek użytych do obliczenia statystyki testu. Pamiętaj, że będziesz musiał ukraść niektóre próbki treningowe do próbek testowych. Polecam 10-krotną walidację krzyżową, w której tasujesz, wybieraj 90% na trening, 10% na testowanie, a następnie zmierz, powtórz, a następnie uśrednij wszystkie pomiary. ponieważ są to wartości użyte do określenia współczynników dla logistyki. Musisz odłożyć na bok niektóre próbki danych testowych. Wydajność MSE w tym zestawie powinna określać oczekiwania dotyczące uogólnienia zgodnie z nierównością Hoeffdinga. Twój maksymalny błąd uogólnienia będzie zależeć od liczby funkcji w twoim modelu, a także od liczby próbek użytych do obliczenia statystyki testu. Pamiętaj, że będziesz musiał ukraść niektóre próbki treningowe do próbek testowych. Polecam 10-krotną walidację krzyżową, w której tasujesz, wybieraj 90% na trening, 10% na testowanie, a następnie zmierz, powtórz, a następnie uśrednij wszystkie pomiary. ponieważ są to wartości użyte do określenia współczynników dla logistyki. Musisz odłożyć na bok niektóre próbki danych testowych. Wydajność MSE w tym zestawie powinna określać oczekiwania dotyczące uogólnienia zgodnie z nierównością Hoeffdinga. Twój maksymalny błąd uogólnienia będzie zależeć od liczby funkcji w twoim modelu, a także od liczby próbek użytych do obliczenia statystyki testu. Pamiętaj, że będziesz musiał ukraść niektóre próbki treningowe do próbek testowych. Polecam 10-krotną walidację krzyżową, w której tasujesz, wybieraj 90% na trening, 10% na testowanie, a następnie zmierz, powtórz, a następnie uśrednij wszystkie pomiary. Wydajność MSE w tym zestawie powinna określać oczekiwania dotyczące uogólnienia zgodnie z nierównością Hoeffdinga. Twój maksymalny błąd uogólnienia będzie zależeć od liczby funkcji w twoim modelu, a także od liczby próbek użytych do obliczenia statystyki testu. Pamiętaj, że będziesz musiał ukraść niektóre próbki treningowe do próbek testowych. Polecam 10-krotną walidację krzyżową, w której tasujesz, wybieraj 90% na trening, 10% na testowanie, a następnie zmierz, powtórz, a następnie uśrednij wszystkie pomiary. Wydajność MSE w tym zestawie powinna określać oczekiwania dotyczące uogólnienia zgodnie z nierównością Hoeffdinga. Twój maksymalny błąd uogólnienia będzie zależeć od liczby funkcji w twoim modelu, a także od liczby próbek użytych do obliczenia statystyki testu. Pamiętaj, że będziesz musiał ukraść niektóre próbki treningowe do próbek testowych. Polecam 10-krotną walidację krzyżową, w której tasujesz, wybieraj 90% na trening, 10% na testowanie, a następnie zmierz, powtórz, a następnie uśrednij wszystkie pomiary.

KPickrell
źródło
1

Zastanawiam się, dlaczego nie używasz funkcji wiarygodności dziennika bernoulli. Zasadniczo dla każdego0 faktyczna wartość, którą zdobędziesz -log(1-p^). Mierzy to, jak blisko przewidywania0twój model to. Podobnie dla każdego1 faktyczna wartość, którą zdobędziesz -log(p^). Mierzy to, jak blisko przewidywania1 twój model to.

Nie dotyczy to arbitralnych progów. Im mniejsza miara, tym lepiej.

prawdopodobieństwo prawdopodobieństwa
źródło