🎯 Mục tiêu bài học
Sau bài học này, học viên sẽ:
✅ Hiểu bản chất của Linear Regression
✅ Nắm vững công thức OLS (Ordinary Least Squares)
✅ Tính toán thủ công Linear Regression
✅ Implement với Scikit-learn
Thời gian: 4-5 giờ | Độ khó: Beginner
� Bảng Thuật Ngữ Quan Trọng
| Thuật ngữ | Tiếng Việt | Giải thích đơn giản |
|---|---|---|
| Linear Regression | Hồi quy tuyến tính | Tìm đường thẳng mô tả quan hệ giữa X và y |
| OLS | Bình phương nhỏ nhất | Phương pháp tìm β bằng cách minimize sai số bình phương |
| Intercept (β₀) | Hệ số chặn | Giá trị y khi x = 0 |
| Slope (β₁) | Hệ số góc | Mức thay đổi của y khi x tăng 1 đơn vị |
| Residual | Phần dư | Sai lệch giữa giá trị thực và dự đoán |
| R² (R-squared) | Hệ số xác định | Tỷ lệ biến thiên được model giải thích (0-1) |
| MSE | Sai số bình phương trung bình | Trung bình bình phương sai số, phạt nặng sai số lớn |
| Gradient Descent | Hạ gradient | Thuật toán tối ưu lặp, thay thế OLS với dữ liệu lớn |
Checkpoint
Bạn đã đọc qua bảng thuật ngữ? Hãy ghi nhớ chúng!
�📊 Giới thiệu Linear Regression
1.1 Ý tưởng
Linear Regression tìm đường thẳng tốt nhất để mô tả mối quan hệ giữa biến độc lập (X) và biến phụ thuộc (y).
Công thức:
Trong đó:
- : Giá trị dự đoán
- : Intercept (hệ số chặn)
- : Slope (hệ số góc)
- : Biến độc lập

Hình: Linear Regression fit đường thẳng qua các điểm dữ liệu
1.2 Multiple Linear Regression
Với nhiều biến:
Hoặc dạng ma trận:
📈 Ordinary Least Squares (OLS)
2.1 Mục tiêu
Tìm sao cho tổng bình phương sai số là nhỏ nhất:
2.2 Công thức OLS
Slope:
Intercept:
2.3 Dạng ma trận
3. Ví dụ tính toán thủ công
📊 Bài toán: Dự đoán giá nhà dựa trên diện tích
3.1 Dữ liệu
| x (Diện tích m2) | y (Giá triệu VND) |
|---|---|
| 50 | 500 |
| 60 | 600 |
| 70 | 650 |
| 80 | 700 |
| 100 | 850 |
3.2 Bước 1: Tính Mean
3.3 Bước 2: Tính các thành phần
| 50 | 500 | -22 | -160 | 3520 | 484 |
| 60 | 600 | -12 | -60 | 720 | 144 |
| 70 | 650 | -2 | -10 | 20 | 4 |
| 80 | 700 | 8 | 40 | 320 | 64 |
| 100 | 850 | 28 | 190 | 5320 | 784 |
| Tổng | 9900 | 1480 |
3.4 Bước 3: Tính hệ số
Slope:
Intercept:
3.5 Bước 4: Phương trình hồi quy
Diễn giải: Mỗi mét vuông tăng thêm, giá tăng 6.69 triệu VND.
3.6 Bước 5: Dự đoán
Với nhà 90m2:
📊 Đánh giá Model
4.1 Mean Squared Error (MSE)
4.2 Root Mean Squared Error (RMSE)
4.3 R-squared (R2)
| Giá trị R2 | Ý nghĩa | |------------|---------|| | R2 = 1 | Model fit hoàn hảo | | R2 = 0 | Model không giải thích gì | | R2 < 0 | Model tệ hơn mean |
5. Thực hành với Scikit-learn
💻 Luôn chạy code thực tế để hiểu sâu thuật toán!
5.1 Code hoàn chỉnh
1import numpy as np2import matplotlib.pyplot as plt3from sklearn.linear_model import LinearRegression4from sklearn.model_selection import train_test_split5from sklearn.metrics import mean_squared_error, r2_score67# Dữ liệu8X = np.array([50, 60, 70, 80, 100]).reshape(-1, 1)9y = np.array([500, 600, 650, 700, 850])1011# Train model12model = LinearRegression()13model.fit(X, y)1415# Xem hệ số16print(f"Intercept (beta_0): {model.intercept_:.2f}")17print(f"Slope (beta_1): {model.coef_[0]:.2f}")1819# Dự đoán20y_pred = model.predict(X)21print(f"Predictions: {y_pred}")2223# Đánh giá24mse = mean_squared_error(y, y_pred)25rmse = np.sqrt(mse)26r2 = r2_score(y, y_pred)2728print(f"MSE: {mse:.2f}")29print(f"RMSE: {rmse:.2f}")30print(f"R2: {r2:.4f}")3132# Visualize33plt.figure(figsize=(10, 6))34plt.scatter(X, y, color='blue', label='Actual')35plt.plot(X, y_pred, color='red', label='Predicted')36plt.xlabel('Diện tích (m2)')37plt.ylabel('Giá (triệu VND)')38plt.title('Linear Regression - House Price Prediction')39plt.legend()40plt.grid(True)41plt.show()5.2 Multiple Linear Regression
1from sklearn.datasets import fetch_california_housing2from sklearn.model_selection import train_test_split3from sklearn.linear_model import LinearRegression4from sklearn.metrics import mean_squared_error, r2_score5from sklearn.preprocessing import StandardScaler67# Load data8housing = fetch_california_housing()9X, y = housing.data, housing.target1011# Split12X_train, X_test, y_train, y_test = train_test_split(13 X, y, test_size=0.2, random_state=4214)1516# Scale (quan trọng cho multiple regression)17scaler = StandardScaler()18X_train_scaled = scaler.fit_transform(X_train)19X_test_scaled = scaler.transform(X_test)2021# Train22model = LinearRegression()23model.fit(X_train_scaled, y_train)2425# Predict26y_pred = model.predict(X_test_scaled)2728# Evaluate29print(f"R2 Score: {r2_score(y_test, y_pred):.4f}")30print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred)):.4f}")3132# Feature importance33for name, coef in zip(housing.feature_names, model.coef_):34 print(f"{name}: {coef:.4f}")✅ Giả định của Linear Regression
4.1 Các giả định
| Giả định | Mô tả | Kiểm tra |
|---|---|---|
| Linearity | Quan hệ tuyến tính giữa X và y | Scatter plot |
| Independence | Các observation độc lập | Durbin-Watson test |
| Homoscedasticity | Phương sai sai số không đổi | Residual plot |
| Normality | Sai số phân phối chuẩn | Q-Q plot |
| No multicollinearity | Các features không tương quan cao | VIF |
6.2 Kiểm tra Residuals
1import matplotlib.pyplot as plt2import scipy.stats as stats34# Tính residuals5residuals = y_test - y_pred67# Residual plot8plt.figure(figsize=(12, 4))910plt.subplot(1, 2, 1)11plt.scatter(y_pred, residuals)12plt.axhline(y=0, color='r', linestyle='--')13plt.xlabel('Predicted')14plt.ylabel('Residuals')15plt.title('Residual Plot')1617# Q-Q plot18plt.subplot(1, 2, 2)19stats.probplot(residuals, dist="norm", plot=plt)20plt.title('Q-Q Plot')2122plt.tight_layout()23plt.show()⚖️ Ưu và nhược điểm
| Ưu điểm | Nhược điểm |
|---|---|
| Đơn giản, dễ hiểu | Chỉ mô tả quan hệ tuyến tính |
| Nhanh, ít tính toán | Nhạy với outliers |
| Dễ giải thích hệ số | Không tốt với dữ liệu phi tuyến |
| Không cần tham số | Giả định nghiêm ngặt |
Tóm tắt: Linear Regression là thuật toán đầu tiên cần biết — đơn giản, hiệu quả và là nền tảng cho các thuật toán phức tạp hơn.
Checkpoint
Bạn đã hiểu khi nào nên và không nên dùng Linear Regression?
📝 Tổng Kết
Key Takeaways:
- 📊 Linear Regression tìm đường thẳng tốt nhất:
- 📈 OLS minimize tổng bình phương sai số
- 📏 Metrics: MSE, RMSE, MAE, R² để đánh giá
- ✅ Giả định: Linearity, Independence, Normality, Homoscedasticity
- 💻 Scikit-learn:
LinearRegression().fit(X, y)và evaluate
Bài tập tự luyện
- Bài 1: Tính thủ công với data: X=[1,2,3,4,5], y=[2,4,5,4,5]
- Bài 2: Load Boston Housing dataset, train Linear Regression, đánh giá R²
- Bài 3: Kiểm tra giả định với residual plots
Tài liệu tham khảo
| Nguồn | Link |
|---|---|
| Scikit-learn Linear Regression | scikit-learn.org |
| StatQuest - Linear Regression | youtube.com |
Câu hỏi tự kiểm tra
- Công thức OLS (Ordinary Least Squares) tìm hệ số β như thế nào? Tại sao gọi là "bình phương nhỏ nhất"?
- R² (R-squared) có ý nghĩa gì? Giá trị R² = 0.85 cho biết điều gì về model?
- Hãy kể tên các giả định (assumptions) của Linear Regression và cách kiểm tra chúng.
- Khi nào nên dùng Gradient Descent thay vì OLS để tìm β?
🎉 Tuyệt vời! Bạn đã hoàn thành bài học Linear Regression!
Tiếp theo: Cùng học Logistic Regression — thuật toán Classification đầu tiên!
Checkpoint
Bạn đã sẵn sàng sang bài tiếp theo — Logistic Regression?
