Powrót do strony głównej

Regresja liniowa: metoda OLS i spadek gradientu

Artykuł omawia regresję liniową od podstawowego równania do zaawansowanych technik: OLS, spadek gradientu, regularyzacja, obsługa wartości odstających. Zawiera kod w Pythonie i metryki jakości do praktycznej implementacji.

Zbuduj regresję liniową od zera: kod i metryki
Advertisement 728x90

Regresja liniowa: od danych do zoptymalizowanego modelu

Regresja liniowa modeluje liniowe zależności między predyktorami a zmienną docelową. Dla regresji prostej równanie przyjmuje postać y = b₀ + b₁ × x, gdzie x to predyktor, y to odpowiedź, b₀ to wyraz wolny, b₁ to współczynnik kierunkowy. Współczynniki określają położenie prostej na płaszczyźnie.

Dane w formacie tabelarycznym z cechami i odpowiedzią stanowią podstawę. Przykład: zależność ceny mieszkania od liczby pokoi. Jakość modelu zależy od reprezentatywności próby — zasada „śmieci na wejściu, śmieci na wyjściu” decyduje o wyniku.

Modele są przydatne do prognoz i wykrywania prawidłowości. Przekształcenie danych tabelarycznych w wyrażenie analityczne pozwala ekstrapolować na nowe obserwacje.

Google AdInline article slot

Metoda najmniejszych kwadratów

OLS (Ordinary Least Squares) minimalizuje sumę kwadratów reszt: ∑(y_i - ŷ_i)². Rozwiązanie analityczne: b₁ = Cov(x, y) / Var(x), b₀ = ȳ - b₁ × x̄.

# Przykład obliczania współczynników
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
b1 = np.cov(x, y)[0,1] / np.var(x)
b0 = np.mean(y) - b1 * np.mean(x)
print(f'b0: {b0:.2f}, b1: {b1:.2f}')

To podejście działa dla niezdegenerowanych danych, ale wymaga odwrócenia macierzy (XᵀX)⁻¹ w przypadku wielowymiarowym.

Ocena jakości modelu

Wizualnie: wykres rozrzutu prognoz vs. wartości rzeczywistych, wykresy reszt. Metryki:

Google AdInline article slot
  • (współczynnik determinacji): udział wyjaśnionej wariancji, 0–1.
  • RMSE: √(MSE), w jednostkach odpowiedzi.
  • MAE: średni błąd bezwzględny.
  • MAPE/SMAPE: błędy procentowe.

Wykresy reszt ujawniają heteroskedastyczność lub nieliniowość.

Podział danych i walidacja

Podział na zbiór treningowy/testowy (80/20) zapobiega przeuczeniu. Walidacja krzyżowa (k-fold) uśrednia metryki po foldach.

def train_test_split(X, y, test_size=0.2):
    indices = np.arange(len(X))
    np.random.shuffle(indices)
    split = int(len(X) * (1 - test_size))
    return X[indices[:split]], X[indices[split:]], y[indices[:split]], y[indices[split:]]

Regresja wielowymiarowa

Rozszerzenie do y = b₀ + b₁x₁ + ... + bₙxₙ. Forma macierzowa: ŷ = Xβ, rozwiązanie β = (XᵀX)⁻¹Xᵀy. Przetwarzanie wstępne:

Google AdInline article slot
  • Normalizacja: (x - min)/(max - min).
  • Standaryzacja: (x - μ)/σ.
  • One-hot encoding cech kategorycznych.

Interpretacja probabilistyczna

Model zakłada normalny rozkład błędów: ε ~ N(0, σ²). Przedział predykcyjny: *ŷ ± t SE √(1 + 1/n + (x - x̄)² / SXX)*. Metoda największej wiarygodności (MLE) optymalizuje log-likelihood.

Obsługa wartości odstających

Metody wykrywania:

  • Odległość Mahalanobisa: uogólniona odległość w przestrzeni wielowymiarowej.
  • Odległość Cooka: wpływ obserwacji na współczynniki.
  • LOF (Local Outlier Factor): lokalna gęstość.
  • RANSAC: konsensus losowych podprób.

Usuwanie lub regresory odporne (funkcja straty Hubera).

Spadek gradientu i regularyzacja

Dla dużych zbiorów danych: optymalizacja iteracyjna θ := θ - α ∇J(θ), gdzie J to funkcja kosztu.

  • L1 (Lasso): |β|, rzadkość.
  • L2 (Ridge): β², kurczenie.

Hiperparametr λ dobiera się przez CV.

def gradient_descent(X, y, lr=0.01, epochs=1000):
    theta = np.zeros(X.shape[1])
    for _ in range(epochs):
        pred = X @ theta
        grad = X.T @ (pred - y) / len(y)
        theta -= lr * grad
    return theta

Co jest ważne

  • Regresja liniowa to podstawowe narzędzie dla zależności liniowych, skalowalne do zadań wielowymiarowych.
  • OLS daje rozwiązanie analityczne, spadek gradientu — dla dużych danych.
  • Metryki R², RMSE oceniają jakość; wykresy reszt diagnozują problemy.
  • Regularyzacja (L1/L2) zwalcza przeuczenie i współliniowość.
  • Przetwarzanie wstępne (skalowanie, usuwanie wartości odstających) jest kluczowe dla stabilności.

— Editorial Team

Advertisement 728x90

Czytaj dalej