🎓 Bài 2 – Dự án Dự đoán Giá nhà bằng Linear Regression

I. Mô tả dự án: Bài toán dự đoán giá nhà

Trong bài 2, chúng ta xây dựng một dự án nhỏ nhưng rất thực tế: dùng kiến thức toán & lập trình để dự đoán giá nhà.

1. Kịch bản thực tế

2. Dữ liệu sử dụng trong bài

Để đơn giản, ta dùng dữ liệu giả lập nhỏ:

STTDiện tích (m²) – xGiá bán (triệu) – y
140900
2601400
3801800
41002300
Mục tiêu của mô hình:
Học từ 4 điểm dữ liệu trên, tìm ra một đường thẳng y = w·x + b sao cho:
– Gần với các điểm đã biết nhất có thể.
– Dùng được để dự đoán cho các diện tích khác (50m², 70m²,...).

II. Mô hình Linear Regression cho giá nhà

1. Dạng hàm mô hình

Ta giả sử mối quan hệ giữa diện tích nhà và giá nhà là gần tuyến tính, nên dùng mô hình:

ŷ = w·x + b

2. Hàm mất mát (Loss function)

Mô hình không thể chính xác 100% với mọi điểm, nên ta đo “độ sai” bằng MSE:

L(w, b) = (1/n) · Σ (ŷᵢ − yᵢ)²  =  (1/n) · Σ (w·xᵢ + b − yᵢ)²

Trong đó:

Mục tiêu chính: Tìm bộ (w, b) sao cho giá trị L(w, b) nhỏ nhất.
→ Đây chính là bài toán tối ưu hàm nhiều biến (biến là w và b).

III. Gradient Descent cho 2 tham số (w, b)

1. Nhắc lại ý tưởng từ bài 1

Ở bài 1, với hàm 1 biến f(x), ta cập nhật:

x_new = x_old − η·f'(x_old)

Trong đó η (eta) là learning rate – bước đi mỗi lần cập nhật.

2. Bây giờ với 2 biến (w, b)

Hàm mất mát L phụ thuộc vào 2 biến:

L = L(w, b)

Gradient (đạo hàm riêng):

∂L/∂w = (2/n) · Σ (w·xᵢ + b − yᵢ)·xᵢ
∂L/∂b = (2/n) · Σ (w·xᵢ + b − yᵢ)

Cập nhật theo Gradient Descent:

w_new = w_old − η·(∂L/∂w)
b_new = b_old − η·(∂L/∂b)
Ý nghĩa:
– Nếu ∂L/∂w > 0, tức tăng w làm Loss tăng → ta phải giảm w.
– Nếu ∂L/∂b < 0, tức tăng b làm Loss giảm → ta nên tăng b (vì trừ số âm thành cộng).

IV. Code Python – Tự viết Linear Regression từ đầu

Phần này học sinh có thể copy code để chạy trên VS Code, IDLE hoặc Google Colab.

1. Khởi tạo dữ liệu & hàm Loss

2. Thuật toán Gradient Descent học w và b (có in từng bước)

3. Dùng mô hình để dự đoán giá nhà

Gợi ý dạy học:
– Cho học sinh thay đổi learning_rate (0.000001, 0.0001, ...) để xem mô hình học nhanh/chậm ra sao.
– Cho học sinh in thử 10 dòng đầu và 10 dòng cuối để xem w, b tiến dần về giá trị ổn định.

V. Demo trực quan trên web (JS mô phỏng Python + vẽ biểu đồ)

1. Mô phỏng quá trình học:

Bấm nút bên dưới để xem JS thực hiện Gradient Descent giống hệt code Python, in ra w, b, loss theo từng giai đoạn.

Nhấn nút để chạy mô phỏng…

2. Biểu đồ trực quan:

Biểu đồ bên dưới hiển thị:

  • Các điểm dữ liệu thật (x, y).
  • Đường thẳng mô hình học được sau khi train.