Hồi Quy Tuyến Tính (Linear Regression)


Phần 1: Mở đầu
Bạn thử tưởng tượng, bạn bán bánh mì và bạn muốn dự đoán số bánh cần chuẩn bị mỗi ngày dựa vào số khách đến quán. Bạn nhận thấy: mỗi thêm 10 khách, bạn bán được thêm khoảng 5 ổ. Liệu bạn có thể vẽ lên một đường thẳng đơn giản để dự đoán? Đó chính là hồi quy tuyến tính!
Tại sao nên biết về nó?
- Đây là thuật toán đơn giản, dễ hiểu, dễ thực hành.
- Nó giúp bạn nắm khái niệm cơ bản về cách máy học “học” từ dữ liệu.
- Nắm tốt hồi quy tuyến tính, bạn dễ dàng học được các kỹ thuật phức tạp hơn về sau.
Phần 2: Nội dung chính
2.1. Hồi quy tuyến tính là gì?
Hồi quy tuyến tính (Linear Regression) là thuật toán trong học máy giám sát (supervised learning), dùng để dự đoán một giá trị liên tục (như giá, số lượng…) dựa trên các biến đầu vào. Nó giả định giữa biến đầu vào và đầu ra có mối quan hệ tuyến tính, tức là giống như vẽ một đường thẳng trên đồ thị (GeeksforGeeks).
Công thức chuẩn:
y = m * x + b
x
là biến độc lập (ví dụ: số khách đến quán).y
là biến phụ thuộc (ví dụ: số bánh bán ra).m
là hệ số góc (slope – thể hiện số thay đổi của y khi x tăng 1 đơn vị).b
là hệ số chệch (intercept – giá trị y khi x = 0). (GeeksforGeeks)
2.2 Từ đơn giản đến nâng cao: Simple → Multiple
Simple Linear Regression: dùng 1 biến độc lập (
x
) để dự đoán (y
). Ví dụ: dự đoán giá nhà chỉ dựa vào diện tích.Multiple Linear Regression: dùng nhiều biến đầu vào: diện tích, số phòng, vị trí… Công thức:
y = β0 + β1*x1 + β2*x2 + ... + βp*xp + ε
(
β0
là intercept;β1..βp
là hệ số cho mỗi biến;ε
là sai số) (Investopedia, Wikipedia).
2.3 Cách máy học “học” đường thẳng tốt nhất?
Chúng ta muốn đường thẳng minh sai số, thường dùng Mean Squared Error (MSE) làm hàm mất mát, nghĩa là lỗi bình phương trung bình giữa giá trị thực và dự đoán.
Gradient Descent là thuật toán tìm m
, b
“từ từ” sao cho MSE nhỏ nhất. Mình sẽ vượt qua từng bước một, như bạn đi bộ theo hướng giảm dần độ cao để tới đáy thung lũng. (GeeksforGeeks)
Bạn cũng có thể dùng .. Giải pháp tuyến tính (Normal Equation) nếu không dùng gradient descent. Dùng phép toán ma trận để tìm trực tiếp β = (XᵀX)⁻¹ Xᵀ y
(Wikipedia).
2.4 Các giả định cần lưu ý
- Tính tuyến tính: Biến x biến động thì y cũng tỉ lệ thay đổi – kiểm tra bằng scatter plot. Nếu không tuyến tính, model dễ underfit (không học đủ) (GeeksforGeeks, Wikipedia).
- Homoscedasticity: Sai số phân bố đều, không quá lớn ở vùng này và quá nhỏ ở vùng kia (GeeksforGeeks).
- Independence (không đồng tuyến giữa biến) nếu dùng nhiều biến đầu vào, tránh collinearity.
2.5 Ưu và nhược điểm
Ưu điểm | Nhược điểm | |
Dễ hiểu, dễ thực hành | Không xử lý hiệu quả với mối quan hệ phi tuyến | |
Kết quả dễ giải thích (m và b) | Rất nhạy với outliers (giá trị bất thường) | |
Chạy nhanh, phù hợp khi biết rõ tuyến tính | Dễ overfit nếu dữ liệu quá nhiều biến mà không kiểm soát tốt | (GeeksforGeeks) |
2.6 Ví dụ cụ thể và code minh họa
Ví dụ 1: Dự đoán doanh thu bánh mì
x
: số khách (10 người, 20 người, …)y
: số ổ bánh bán ra (5, 10, …)- Mỗi 10 khách → 5 ổ →
m ≈ 0.5
, interceptb ≈ 0
(giả sử không bán khi không có khách).
Ví dụ 2: Giá nhà
x1
: diện tích (m²),x2
: số phòng,y
: giá nhà.- Hồi quy đa biến: biết rõ tác động riêng của mỗi yếu tố.
Code Python đơn giản:
# ví dụ đơn giản với scikit-learn
from sklearn.linear_model import LinearRegression
# dữ liệu giả sử
x = [[10], [20], [30], [40]] # số khách
y = [5, 10, 15, 20] # số ổ bánh
model = LinearRegression()
model.fit(x, y)
print("Hệ số góc (m):", model.coef_[0])
print("Intercept (b):", model.intercept_)
# dự đoán
print("Dự đoán với 25 khách:", model.predict([[25]])) # khoảng 12.5 ổ
Nếu bạn thích tự tay "vẽ đường":
# cách vẽ đường hồi quy bằng phương pháp giải phương trình bình phương thông thường
import numpy as np
X = np.array(x)
Y = np.array(y)
n = len(X)
# tính m và b theo công thức
m = (n * (X*Y).sum() - X.sum()*Y.sum()) / (n * (X**2).sum() - (X.sum())**2)
b = (Y.sum() - m * X.sum()) / n
print("Computed m:", m, "b:", b)
2.7 Phần tương tác nhẹ
Thử thách nhỏ:
- Hãy vẽ scatter plot bằng giấy hoặc Python:
x = [1,2,3,4]
,y = [2,4,5,8]
. Cố tự vẽ đường thẳng "nghĩ là phù hợp nhất"? - Thay đổi
x = [1,2,3,4]
,y = [2,2,2,2]
. Model có phù hợp hay không? Tại sao?
Phần kết
Hồi quy tuyến tính là một trong những bước đầu tiên nhưng cực kỳ quan trọng trong thế giới học máy. Qua bài này bạn đã hiểu:
- Kiến thức cơ bản: đơn giản, dễ hiểu hơn vàng!
- Hiểu về simple vs multiple, gradient descent vs normal equation.
- Biết các điều kiện cần và nhược điểm để tránh "học nhầm".
- Có code thực hành sẵn để dễ bắt đầu.
Lời khuyên nhỏ: Khi làm project, hãy luôn kiểm tra dữ liệu: có tuyến tính thật không? Có outliers? Từ đó quyết định dùng linear regression hay bước sang các mô hình phức tạp hơn.
Tài liệu tham khảo
- Giới thiệu cơ bản và định nghĩa hồi quy tuyến tính – GeeksforGeeks (GeeksforGeeks)
- Các bước đơn giản → nâng cao, implementation bằng Python – GeeksforGeeks (GeeksforGeeks)
- Gradient Descent trong hồi quy tuyến tính – GeeksforGeeks (GeeksforGeeks)
- Các giả định trong bình phương tối thiểu (linearity, homoscedasticity) – GeeksforGeeks (GeeksforGeeks)
- Ưu và nhược điểm – GeeksforGeeks (GeeksforGeeks)
- Giải pháp ma trận (normal equations) – Wikipedia Ordinary least squares (Wikipedia)
- Mô hình hồi quy đa biến – Investopedia (Investopedia)
Hy vọng bài viết này sẽ là người bạn đồng hành dễ hiểu và hiệu quả cho bạn bước đầu vào thế giới học máy. Nếu bạn có câu hỏi hay muốn khám phá thêm, cứ gõ nhé!
Subscribe to my newsletter
Read articles from Binlerdev directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
