Hồi Quy Tuyến Tính
Mô hình, hàm mất mát MSE, Normal Equation, Gradient Descent, giả định & chẩn đoán, đánh giá (R²) và mở rộng hồi quy đa thức.
Learning Objectives
- ✓Xây dựng mô hình hồi quy tuyến tính đơn và bội
- ✓Hiểu MSE, Normal Equation và khi nào chọn Gradient Descent
- ✓Kiểm tra giả định, đa cộng tuyến và phân tích phần dư
- ✓Đánh giá mô hình bằng R², RSE và bộ độ đo hồi quy
- ✓Mở rộng sang hồi quy đa thức (Polynomial Regression)
Mô Hình & Hàm Mất Mát MSE
Hồi quy dự đoán một giá trị số liên tục. Mô hình đơn biến: ŷ = w·x + b, khớp một đường thẳng qua dữ liệu. Phương pháp bình phương tối thiểu cực tiểu hóa RSS (tổng bình phương phần dư). Hàm mất mát MSE = (1/m)·Σ(ŷᵢ − yᵢ)² — bình phương sai số phạt nặng dự đoán lệch xa và giữ hàm khả vi. Với hồi quy đơn có nghiệm dạng đóng (closed-form) tính trực tiếp w và b.
Hồi Quy Bội & Normal Equation
Hồi quy bội dùng nhiều đặc trưng: ŷ = Xw (dạng ma trận). Normal Equation cho nghiệm tối ưu trực tiếp: w = (XᵀX)⁻¹Xᵀy — chính xác tuyệt đối, không cần lặp và không cần chọn learning rate, nhưng có độ phức tạp O(n³) do phải nghịch đảo ma trận nên không khả thi khi số đặc trưng n lớn (thường > 10.000). Khi đó Gradient Descent là lựa chọn thực tế hơn.
Gradient Descent
Gradient Descent cập nhật lặp: w := w − α·∇J(w), với α là learning rate. Stochastic GD (SGD) cập nhật trên một mẫu mỗi bước — nhanh, phù hợp online learning nhưng nhiễu; Mini-batch GD dùng một batch nhỏ (32–256 mẫu) cân bằng giữa tốc độ và ổn định, thân thiện GPU. So với Normal Equation, GD hoạt động tốt với số đặc trưng lớn và không cần nghịch đảo ma trận, nhưng cần chọn α và số vòng lặp phù hợp.
import numpy as np
def linear_regression_gd(X, y, lr=0.01, epochs=1000):
m, n = X.shape
w = np.zeros(n)
b = 0.0
for _ in range(epochs):
y_pred = X @ w + b
error = y_pred - y
w -= lr * (2 / m) * (X.T @ error)
b -= lr * (2 / m) * np.sum(error)
return w, bGiả Định & Chẩn Đoán Mô Hình
Hồi quy tuyến tính có các giả định cần kiểm tra: quan hệ tuyến tính, phần dư độc lập, phương sai phần dư đồng nhất (homoscedasticity), phần dư phân phối chuẩn. Đa cộng tuyến (Multicollinearity) — các đặc trưng tương quan cao với nhau — làm hệ số bất ổn và khó diễn giải (phát hiện bằng VIF). Phân tích phần dư (Residual Analysis) vẽ phần dư theo giá trị dự đoán để phát hiện vi phạm giả định: phần dư nên phân tán ngẫu nhiên quanh 0, không có mẫu hình rõ rệt.
Đánh Giá Mô Hình
RSE (Residual Standard Error) ước lượng độ lệch chuẩn của sai số. R² (hệ số xác định) đo tỷ lệ phương sai của y được mô hình giải thích, càng gần 1 càng tốt. Bộ độ đo hồi quy đầy đủ gồm: MAE (trung bình trị tuyệt đối sai số — dễ diễn giải), MSE, RMSE (căn của MSE — cùng đơn vị với y, phạt nặng sai số lớn), và R²/R² hiệu chỉnh (Adjusted R² — phạt việc thêm đặc trưng vô ích).
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
model = LinearRegression().fit(X_train, y_train)
y_pred = model.predict(X_test)
print("R2 :", r2_score(y_test, y_pred))
print("MAE :", mean_absolute_error(y_test, y_pred))
print("RMSE:", mean_squared_error(y_test, y_pred, squared=False))Mở Rộng: Hồi Quy Đa Thức
Khi quan hệ giữa đặc trưng và mục tiêu là phi tuyến, hồi quy đa thức (Polynomial Regression) thêm các bậc cao của đặc trưng (x², x³, ...) rồi vẫn dùng mô hình tuyến tính trên các đặc trưng mới đó. PolynomialFeatures của scikit-learn tự sinh các đặc trưng đa thức. Lưu ý: bậc càng cao càng dễ overfitting — cần kết hợp regularization và cross-validation để chọn bậc phù hợp.
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
# Đường cong bậc 3
model = make_pipeline(
PolynomialFeatures(degree=3),
LinearRegression()
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)