🚀 Bài 31: Hồi quy vs. Phân loại — Khi đường thẳng phải "đầu hàng"
Chặng 8 · Khai sinh Mạng Nơ-ron (Bài 31 → 40) · đây là bài 1/10 của chặng.
🎯 Mục tiêu: Phân biệt rõ ràng hai bài toán nền tảng nhất của AI. Chứng minh được bằng hình ảnh và code lý do tại sao Hồi quy Tuyến tính (Linear Regression) sẽ "thất bại thảm hại" nếu dùng để phân loại danh mục.
👥 Đối tượng: học sinh cấp 2–3, sinh viên, người mới học Python. Cần biết trước: Hồi quy tuyến tính và hàm MSE (Bài 28, 30).
📖 Cách đọc 3 lớp: mỗi phần có ba khối màu song song — 🟢 Lớp A trực giác, 🔵 Lớp B cơ chế, 🟣 Lớp C nghiên cứu.
Sau bài này bạn sẽ:
- Tự tin phân biệt được khi nào cần dùng "Hồi quy" và khi nào phải dùng "Phân loại".
- Giải thích được hiện tượng "bị kéo lệch" (Outlier Effect) của đường thẳng.
- Nắm được khái niệm "Ngưỡng quyết định" (Decision Boundary).
- Nhận ra lý do cấp thiết phải đi tìm một hàm toán học mới có hình "chữ S" cho bài tiếp theo.
Chào mừng bạn đến với Chặng 8! Ở Chặng 7, cỗ máy AI của chúng ta đã làm rất tốt việc đoán giá nhà (một con số trải dài từ 1 tỷ đến 100 tỷ). Nhưng thực tế, con người cần AI trả lời những câu hỏi mang tính "Chốt hạ" nhiều hơn: Đây là Chó hay Mèo? Email này là Rác hay Không? Bệnh nhân này Âm tính hay Dương tính? Khi ép cỗ máy kẻ đường thẳng (Linear Regression) phải trả lời những câu hỏi Có/Không này, thảm họa toán học sẽ xảy ra.
Hình 1 — Khi xuất hiện một học sinh "cày cuốc" học tận 50 tiếng (Outlier), đường thẳng màu đỏ bị bẻ gập xuống để bám theo. Hậu quả là Ranh giới quyết định bị đẩy sang phải, khiến 3 học sinh đậu bình thường (vùng màu hồng) bị máy phán sai thành "Trượt".
1. Hai thế giới: Hồi quy (Regression) và Phân loại (Classification)
Hãy tưởng tượng bạn điều hành một hệ thống AI. Khách hàng sẽ hỏi bạn 2 kiểu câu hỏi:
- "Căn nhà này giá Bao Nhiêu?" → Bạn trả lời: 3,5 tỷ; 7,2 tỷ. Kết quả là một con số vô hạn. Đây là bài toán Hồi quy.
- "Khối u này là Lành tính hay Ác tính?" → Bạn không thể trả lời "Ác tính 7,2 tỷ" được. Bạn phải chốt: Lành (0) hoặc Ác (1). Đây là bài toán Phân loại.
Sự khác biệt nằm ở chỗ: Hồi quy đoán Số lượng, Phân loại đoán Danh mục.
Về mặt kỹ thuật, ở bài toán Phân loại nhị phân (2 class), dữ liệu thực tế $Y$ chỉ chứa đúng hai số: 0 và 1. Máy tính không thể phán thẳng ra 0 hay 1, mà nó sẽ xuất ra Xác suất (từ 0% đến 100%, tức là từ 0.0 đến 1.0).
Sau đó, con người sẽ đặt một Ngưỡng quyết định (Decision Boundary). Thường ngưỡng này là 0.5. Nếu AI đoán xác suất $> 0.5$, ta chốt là nhãn 1 (Đậu). Nếu $< 0.5$, ta chốt là nhãn 0 (Trượt).
Trong Toán học, Hồi quy Tuyến tính dự đoán một giá trị kỳ vọng $\mathbb{E}[Y|X]$ với giả định phân phối chuẩn (Gaussian). Tuy nhiên, nhãn 0/1 tuân theo phân phối Bernoulli. Việc ép một đường thẳng đi qua dữ liệu 0/1 đồng nghĩa với việc ta cho phép dự đoán vọt ra khỏi khoảng $[0, 1]$ (ví dụ đường thẳng có thể đoán xác suất là -2 hoặc +5). Điều này hoàn toàn vô nghĩa về mặt toán học.
2. Sự thất bại của Đường thẳng (Hiệu ứng Outlier)
Hãy nhìn lại Hình 1 ở trên. Ta dùng số giờ học để đoán học sinh Đậu (1) hay Trượt (0). Ban đầu, nhóm Trượt học 1-3 tiếng, nhóm Đậu học 5-7 tiếng. Đường thẳng (nét đứt xanh lá) cắt ngang mức 0.5 cực kỳ chuẩn xác, chia đôi 2 thế giới.
Đột nhiên, xuất hiện một "siêu nhân" học tận 50 tiếng (chấm cam). Vì đường thẳng kéo dài vô tận, để chạm được anh chàng học 50 tiếng ở nhãn 1, đường thẳng bắt buộc phải ngả thấp xuống (đường màu đỏ). Hậu quả: Ngưỡng 0.5 bị đẩy dồn về bên phải. Những học sinh bình thường học 5 tiếng (đáng ra Đậu) lúc này bị đường thẳng đánh giá $< 0.5$ và phán là Trượt oan uổng!
Tại sao đường thẳng lại bị "bẻ cong" ý chí dễ dàng thế? Thủ phạm chính là Hàm mất mát MSE (Bình phương sai số) của Bài 28!
Nếu giữ nguyên đường thẳng cũ, tại vị trí x = 50, đường thẳng sẽ dự đoán y = 10 (vì nó dốc lên mãi). Nhưng thực tế y của học sinh đó chỉ là 1. Sai số MSE = $(10 - 1)^2 = 81$. Mức phạt 81 là cực kỳ khủng khiếp! Để trốn phạt, thuật toán Gradient Descent ép đường thẳng phải ngóc đầu xuống để y_pred tại x=50 bám gần số 1 hơn. Bằng cách cố gắng chiều lòng 1 cá biệt, nó hy sinh toàn bộ dữ liệu đại trà.
Hiện tượng này minh chứng cho tính "Kém mạnh mẽ" (Lack of Robustness) của Linear Regression trước Outlier (Dữ liệu ngoại lai). Hơn nữa, nó chỉ ra một mâu thuẫn cốt lõi: Khi một học sinh học càng nhiều, lẽ ra ta phải càng chắc chắn 100% họ sẽ đậu, thì hàm MSE lại đi "phạt" mô hình vì đoán "quá đúng" (tức là đoán > 1). Đây là dấu hiệu cho thấy ta cần một hàm toán học bị "giới hạn trần - sàn" (chỉ chạy từ 0 đến 1) thay vì đường thẳng.
📝 Bảng ghi nhớ
| Khái niệm | Ý nghĩa | Ví dụ |
|---|---|---|
| Hồi quy (Regression) | Dự đoán một đại lượng liên tục. | Dự đoán doanh thu, giá nhà, tuổi thọ. |
| Phân loại (Classification) | Dự đoán danh mục hoặc nhóm rời rạc. | Chó/Mèo, Email Rác/Bình thường, Đậu/Trượt. |
| Outlier (Dữ liệu ngoại lai) | Điểm dữ liệu dị biệt, khác xa đám đông. | Người cao 2.5 mét, học sinh học 50 tiếng/ngày. |
| Ngưỡng quyết định (Decision Boundary) | Cột mốc (thường = 0.5) để máy tính chốt kết quả 0 hay 1. | Nếu xác suất mưa là 0.51 → Dự báo: Có mưa. |
✎ Kiểm tra nhanh
Câu 1. Đâu là bài toán Phân loại (Classification) trong các tình huống sau?
- Hệ thống AI đoán xem ngày mai nhiệt độ là bao nhiêu độ C.
- AI phân tích hồ sơ vay vốn và dự đoán khách hàng sẽ trả được bao nhiêu tiền.
- AI quét hình ảnh X-Quang phổi và chẩn đoán "Có viêm phổi" hay "Không viêm phổi".
- AI dự đoán giá trị cổ phiếu của công ty Apple vào ngày mai.
Câu 2. Khi dùng Hồi quy tuyến tính (Linear Regression) cho phân loại, nếu có một dữ liệu ngoại lai (Outlier) có giá trị X cực lớn, điều gì sẽ xảy ra?
- Đường thẳng bị bẻ cong thành hình chữ S để né điểm đó.
- Đường thẳng bị "kéo lệch" về phía Outlier, làm thay đổi Ngưỡng quyết định và gây sai số cho dữ liệu bình thường.
- Dữ liệu ngoại lai sẽ tự động bị thuật toán Gradient Descent xóa bỏ.
- Không có chuyện gì xảy ra, đường thẳng vẫn giữ nguyên vị trí.
Câu 3. Nghịch lý lớn nhất khi dùng hàm MSE (Bình phương sai số) cho bài toán phân loại là gì?
- Hàm MSE sẽ phạt mô hình nếu mô hình quá "tự tin" (ví dụ: thực tế là 1, nhưng vì tự tin quá nên đoán vọt lên 5).
- Hàm MSE không thể tính được đạo hàm.
- Hàm MSE chỉ hoạt động với số nguyên, không dùng cho số thập phân.
- Hàm MSE làm mô hình chạy quá chậm.
💻 Thực hành: Tận mắt chứng kiến Đường thẳng bị "Đánh lừa"
▶ Cách dùng: Đoạn code dưới đây sẽ vẽ 2 đồ thị. Đồ thị trái là bộ dữ liệu bình thường. Đồ thị phải là khi có thêm "Kẻ cày cuốc" học 30 tiếng. Hãy bấm Chạy code, đọc phần chữ giải thích in ra trong hộp đen và nhìn Ranh giới quyết định (vạch đỏ nét đứt) bị trôi đi như thế nào.
💡 Thử thách: Trong ô code trên, ở phần 2, hãy thử đổi 30 thành 50 (siêu nhân học 50 tiếng). Nhấn Chạy code và xem Ranh giới quyết định (Ngưỡng 2) bị đẩy lên tới tận bao nhiêu tiếng? Những học sinh học 6, 7 tiếng có còn đậu nổi nữa không?
Bài tiếp theo: Rõ ràng, đường thẳng kéo dài vô tận là một "thảm họa" đối với việc phân loại. Chúng ta cần một thứ gì đó có thể bẻ cong đường thẳng lại, đóng trần nó ở mức 1.0 và khóa đáy nó ở mức 0.0. Bài 32 sẽ đưa bạn đi gặp vị cứu tinh vĩ đại nhất của Machine Learning — một chiếc phễu thần kỳ mang tên Hàm Sigmoid.