Đánh giá mô hình - confusion matrix, precision, recall, overfitting
Chốt nhánh giám sát: ma trận nhầm lẫn, precision recall và đánh đổi, overfitting, ba phần dữ liệu và đọc kết quả classifiers.
Trung bìnhThuật toán ~60 phút
Ôn lại trước khi học
Giới thiệu
Bài này học đọc ma trận nhầm lẫn và precision recall. Kiến thức này giúp chống overfitting khi triển khai thật.
Kiến thức cần nhớ
Ma trận 4 ô
- Đúng dương: bắt đúng kẻ cần bắt.
- Đúng âm: tha đúng người vô tội.
- Dương giả: báo oan, âm giả: bỏ sót.
- Ví dụ đời thường: hai máy cùng 90% nhưng sai kiểu khác nhau.
Precision và recall
- Precision: trong số báo dương, bao nhiêu phần trăm đúng.
- Recall: trong số dương thật, tóm được bao nhiêu phần trăm.
- Hạ ngưỡng thì recall lên precision xuống, ngược lại cũng vậy.
- Ví dụ đời thường: khám bệnh hiểm thì thà báo oan còn hơn bỏ sót.
Overfitting và 3 phần dữ liệu
- Overfitting: điểm train cao mà điểm mới thấp.
- Nguyên nhân: mô hình khỏe quá, học quá lâu, nhìn trộm đáp án.
- Chia train để học, valid để chỉnh, test khóa để báo cáo.
- Ví dụ đời thường: học thuộc đề cũ nhưng thi đề mới trượt.
| Chỉ số | Công thức lời | Dùng khi |
|---|---|---|
| Accuracy | Đường chéo chia tổng | Lớp cân bằng |
| Precision | Đúng dương chia báo dương | Sợ báo oan |
| Recall | Đúng dương chia dương thật | Sợ bỏ sót |
Ví dụ
- Input: mô hình hoàn hảo -> Output: ma trận chỉ có đường chéo, precision recall bằng 1.
- Câu này kiểm tra biên giỏi nhất mọi chỉ số.
- Input: mô hình lười luôn đoán đa số trên dữ liệu 95-5 -> Output: accuracy 95% nhưng recall thiểu số 0.
- Câu này cho thấy accuracy lừa dối khi lệch lớp.
💻 Bài tập
Ngôn ngữ: Python 3 với NumPy. Không dùng sklearn.metrics trừ khi đối chiếu. Nộp vào day-056/.
Bài 1: Ma trận nhầm lẫn và các chỉ số
| Hàm | Yêu cầu |
|---|---|
confusion_matrix(y, yhat, labels) | Ma trận k x k, hàng là nhãn thật, cột là nhãn đoán |
precision(y, yhat, pos), recall(...), f1(...) | Mẫu số bằng 0 thì trả 0 |
macro_f1(y, yhat) | Trung bình F1 các lớp |
report(y, yhat) | In bảng precision, recall, F1, support từng lớp |
y = [1,1,1,0,0,0,0,0]
yhat = [1,1,0,1,0,0,0,0]
-> TP=2, FN=1, FP=1, TN=4; precision=0.667, recall=0.667, f1=0.667
Dữ liệu 95 âm, 5 dương, luôn đoán âm -> accuracy 0.95, recall(dương) = 0
Bài 2: Ngưỡng, ROC và PR
Dùng logistic regression ngày 55 trên bộ Breast Cancer.
- Quét ngưỡng từ 0 tới 1 bước 0.01. Vẽ precision và recall theo ngưỡng.
- Tự cài
roc_curvevàauc(quy tắc hình thang). Vẽ ROC. - Chọn ngưỡng sao cho recall lớp ác tính ≥ 0.98. In precision tại ngưỡng đó. Viết 2 câu vì sao bài toán y tế ưu tiên recall.
Bài 3: Overfitting và cross-validation (nâng cao)
- Sinh dữ liệu
y = sin(x) + nhiễu, 30 điểm. Khớp đa thức bậc 1, 3, 9, 15. Vẽ đường cong và in MSE train/test. - Tự cài
k_fold(n, k, seed)vàcross_val_score(model, X, y, k). Chọn bậc đa thức bằng 5-fold CV. - Vẽ learning curve: MSE train và validation theo kích thước tập train cho bậc 3 và bậc 15.
✅ Tiêu chí hoàn thành
- Chỉ số khớp
sklearn.metricsvới sai số1e-9. - Có hình precision-recall theo ngưỡng và ROC, AUC khớp
roc_auc_score. - Bảng MSE theo bậc đa thức có số thật.
- Giải thích được vì sao tập test phải "khóa" tới cuối cùng.
❓ Câu hỏi ôn tập
- 4 ô ma trận nhầm lẫn là gì?
- Precision khác recall ở đâu?
- Overfitting nhận biết qua 2 đường nào?
- Vì sao phải khóa riêng tập test?
🌕 Bạn đã hoàn thành ngày 56. Làm hết bài tập phía trên rồi sang ngày tiếp theo.