Zpět na domů

Lineární regrese: metoda OLS a gradientní sestup

Článek rozebírá lineární regresi od základní rovnice po pokročilé techniky: OLS, gradientní sestup, regularizace, zpracování outlierů. Uveden kód v Pythonu a metriky kvality pro praktickou implementaci.

Postavte lineární regresi od nuly: kód a metriky
Advertisement 728x90

Lineární regrese: od dat k optimalizovanému modelu

Lineární regrese modeluje lineární závislosti mezi prediktory a cílovou proměnnou. Pro párovou regresi má rovnice tvar y = b₀ + b₁ × x, kde x je prediktor, y je odezva, b₀ je intercept (volný člen), b₁ je slope (sklon). Koeficienty určují polohu přímky v rovině.

Základem jsou data ve formátu tabulky s příznaky a odezvou. Příklad: závislost ceny bytu na počtu pokojů. Kvalita modelu závisí na reprezentativnosti vzorku — princip „smetí dovnitř, smetí ven“ určuje výsledek.

Modely jsou užitečné pro predikce a odhalování zákonitostí. Transformace tabulkových dat na analytický výraz umožňuje extrapolaci na nová pozorování.

Google AdInline article slot

Metoda nejmenších čtverců

OLS (Ordinary Least Squares) minimalizuje součet čtverců reziduí: ∑(y_i - ŷ_i)². Analytické řešení: b₁ = Cov(x, y) / Var(x), b₀ = ȳ - b₁ × x̄.

# Příklad výpočtu koeficientů
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}')

Tento přístup funguje pro nedegenerovaná data, ale vyžaduje inverzi matice (XᵀX)⁻¹ v multidimenzionálním případě.

Hodnocení kvality modelu

Vizuálně: scatter plot predikcí vs. skutečných hodnot, grafy reziduí. Metriky:

Google AdInline article slot
  • (koeficient determinace): podíl vysvětlené variance, 0–1.
  • RMSE: √(MSE), v jednotkách odezvy.
  • MAE: průměrná absolutní chyba.
  • MAPE/SMAPE: procentuální chyby.

Grafy reziduí odhalují heteroskedasticitu nebo nelinearitu.

Rozdělení dat a validace

Rozdělení na train/test (80/20) předchází přeučení. Křížová validace (k-fold) průměruje metriky přes foldy.

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:]]

Vícenásobná regrese

Rozšíření na y = b₀ + b₁x₁ + ... + bₙxₙ. Maticová forma: ŷ = Xβ, řešení β = (XᵀX)⁻¹Xᵀy. Předzpracování:

Google AdInline article slot
  • Normalizace: (x - min)/(max - min).
  • Standardizace: (x - μ)/σ.
  • One-hot encoding kategoriálních příznaků.

Pravděpodobnostní interpretace

Model předpokládá normální rozdělení chyb: ε ~ N(0, σ²). Predikční interval: *ŷ ± t SE √(1 + 1/n + (x - x̄)² / SXX)*. Metoda maximální věrohodnosti (MLE) optimalizuje log-likelihood.

Zpracování odlehlých hodnot

Metody detekce:

  • Mahalanobisova vzdálenost: zobecněná vzdálenost v multidimenzionálním prostoru.
  • Cookova vzdálenost: vliv pozorování na koeficienty.
  • LOF (Local Outlier Factor): lokální hustota.
  • RANSAC: konsenzus náhodných podvzorků.

Odstranění nebo robustní regresory (Huberova ztrátová funkce).

Gradientní sestup a regularizace

Pro velká data: iterativní optimalizace θ := θ - α ∇J(θ), kde J je ztrátová funkce.

  • L1 (Lasso): |β|, řídkost.
  • L2 (Ridge): β², zmenšení.

Hyperparametr λ se volí pomocí 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 je důležité

  • Lineární regrese je základní nástroj pro lineární závislosti, škálovatelný na multidimenzionální úlohy.
  • OLS poskytuje analytické řešení, gradientní sestup je pro velká data.
  • Metriky R², RMSE hodnotí kvalitu; grafy reziduí diagnostikují problémy.
  • Regularizace (L1/L2) bojuje s přeučením a multikolinearitou.
  • Předzpracování (škálování, odstranění odlehlých hodnot) je klíčové pro stabilitu.

— Editorial Team

Advertisement 728x90

Číst dál