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.
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:
- R² (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:
- 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
Brak komentarzy.