Regresja liniowa i logistyczna od podstaw

anatomia

Uczenie maszynowe w swoich najgłębszych fundamentach opiera się na matematycznej optymalizacji, a najpopularniejszym punktem wyjścia do zrozumienia tych skomplikowanych mechanizmów są algorytmy regresji liniowej oraz regresji logistycznej. Modele te stanowią absolutną bazę dla bardziej zaawansowanych architektur, w tym sztucznych sieci neuronowych, pozwalając na dogłębne zrozumienie propagacji błędów i w pełni świadomą aktualizację wag w procesach iteracyjnych. Poznanie ich mechaniki od podstaw ułatwia radzenie sobie z wieloma wyzwaniami numerycznymi, a także pozwala na optymalne budowanie i strojenie rozwiązań z zakresu zaawansowanej analityki danych.

Modele regresyjne uczą nas, że uczenie maszynowe to w rzeczywistości rozwiązywanie wielowymiarowych problemów optymalizacyjnych, gdzie kluczem jest odpowiednie zdefiniowanie metryki błędu.

Formalna definicja regresji liniowej

Regresja liniowa to w swojej istocie model parametryczny, którego głównym zadaniem jest modelowanie zależności między zmienną objaśnianą (zależną) a jednym lub wieloma predyktorami (zmiennymi niezależnymi). Celem algorytmu jest przewidywanie ciągłej wartości na podstawie dostarczonego wektora cech. Formalnie, dla pojedynczej obserwacji reprezentowanej jako wektor cech x = [x_1, x_2, \dots, x_n]^T oraz dopasowanego do niej wektora wag (parametrów modelu) \theta = [\theta_0, \theta_1, \dots, \theta_n]^T, hipotezę matematyczną modelu definiujemy jako ich kombinację liniową.

Aby ułatwić obliczenia macierzowe w fazie implementacji, do wektora cech dodaje się zazwyczaj sztuczną stałą wartość x_0 = 1, co pozwala na płynne włączenie wyrazu wolnego (ang. bias) bezpośrednio do standardowego iloczynu skalarnego. Zatem model regresji liniowej przyjmuje zwartą postać:

h_\theta(x) = \theta^T x

W uogólnionym zapisie macierzowym, obejmującym cały dostępny zbiór danych treningowych składający się z m przykładów uczących, macierz cech X przyjmuje wymiary m \times (n+1). Równanie predykcji upraszcza się wówczas do pojedynczej operacji mnożenia macierzy: \hat{y} = X\theta. W wyniku tej operacji uzyskujemy jednowymiarowy wektor kolumnowy przewidywanych wartości dla wszystkich próbek w systemie. Nadrzędnym zadaniem algorytmu uczącego jest analityczne lub iteracyjne znalezienie takiego optymalnego wektora parametrów \theta, który w najwyższym możliwym stopniu zminimalizuje rozbieżności pomiędzy predykcjami a rzeczywistymi etykietami zapisanymi w wektorze y.

Wyprowadzenie funkcji kosztu (MSE)

Aby obiektywnie ocenić jakość dopasowania modelu w konkretnym punkcie przestrzeni parametrów, definiuje się tzw. funkcję kosztu (zwaną również funkcją straty). W przypadku regresji liniowej powszechnym, matematycznie eleganckim standardem jest błąd średniokwadratowy, znany szerzej pod akronimem MSE (Mean Squared Error). Dla m niezależnych przykładów uczących, funkcja kosztu J(\theta) jest zdefiniowana w następujący sposób:

J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2

Charakterystyczny ułamek zawierający dwójkę w mianowniku wprowadzany jest tu wyłącznie dla późniejszej wygody analitycznej. Podczas obliczania pochodnej wielomianu drugiego stopnia, z reguły łańcuchowej wyciągnięta zostanie potęga, która idealnie skróci się z owym ułamkiem, co znacząco upraszcza końcowy wzór gradientu. Ponieważ funkcja kwadratowa opisująca błąd formuje w przestrzeni wielowymiarowej wypukłą paraboloidę, model posiada gwarancję istnienia dokładnie jednego, globalnego minimum. Ułatwia to bezproblemową zbieżność metod iteracyjnych.

Obliczanie gradientu względem parametrów

W celu optymalizacji opisanej wyżej funkcji algorytmem spadku wzdłuż gradientu (Gradient Descent), niezbędne jest precyzyjne obliczenie wektora gradientu funkcji kosztu względem wag \theta. Gradient to wektor pochodnych cząstkowych, który wyznacza w przestrzeni kierunek najszybszego wzrostu funkcji. Pochodna cząstkowa dla wybranego, pojedynczego parametru \theta_j przedstawia się jako:

\frac{\partial}{\partial \theta_j} J(\theta) = \frac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) x_j^{(i)}

Taki zapis, choć intuicyjny i doskonały do implementacji prostej pętli programistycznej po poszczególnych cechach, jest wysoce nieefektywny w środowiskach do przetwarzania dużych wolumenów danych. W postaci macierzowej, krytycznej z punktu widzenia paralelizacji obliczeń w językach wektoryzowanych takich jak Python (np. we frameworkach bazujących na tablicach wielowymiarowych), ten sam gradient zapisuje się w zwięzłej formie iloczynu macierzy przez wektor:

\nabla_\theta J(\theta) = \frac{1}{m} X^T (X\theta - y)

Regresja logistyczna jako algorytm klasyfikacyjny

Pomimo historycznej nazwy wskazującej na modelowanie ciągłe, regresja logistyczna jest potężnym algorytmem wykorzystywanym wyłącznie do zadań klasyfikacji (najczęściej binarnej). Zastosowanie wprost modelu liniowego do przewidywania przynależności do klas napotyka poważny problem: przewidywane wartości często wykraczają drastycznie poza logiczny przedział [0, 1], przez co tracą jakąkolwiek sensowną interpretację jako prawdopodobieństwo. Technicznym rozwiązaniem tego problemu jest dodanie etapu transformacji, czyli przepuszczenie wyjścia modelu liniowego przez nieliniową funkcję aktywacji – funkcję sigmoidalną.

Funkcja logistyczna (sigmoida) ma charakterystyczny kształt litery S i jest formalnie definiowana równaniem:

\sigma(z) = \frac{1}{1 + e^{-z}}

Kiedy w miejscu argumentu z podstawimy nasz zdefiniowany wcześniej model liniowy, otrzymujemy ulepszoną hipotezę:

h_\theta(x) = \frac{1}{1 + e^{-\theta^T x}}

Wynik zwracany przez to zmodyfikowane równanie bezpiecznie asymptotycznie dąży do zera dla wartości skrajnie ujemnych i do jedynki dla wartości skrajnie dodatnich. Od teraz traktuje się go z pełnym przekonaniem jako warunkowe prawdopodobieństwo przynależności badanej wektorowej próbki cech do klasy pozytywnej: P(y=1 | x; \theta).

Funkcja kosztu: Entropia krzyżowa (Cross-Entropy)

Próba zastosowania poznanego wcześniej błędu średniokwadratowego (MSE) z uwzględnieniem równania nieliniowej funkcji sigmoidalnej rodzi poważny matematyczny problem. Generuje funkcję kosztu, która traci pożądaną właściwość wypukłości. Taka pofalowana struktura obfituje w minima lokalne, przez co optymalizator bazujący na gradiencie bardzo szybko ugrzązłby w suboptymalnym zagłębieniu. Z tego powodu w przypadku klasyfikacji optymalizuje się funkcję entropii krzyżowej (Log-Loss):

J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right]

Logarytmiczna natura tej miary błędu sprawia, że jest ona rygorystycznie wypukła. Co więcej, entropia krzyżowa niezwykle silnie karze estymator za wysoką pewność przy błędnej ostatecznej decyzji. Jeżeli rzeczywista kategoria próbki to y=1, a funkcja decyzyjna zwróci wartość bliską absolutnemu zeru, algorytm musi wyliczyć logarytm liczby bliskiej zera. Wartość ta zmierza logarytmicznie w stronę ujemnej nieskończoności, przez co kara w postaci funkcji kosztu wybucha do niewyobrażalnych rozmiarów. Wymusza to na algorytmie szybką zmianę parametrów w przeciwnym kierunku.

Interpretacja współczynników i mechanizm Log-Odds

Praktyczne wdrażanie modeli analitycznych wymaga umiejętności ich poprawnej interpretacji. W liniowej wersji, wyliczony współczynnik \theta_j oznacza zmianę wartości prognozowanej dokładnie o wartość \theta_j przy jednostkowym skoku odpowiedniej cechy x_j. W algorytmach logistycznych nieliniowość mocno zaburza tę prostą i intuicyjną zależność. Można jednak uciec się do linearyzacji i skorzystać z pojęcia logarytmu z szans, znanego szerzej jako log-odds. Sama „szansa” to klasyczny stosunek prawdopodobieństwa odniesienia sukcesu do prawdopodobieństwa jego braku, wyrażany wzorem \frac{p}{1-p}.

Przekształcając odwrotnie bazowe równanie probabilistyczne logistyczne, wyprowadzamy transformację zwaną logitem:

\ln\left(\frac{p}{1-p}\right) = \theta^T x

W świetle powyższej definicji interpretacja staje się bardziej przejrzysta. Mianowicie: przyrost wartości atrybutu x_j o jedną jednostkę skutkuje linearną zmianą logarytmu wyliczonej szansy precyzyjnie o współczynnik wagi \theta_j. Gdy obłożymy to potęgowaniem na bazie liczby Eulera, wyrażenie e^{\theta_j} komunikuje wprost, jako bezpośredni mnożnik, o ile razy powiększą się nominalne szanse zaklasyfikowania rekordu do klasy pozytywnej.

Implementacja krok po kroku: od formuły do pętli optymalizującej

Proces implementacji uczenia regresji sprowadza się do poprawnego zainicjalizowania puli losowych wektorów wag (najczęściej rozkładem jednostajnym bliskim zera lub samym wektorem zerowym) oraz ich iteracyjnego aktualizowania. Co interesujące, zasada uaktualniania parametrów pozostaje algebraicznie w pełni identyczna dla regresji liniowej i jej odpowiednika logistycznego. Wyróżnia je wyłącznie bazowa definicja formacji hipotezy zagnieżdżonej w predyktorze.

Równanie aktualizujące dla założonej stałej tempa uczenia się (learning rate), oznaczanej parametrem \alpha, realizowane jest według formuły:

\theta := \theta - \alpha \nabla_\theta J(\theta)

W wydajnej implementacji w wektoryzowanym języku skryptowym, rdzeń całego iteracyjnego uczenia ogranicza się do zwięzłej pętli realizującej sekwencyjne kroki w epokach:

  • Obliczenie pełnej macierzy predykcji wykorzystując mnożenie macierzy i opcjonalne przejście przez nieliniową sigmoidę.
  • Ewaluacja globalnego błędu rezydualnego, jako macierzowa różnica pomiędzy estymatorami a wartościami docelowymi zbioru uczącego.
  • Projekcja uchybu na atrybuty, czyli wyliczenie gradientu uśrednionego po wszystkich instancjach za pomocą transponowanej macierzy i operacji dot-product.
  • Korekcja wag poprzez odjęcie od bieżących parametrów przeskalowanego stałą \alpha gradientu.

Dyskusja o zbieżności i typowych problemach numerycznych

Odpowiednia stabilność zbieżności algorytmu wyliczającego bezpośrednio zależy od właściwej ewaluacji współczynnika uczenia się \alpha. Parametr skonfigurowany przesadnie zachowawczo (wartość bardzo bliska zeru) spowolni uczenie do punktu praktycznej nieakceptowalności. Natomiast krok zbyt agresywny skutkuje drastycznymi fluktuacjami trajektorii funkcji w pobliżu docelowego minimum, a bardzo często całkowitym przestrzeleniem celu i dywergencją (tzw. wybuchem błędu). Przed optymalizacją niezmiernie krytyczna jest uprzednia standaryzacja rozkładów zmiennych objaśniających, zapewniająca zbliżone skale danych, dzięki czemu algorytmy minimalizują koszt operacyjny, omijając wąskie topologicznie gradientowe doliny.

Przy samodzielnym programowaniu logiki logistycznej napotyka się również na pułapki numeryczne związane z jednostką arytmetyczną zmiennoprzecinkową. Podczas przeliczania wartości w wykładniku potęgi -z dla wielkich liczb ujemnych, algorytm może zaraportować defekt przekroczenia dopuszczalnego rozmiaru reprezentacji zmiennej (ang. numerical overflow). W kodach produkcyjnych zapobiega się temu, wprowadzając sztywne ograniczenia zakresowe na wyjście macierzowe (ang. clipping). Niemniej groźne jest liczenie logarytmów na styku wartości skrajnych prawdopodobieństw – kiedy model przewidzi rygorystyczne zero dla błędnej kategorii, logarytm spróbuje przetworzyć matematyczną niemożliwość (\log(0)), dając krytyczny błąd wartości nieokreślonych. Obejście polega na celowym wstrzykiwaniu bliskich zera wartości typu epsilon (\epsilon) w korpusie samej funkcji kosztowej.

Praktyczne zastosowania w inżynierii danych

Omawiana teoria stanowi merytoryczne fundamenty rygorystycznej analityki spotykanej na co dzień w produkcyjnych potokach danych. W modelowaniu ciągłych wolumenów sprzedaży czy wycenie portfeli rynkowych dominuje implementacja zwykłej i wielorakiej formuły liniowej, odpowiadająca na bezpośrednie zapytania ilościowe. Z kolei systemy filtrujące ruch sieciowy, oceniające zdolność kredytową klientów (Credit Scoring) czy też predyktory retencji subskrybentów oparte są w głównym pniu logicznym o wdrożenia modułów logistycznych.

Porównanie techniczne modeli

Poniższa tabela stanowi merytoryczne zestawienie rozpatrwanych koncepcji na płaszczyźnie algorytmicznej i analitycznej.

CharakterystykaRegresja LiniowaRegresja Logistyczna
Rodzaj wyjściowego wektoraWartości rzeczywiste, bez ograniczeń zakresuDyskretne zbiory prawdopodobieństw w przedziale [0, 1]
Główne zastosowanie dziedzinoweZadania ciągłej regresji trendówBinarne i wieloklasowe zadania klasyfikacji
Dominująca miara błęduBłąd średniokwadratowy (MSE)Wypukła binarna entropia krzyżowa (Log-Loss)
Wpływ wag predykcjiLiniowy we współczynniku kierunkowymPrzeliczalny i wykładniczy na bazie log-oddsów

Źródła

🧠 Utrwal wiedzę z tego artykułu!

Kliknij pojęcie, by przypomnieć sobie definicję.

Funkcja Sigmoidalna (Sigmoid)
?
Funkcja sigmoidalna to matematyczna funkcja o charakterystycznym kształcie litery S, która przekształca dowolne wartości rzeczywiste na przedział od 0 do...
Czytaj pełną definicję
Cecha (zmienna niezależna) (Feature)
?
Cecha, znana również jako zmienna niezależna, to mierzalna właściwość lub charakterystyka obserwowanego zjawiska wykorzystywana jako dane wejściowe w modelu uczenia...
Czytaj pełną definicję
Logarytm Szans (Log-Odds)
?
Logarytm szans (log-odds) to logarytm naturalny z ilorazu prawdopodobieństwa sukcesu do prawdopodobieństwa niepowodzenia danego zdarzenia. W regresji logistycznej służy on...
Czytaj pełną definicję
Epoka (iteracja nad całym zbiorem uczącym) (Epoch)
?
Epoka to jednokrotne przejście całego zbioru danych treningowych przez algorytm uczenia maszynowego. W trakcie tej iteracji model analizuje każdy przykład...
Czytaj pełną definicję
Parametr Modelu (np. wagi θ) (Parameter)
?
Parametr modelu to wewnętrzna zmienna, której wartość jest dopasowywana przez algorytm na podstawie dostarczonych danych treningowych. W modelach liniowych parametrami...
Czytaj pełną definicję
Wyraz Wolny (w modelach liniowych) (Bias)
?
Wyraz wolny, często nazywany biasem, to stała wartość w modelach liniowych reprezentująca punkt przecięcia prostej regresji z osią rzędnych. Określa...
Czytaj pełną definicję

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Powiązane posty

Zacznij wpisywać wyszukiwane hasło powyżej i naciśnij Enter, aby wyszukać. Naciśnij ESC, aby anulować.

Powrót do góry