Regresja liniowa

Regresja liniowa to jedna z najprostszych i najbardziej fundamentalnych technik w analizie statystycznej i uczeniu maszynowym. Jest to metoda wykorzystywana do modelowania relacji między zmienną zależną (odpowiedzią) a jedną lub więcej zmiennymi niezależnymi (cechami). Model regresji liniowej próbuje po prostu dopasować linię, która najlepiej opisuje zależność między zmiennymi.

Teoria

Matematycznie, można to zapisać jako:

y = \beta_0 + \beta_1 x

Gdzie:
* y to zmienna zależna,
* x to zmienna niezależna,
* \beta_0 to wyraz wolny,
* \beta_1 to współczynnik kierunkowy (pochodna).

Natomiast dla większej liczby zmiennych niezależnych:

y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_i x_i

Czyli, najprościej rzecz ujmując, szukamy takich wartości współczynników \beta, które pozwolą na rozwiązanie układu złożonego z powyższych równań, dla każdej z naszych obserwacji. Warto jednak zauważyć, że rozwiązanie analityczne układu równań dla dużego zbioru danych może być bardzo kosztowne obliczeniowo. Gdy metody analityczne zawiodą, z pomocą przychodzą metody iteracyjne, takie jak chociażby algorytm gradientu prostego, który to jest w stanie szybko poradzić sobie z dużymi zestawami danych i problemami współliniowości.

Sama metoda spadku gradientu to technika optymalizacyjna używana w uczeniu maszynowym i sztucznej inteligencji do minimalizacji funkcji kosztu. Zaczynamy od losowo wybranych początkowych wartości parametrów modelu. Następnie, iteracyjnie aktualizujemy te parametry, kierując się w stronę największego spadku funkcji kosztu (stąd nazwa “spadek gradientu”). Proces ten kontynuujemy, aż do osiągnięcia pewnego warunku stopu, na przykład do momentu, gdy różnica w wartościach funkcji kosztu między kolejnymi iteracjami stanie się wystarczająco mała. W kontekście regresji liniowej, funkcją kosztu jest zazwyczaj błąd kwadratowy, który chcemy zminimalizować. W każdej iteracji metody spadku gradientu, parametry modelu są aktualizowane w kierunku, który najbardziej redukuje ten błąd kwadratowy.

Przykład

Prześledźmy iteracyjne wyznaczenie współczynników \beta, minimalizując sumę kwadratów, na przykładzie zbioru pięciu mieszkań, kolejno o powierzchni i cenie, odpowiednio: 40m2 – 200 tys. zł, 60m2 – 280 tys. zł, 80m2 – 360 tys. zł, 100m2 – 440 tys. zł, 120m2 – 520 tys. zł.

Dane:

x = [40, 60, 80, 100, 120]
y = [200, 280, 360, 440, 520]
n = 5

Początkowe parametry:

\beta_0 = 0
\beta_1 = 0
Współczynnik uczenia: \alpha = 0.0001

Iteracja 1:

Obliczmy gradienty:

\frac{\partial J}{\partial \beta_0} = \frac{1}{n}\sum_{i=1}^{n} (\beta_0 + \beta_1 x^{(i)} – y^{(i)}) = -\frac{1}{5}(200 + 280 + 360 + 440 + 520) = -400

\frac{\partial J}{\partial \beta_1} = \frac{1}{n}\sum_{i=1}^{n} (\beta_0 + \beta_1 x^{(i)} – y^{(i)}) \cdot x^{(i)} = -\frac{1}{5}(200 * 40 + 280 * 60 + 360 * 80 + 440 * 100 + 520 * 120) = -32000

Zaktualizujmy parametry:

\beta_0 = \beta_0 – \alpha \cdot \frac{\partial J}{\partial \beta_0} = 0 – 0.0001 \cdot (-400) = 0.04

\beta_1 = \beta_1 – \alpha \cdot \frac{\partial J}{\partial \beta_1} = 0 – 0.0001 \cdot (-32000) = 3.2

Iteracja 2:

Jeszcze raz, analogicznie, obliczmy gradienty i zaktualizujmy parametry:

\frac{\partial J}{\partial \beta_0} = \frac{1}{n}\sum_{i=1}^{n} (\beta_0 + \beta_1 x^{(i)} – y^{(i)})

\frac{\partial J}{\partial \beta_0} = \frac{1}{5} ((0.04 + 3.2 * 40 – 200) + (0.04 + 3.2 * 60 – 280) + (0.04 + 3.2 * 80 – 360) + (0.04 + 3.2 * 100 – 440) + (0.04 + 3.2 * 120 – 520)) = -104


\frac{\partial J}{\partial \beta_1} = \frac{1}{n}\sum_{i=1}^{n} (\beta_0 + \beta_1 x^{(i)} – y^{(i)}) \cdot x^{(i)}

\frac{\partial J}{\partial \beta_1} = \frac{1}{5} ((0.04 + 3.2 * 40 – 200) * 40 + (0.04 + 3.2 * 60 – 280) * 60 + (0.04 + 3.2 * 80 – 360) * 80 + (0.04 + 3.2 * 100 – 440) * 100 + (0.04 + 3.2 * 120 – 520) * 120) = -9040


\beta_0 = \beta_0 – \alpha \cdot \frac{\partial J}{\partial \beta_0} = 0.04 – 0.0001 \cdot (-104) \approx 0.05

\beta_1 = \beta_1 – \alpha \cdot \frac{\partial J}{\partial \beta_1} = 3.2 – 0.0001 \cdot (-9040) \approx 4.10

Z każdą kolejną iteracją, wartości te powinny zbliżać się do optymalnych (\beta_0 = 40, \beta_1 = 4 ). Jeśli chcesz to sprawdzić samemu, przetestuj poniższy kod python:

import numpy as np

# Definicja danych
x = np.array([40, 60, 80, 100, 120])
y = np.array([200, 280, 360, 440, 520])

# Ustawienie wartości początkowych i współczynnika uczenia
b0 = 0.0
b1 = 0.0
alpha = 0.0001
n_iterations = 1000  # liczba iteracji

# Pętla iteracji
for iteration in range(n_iterations):
    # Obliczanie gradientów
    dJ_db0 = np.mean(b0 + b1*x - y)
    dJ_db1 = np.mean((b0 + b1*x - y) * x)

    # Aktualizacja parametrów
    b0 = b0 - alpha * dJ_db0
    b1 = b1 - alpha * dJ_db1

    # Wyświetlanie parametrów po każdej iteracji
    print(f"Iteration {iteration+1}: b0 = {b0}, b1 = {b1}")

Metoda spadku gradientu jest jednym z numerycznych sposobów rozwiązania problemu regresji liniowej. Wybrany przez nas współczynnik uczenia oraz liczba iteracji będą miały wpływ na tempo i dokładność zbieżności do optymalnego rozwiązania.

Zobacz także:

  • Piotr Szymański

    Kategoria:

    Hejka! Zapraszam na skrót z minionych dwóch tygodni, który przyswoić możecie przy ciepłej herbatce w te mroczne, szare dni. W opublikowanym przez Google 14 listopada ostrzeżeniu wskazano kilka najważniejszych rodzajów oszustw internetowych. Uwagę zwrócono między na niebezpieczne techniki ataków typu cloaking, które nabierają nowego wymiaru dzięki wykorzystaniu sztucznej inteligencji. Cloaking polega na ukrywaniu przed użytkownikiem […]
  • Piotr Szymański

    Kategoria:

    Hejka po dłuższej przerwie! Zaczynamy świeżym tematem. Raptem kilkanaście godzin temu do użytkowników trafiła, zapowiedziana 25 lipca, funkcja SearchGPT od OpenAI, umożliwiająca, w przeciwieństwie do tradycyjnych modeli językowych, na integrację z internetem w czasie rzeczywistym. SearchGPT ma dostęp do aktualnych informacji z sieci, co pozwala na udzielanie odpowiedzi opartych na najnowszych danych. Ponadto SearchGPT dostarcza […]
  • Piotr Szymański

    Kategoria:

    Hejson! Dzisiejsza konsumpcja mediów ma to do siebie, że odbywa się na 5-6 calowym ekranie telefonu. Ma też to do siebie, że zanim zdjęcie dotrze do Ciebie, to przejdzie przez 6 konwersacji na jedynym słusznym messengerze, zatem zostanie 6-cio krotnie skompresowane. W międzyczasie, jak będziecie mieli pecha, to jakiś wujek zrobi screena, zamiast zapisać zdjęcie […]
  • Piotr Szymański

    Kategoria:

    Hej! Robimy bardzo dużo zdjęć, a co za tym idzie – wiele z nich jest niechlujnych, z zabałagnionym tłem. Możemy jednak chcieć wykorzystać je do pochwalenia się naszym ryjkiem na jakimś publicznym profilu, gdyż np. naturalne, miękkie światło korzystnie eksponuje naszą facjatę. Podejścia mogą być dwa – albo zdecydujemy się na blur bądź zupełne usunięcie […]
  • Piotr Szymański

    Kategoria:

    Strzałeczka. Nvidia przejęła OctoAI, startup specjalizujący się w optymalizacji modeli uczenia maszynowego. To już piąta akwizycja Nvidii w 2024 roku, co czyni aktualnie nam panujący rok rekordowym pod względem liczby przejęć. OctoAI, założone w 2019 roku przez Luisa Ceze, skupiło się na tworzeniu oprogramowania zwiększającego wydajność modeli uczenia maszynowego na różnych platformach sprzętowych. Oprogramowanie OctoAI […]