Hồi quy tuyến tính (Linear Regression)

.


Bài 3: Hồi quy tuyến tính (Linear Regression)

1. Bài toán đặt ra

Trong nhiều bài toán thực tế, chúng ta cần dự đoán một giá trị liên tục dựa trên nhiều đặc trưng đầu vào. Ví dụ:

  • Dự đoán giá nhà dựa trên diện tích, số phòng, vị trí
  • Dự đoán doanh thu dựa trên chi phí quảng cáo
  • Dự đoán điểm số dựa vào số giờ học

Mô hình đơn giản và nền tảng nhất để giải quyết dạng bài toán này là Hồi quy tuyến tính (Linear Regression).


2. Mô hình toán học

Hồi quy đơn biến

Với một đặc trưng đầu vào x, ta dự đoán y_hat theo công thức tuyến tính:

y_hat = w * x + b

Trong đó:

  • w là hệ số trọng số (weight)
  • b là hệ số chệch (bias)

Hồi quy đa biến

Với nhiều đặc trưng đầu vào [x1, x2, ..., xd], mô hình trở thành:

y_hat = w1 * x1 + w2 * x2 + ... + wd * xd + b

Hoặc viết gọn dưới dạng vector:

y_hat = dot_product(w, x) + b

3. Huấn luyện mô hình

Để tìm được w và b, ta cần một hàm đánh giá sai số giữa dự đoán và thực tế. Thường dùng nhất là Mean Squared Error (MSE):

MSE = (1/n) * Σ (y_hat_i - y_i)^2

Mục tiêu của mô hình là tối thiểu hoá MSE.

Có hai cách phổ biến để tìm trọng số tối ưu:

  • Dùng công thức đóng (closed-form):
w = inverse(X^T * X) * X^T * y
  • Dùng Gradient Descent (thích hợp khi dữ liệu lớn, không tính được ma trận nghịch đảo)

4. Các giả định của Linear Regression

Mô hình này chỉ hoạt động tốt khi các giả định sau được thoả mãn:

  1. Tuyến tính (Linearity): mối quan hệ giữa đầu vào và đầu ra là tuyến tính
  2. Độc lập (Independence): các quan sát độc lập với nhau
  3. Đồng phương sai (Homoscedasticity): sai số có phương sai không đổi
  4. Phân phối chuẩn phần dư: phần sai số (residuals) phân bố chuẩn

5. Triển khai bằng Python

Huấn luyện mô hình

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

X = df[['area', 'bedrooms', 'bathrooms']]  # đặc trưng đầu vào
y = df['price']  # biến mục tiêu

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LinearRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"MSE: {mse:.2f}")

Xem trọng số mô hình

print("Weights:", model.coef_)      # w1, w2, ..., wd
print("Intercept:", model.intercept_)  # b

6. Ưu và nhược điểm

Ưu điểmNhược điểm
Dễ hiểu, dễ giải thíchChỉ mô hình được quan hệ tuyến tính
Tính toán nhanhNhạy cảm với outlier
Là nền tảng của các mô hình phức tạp hơnCần kiểm tra kỹ các giả định

7. Mở rộng

  • Polynomial Regression: thêm đặc trưng bậc cao để mô hình hoá phi tuyến
  • Ridge/Lasso Regression: thêm regularization để giảm overfitting
  • Multiple Outputs Regression: dự đoán nhiều giá trị đầu ra

8. Bài tập thực hành

  1. Dùng tập dữ liệu Boston Housing hoặc California Housing từ sklearn.datasets
  2. Huấn luyện mô hình hồi quy tuyến tính với 3–5 đặc trưng đầu vào
  3. Tính và so sánh MSE giữa tập huấn luyện và kiểm tra
  4. Trực quan hóa y_pred và y_test trên biểu đồ scatter

9. Kết luận

Linear Regression là bước đầu tiên nhưng quan trọng trong hành trình học Machine Learning. Việc nắm chắc công thức, hiểu giả định và triển khai được mô hình là nền tảng để đi tiếp tới các mô hình phi tuyến, phân loại, hoặc deep learning.


Bài học tiếp theo sẽ là:
👉 Bài 4 – Hồi quy logistic (Logistic Regression): mô hình phân loại nhị phân đầu tiên.