Regresja logistyczna

  • 0 Odpowiedzi
  • 732 Wyświetleń
*

artuditu

  • Nowy użytkownik
  • *
  • 10
    • Zobacz profil
Regresja logistyczna
« dnia: Listopad 15, 2017, 12:06:36 pm »
Postanowiłem napisać trochę o metodzie klasyfikacji jaką jest regresja logistyczna.

Na czym ona polega i kiedy ją stosujemy?
Jest to metoda z nadzorem albo tak zwanym nauczycielem. Stosujemy ją w momencie, gdy chcemy zaklasyfikować daną cechę do jednej z dwóch grup, które na ogół nazywamy sukcesem i porażką. Zwyczajowo sukces oznaczamy jako "1", a porażkę jako "0". Wynika z tego, że rozkład prawdopodobieństwa tej cechy(nazwijmy ją cechą Y) jest dwupunktowy:
\[ P(Y=1) = p \]
\[ P(Y=0) = 1 - p \]
Inaczej można to zapisać w postaci:
\[ P(Y=y) = p^y (1 - p)^{1-y} \]
Gdzie \( y\in \{0,1\} \), a p należy do przedziału (0,1). Jak widać jest to dosyć intuicyjne. Jest to jeden z modeli liniowych, a więc zależności innych cech do naszej cechy Y też będą liniowe. Przy czym nie będziemy modelować prawdopodobieństwa, a jedynie tzw. log-szansę.

Log-szansa
Szansa jest to po prostu stosunek prawdopodobieństwa sukcesu do porażki, czyli \( \frac{p}{1-p} \). Natomiast log-szansa jest to funkcja logarytmu z tej funkcji, czyli \( \log(\frac{p}{1-p}) \), w związku z tym, że jest to zależność liniowa, więc nasza funkcja przyjmuje postać:
\[ \log(\frac{p}{1-p}) = a_0 + a_1x_1 \]
W powyższym przypadku cecha Y zależy tylko od jednej cechy \( x_1 \) - uogólnienie na większą ich ilość jest oczywiste:
\[ \log(\frac{p}{1-p}) = a_0 + \sum_{i=1}^na_ix_i \]
Powyższą równość można w oczywisty sposób przekształcić, aby zobaczyć postać \( p \):
\[ p = \frac{\exp(a_0 + \sum_{i=1}^na_ix_i)}{1 + \exp(a_0 + \sum_{i=1}^na_ix_i)} \]
Ze względu na to, że planowałem głównie przedstawić na czym polega nasza metoda celowo pominę dokładny algorytm obliczania parametrów modelu.

Zbiór testowy i zbiór uczący
Aby nauczyć nasz model, przetestować go, a następnie móc z powodzeniem klasyfikować nowe dane należy najpierw dane, którymi dysponujemy podzielić na dwa zbiory: uczący i testowy. Zbiór uczący powinien być większy(np. stanowić losowe 70-90% zbioru danych), a testowy powinien zawierać pozostałe dane. Mamy dane uczące - pewna ilość wektorów - każdy z nich ma postać: \( (Y,x_1,...,x_n) \) i na ich podstawie "uczymy model", to znaczy dobieramy optymalne parametry - w naszym przypadku jest to \( a_i \). Następnie na ich podstawie testujemy model - sprawdzamy czy dobrze dobraliśmy parametry \( a_i \) na zbiorze testowym. Jeśli nasz model na zbiorze testowym i uczącym myli się "dosyć rzadko" to znaczy, że możemy stosować go w praktyce do nowych danych. Pomijam dokładny opis zarówno testowania modelu jak i tego co znaczy, że model rzadko się myli - oba te zagadnienia(zresztą tak jak sama regresja) zasługują na dużo szerszy opis niż pojedynczy post.

Jak to zaprogramować?
Regresje logistyczną w R można zaprogramować używając funkcji glm i opcji binomial albo jej modyfikację, czyli funkcję glmnet z biblioteki o tej samej nazwie. W Pythonie z kolei możemy użyć paczki scikit-learn.
« Ostatnia zmiana: Listopad 16, 2017, 01:10:37 am wysłana przez Admin »