Ma trận nhầm lẫn trong học máy với VÍ DỤ
⚡ Tóm tắt thông minh
Ma trận nhầm lẫn là một bảng đo lường hiệu suất cho các mô hình phân loại, so sánh các nhãn dự đoán với các nhãn thực tế đã biết, cho thấy chính xác những lớp nào mà bộ phân loại nhận diện đúng và những lớp nào bị sai.
Ma trận nhầm lẫn là gì?
A ma trận hỗn loạn là một kỹ thuật đo lường hiệu suất cho học máy Phân loại. Đó là một bảng thể hiện hiệu suất của mô hình phân loại trên một tập dữ liệu thử nghiệm mà giá trị thực đã được biết trước. Thuật ngữ ma trận nhầm lẫn khá đơn giản, nhưng các thuật ngữ được xây dựng dựa trên nó có thể gây nhầm lẫn, vì vậy mỗi phần được giải thích bên dưới bằng ngôn ngữ dễ hiểu.
Ma trận này áp dụng cho bất kỳ bộ phân loại có giám sát — hồi quy logistic, cây quyết định, một Mô hình Naive Bayes hoặc một mạng lưới thần kinh sâu — bởi vì nó chỉ so sánh hai cột nhãn: những gì mô hình dự đoán và những gì thực sự đúng.
Bốn kết quả của ma trận nhầm lẫn
Ma trận nhầm lẫn trực quan hóa độ chính xác của bộ phân loại bằng cách so sánh các lớp thực tế và lớp dự đoán. Ma trận nhầm lẫn nhị phân bao gồm các hình vuông:

Bảng trên thể hiện bốn ô vuông mà mọi ma trận nhầm lẫn nhị phân đều chứa:
- TP: Đúng dương tính: Các giá trị dự đoán được dự đoán chính xác là giá trị dương thực tế
- FP: Kết quả dương tính giả: Các giá trị dự đoán không chính xác được dự đoán thành giá trị dương thực tế, tức là các giá trị âm được dự đoán thành dương.
- FN: Kết quả âm tính giả: Các giá trị dương được dự đoán là âm.
- TN: Âm tính thật: Các giá trị dự đoán chính xác được dự đoán là giá trị âm thực tế.
Thống kê đặt tên riêng cho hai ô lỗi. Kết quả dương tính giả là... Lỗi loại I — Mô hình đã đưa ra cảnh báo lẽ ra không bao giờ nên được đưa ra. Kết quả âm tính giả là một lỗi loại II — Mô hình im lặng khi đáng lẽ ra nó phải báo động. Việc biết yếu tố nào tốn kém hơn đối với vấn đề của bạn sẽ quyết định chỉ số nào bạn cần điều chỉnh sau này.
Bạn có thể tính toán độ chính xác của bài kiểm tra từ ma trận nhầm lẫn, như công thức dưới đây cho thấy:
Ví dụ về Ma trận nhầm lẫn
Ma trận nhầm lẫn (Confusion Matrix) là một phương pháp học máy hữu ích cho phép bạn đo lường Độ thu hồi (Recall), Độ chính xác (Precision), Độ đúng (Accuracy) và đường cong AUC-ROC. Ví dụ về quả bóng đá bên dưới minh họa ý nghĩa của các thuật ngữ Dương tính thật (True Positive), Âm tính thật (True Negative), Dương tính giả (False Positive) và Âm tính giả (False Negative) trong ngôn ngữ thường ngày.
Tích cực thực sự:
Bạn đã dự đoán những điều tích cực và dự đoán đó đã trở thành sự thật. Ví dụ, bạn đã dự đoán rằng Pháp sẽ vô địch World Cup, và họ đã thắng.
Tiêu cực thực sự:
Bạn đã dự đoán điều tiêu cực, và điều đó cũng đúng. Bạn đã dự đoán rằng Anh sẽ không thắng, và họ đã thua.
Dương tính giả:
Dự đoán của bạn là tích cực và nó sai.
Bạn đã dự đoán rằng Anh sẽ thắng, nhưng họ đã thua.
Âm tính giả:
Dự đoán của bạn là tiêu cực, và kết quả chứng minh điều đó là sai.
Bạn đã dự đoán rằng Pháp sẽ không thắng, nhưng họ đã thắng.
Bạn nên nhớ rằng từ đầu tiên mô tả liệu dự đoán đúng hay sai (Đúng hoặc Sai) và từ thứ hai mô tả điều mà mô hình dự đoán (Tích cực hoặc Tiêu cực).
Cách tính ma trận nhầm lẫn
Dưới đây là quy trình từng bước để tính ma trận nhầm lẫn trong khai thác dữ liệu:
- Bước 1) Đầu tiên, bạn cần một tập dữ liệu thử nghiệm cùng với các giá trị kết quả mong đợi.
- Bước 2) Dự đoán tất cả các hàng trong tập dữ liệu thử nghiệm.
- Bước 3) So sánh kết quả mong đợi với dự đoán và thống kê:
- Tổng số dự đoán đúng của mỗi lớp.
- Tổng số dự đoán sai của mỗi lớp.
Sau đó, những con số này được sắp xếp theo các phương pháp dưới đây:
- Mỗi hàng trong ma trận tương ứng với một lớp học thực tế.
- Mỗi cột trong ma trận tương ứng với một lớp dự đoán.
- Tổng số lần phân loại đúng và sai được nhập vào bảng.
- Tổng số dự đoán chính xác cho một lớp sẽ được điền vào ô nằm giữa hàng thực tế của lớp đó và cột dự đoán của chính lớp đó — tức là đường chéo.
- Tổng số dự đoán sai cho một lớp sẽ được ghi vào hàng thực tế tương ứng với giá trị của lớp đó và cột dự đoán của lớp mà mô hình đã chọn thay thế.
Vai trò của hàng và cột chỉ là quy ước chứ không phải là quy luật, và một số công cụ vẽ đồ thị sẽ đảo ngược bố cục, vì vậy hãy luôn đọc nhãn trục trước khi diễn giải ma trận. Hướng được sử dụng ở đây — thực tế trên hàng, dự đoán trên cột — là hướng mà scikit-learn tạo ra.
Các thuật ngữ quan trọng khác sử dụng ma trận nhầm lẫn
Khi bốn yếu tố chính đã được xác định, một nhóm các thuật ngữ phụ sẽ mô tả các phần khác nhau của cùng một bảng:
- Giá trị tiên đoán dương (PPV): Điều này rất gần với độ chính xác. Một điểm khác biệt đáng kể giữa hai thuật ngữ là PPV tính đến tỷ lệ hiện mắc. Trong trường hợp các nhóm hoàn toàn cân bằng, giá trị dự đoán dương tính (PPV) cũng giống như độ chính xác.
- Tỷ lệ lỗi không: Thuật ngữ này xác định tần suất dự đoán sai của bạn nếu bạn luôn dự đoán đúng lớp đa số. Bạn có thể coi đây là một chỉ số cơ bản để so sánh với bộ phân loại của mình.
- Điểm F: Điểm F1 là điểm trung bình có trọng số của tỷ lệ dương tính thực (độ thu hồi) và độ chính xác.
- Đường cong ROC: Đường cong ROC biểu thị tỷ lệ dương tính thực sự so với tỷ lệ dương tính giả ở các điểm cắt khác nhau. Nó cũng thể hiện sự đánh đổi giữa độ nhạy (tỷ lệ thu hồi) và độ đặc hiệu, tức là tỷ lệ âm tính thực sự.
- Độ chính xác: Số liệu chính xác cho thấy độ chính xác của lớp tích cực. Nó đo lường khả năng dự đoán của lớp tích cực là chính xác.
Điểm số tối đa là 1 khi bộ phân loại phân loại hoàn hảo tất cả các giá trị dương. Chỉ số Precision thôi thì không hữu ích lắm vì nó bỏ qua lớp âm. Chỉ số này thường được kết hợp với chỉ số Recall. Recall còn được gọi là độ nhạy hoặc tỷ lệ dương tính thực, và được viết như hình bên dưới.
- Nhạy cảm: Độ nhạy tính toán tỷ lệ các lớp tích cực được phát hiện chính xác. Chỉ số này cho thấy mô hình nhận diện lớp tích cực tốt đến mức nào.
Các chỉ số và công thức ma trận nhầm lẫn
Mỗi chỉ số trên đều được tính toán dựa trên bốn tiêu chí giống nhau, vì vậy việc xem xét chúng cùng với câu hỏi mà mỗi chỉ số trả lời sẽ rất hữu ích.
| metric | Công thức | Câu hỏi nó trả lời | Sử dụng nó khi |
|---|---|---|---|
| tính chính xác | (TP + TN) / (TP + TN + FP + FN) | Tổng cộng có bao nhiêu dự đoán chính xác? | Các lớp học tương đối cân bằng. |
| Độ chính xác | TP / (TP + FP) | Khi mô hình đưa ra kết quả tích cực, tần suất chính xác là bao nhiêu? | Báo động giả rất tốn kém. |
| Nhớ lại (Độ nhạy) | TP / (TP + FN) | Trong số tất cả các trường hợp dương tính thực sự, có bao nhiêu trường hợp đã bị phát hiện? | Việc bỏ sót kết quả dương tính rất tốn kém. |
| Tính đặc hiệu | TN / (TN + FP) | Trong tất cả các trường hợp tiêu cực thực tế, có bao nhiêu trường hợp đã được xóa bỏ? | Lớp tiêu cực cũng quan trọng. |
| Điểm F1 | 2 × (Độ chính xác × Thu hồi) / (Độ chính xác + Thu hồi) | Vậy đâu là sự cân bằng giữa hai yếu tố này? | Bạn cần một số cho cả hai |
Giả sử bộ lọc thư rác được kiểm tra trên 100 email và cho kết quả TP = 45, FN = 5, FP = 10 và TN = 40. Độ chính xác là (45 + 40) / 100 = 0.85. Độ chính xác lặp lại là 45 / (45 + 10) = 0.82, độ nhạy là 45 / (45 + 5) = 0.90 và độ đặc hiệu là 40 / (40 + 10) = 0.80. Điểm F1 là 0.86.
Những con số đó kể một câu chuyện mà chỉ một chỉ số chính xác duy nhất không thể che giấu: bộ lọc bắt được 90% thư rác thực sự nhưng lại cách ly sai một trong năm email hợp lệ bị gắn cờ. Liệu sự đánh đổi đó có thể chấp nhận được hay không phụ thuộc vào chi phí của mỗi lỗi, đó chính là lý do tại sao ma trận được báo cáo thay vì chỉ riêng độ chính xác.
Ma trận nhầm lẫn để phân loại nhiều lớp
Các bài toán phân loại hiếm khi chỉ dừng lại ở hai nhãn, và ma trận có thể mở rộng mà không thay đổi hình dạng. Đối với N lớp, bảng trở thành một lưới N×N: đường chéo chứa mọi dự đoán chính xác, và mỗi ô ngoài đường chéo ghi lại chính xác lớp nào bị nhầm lẫn với lớp nào khác.
Một mô hình ba lớp phân loại hình ảnh thành mèo, chó và thỏ tạo ra một lưới 3×3. Nếu ô ở hàng “mèo”, cột “chó” chứa giá trị 12, thì có nghĩa là mười hai hình ảnh mèo đã được dán nhãn là chó. Mức độ chi tiết đó là lý do tại sao ma trận hữu ích hơn điểm số: nó chỉ rõ cặp lớp cụ thể mà mô hình không thể phân tách.
Độ chính xác, độ thu hồi và F1 được định nghĩa cho mỗi lớp bằng cách sử dụng quan điểm "một so với phần còn lại", trong đó lớp đang xét là lớp tích cực và tất cả các lớp khác là tiêu cực. Sau đó, các số liệu cho mỗi lớp được kết hợp theo một trong ba cách sau:
- Trung bình vĩ mô: Tính toán chỉ số cho từng lớp một cách độc lập, sau đó lấy giá trị trung bình không trọng số. Mỗi lớp đều được tính điểm như nhau, vì vậy các lớp hiếm không bị bỏ qua.
- Trung bình vi mô: Tổng hợp số lượng TP, FP và FN trên tất cả các lớp trước khi tính toán chỉ số. Các lớp lớn chiếm ưu thế, và đối với các bài toán nhãn đơn, độ chính xác vi mô, độ thu hồi vi mô và độ chính xác tổng thể là như nhau.
- Trung bình có trọng số: Tính điểm trung bình cho mỗi lớp bằng cách sử dụng số lượng trường hợp thực sự của mỗi lớp làm trọng số, điều này giúp duy trì sự mất cân bằng giữa các lớp.
Chọn chế độ macro khi mọi lớp đều quan trọng như nhau, và chọn chế độ weighted khi sự phân bổ lớp phản ánh lưu lượng truy cập thực tế.
Cách tạo ma trận nhầm lẫn trong Python
Thư viện scikit-learn xây dựng toàn bộ bảng từ hai mảng nhãn, vì vậy không cần phải đếm thủ công. Ví dụ dưới đây so sánh mười nhãn thực với mười dự đoán.
from sklearn.metrics import confusion_matrix y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0] y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 0] cm = confusion_matrix(y_true, y_pred) print(cm)
Lệnh gọi trả về một mảng NumPy 2×2, trong đó hàng 0 là lớp âm tính thực tế và hàng 1 là lớp dương tính thực tế:
[[4 1] [1 4]]
Đọc mảng theo quy ước của scikit-learn ta được TN = 4 (góc trên bên trái), FP = 1 (góc trên bên phải), FN = 1 (góc dưới bên trái) và TP = 4 (góc dưới bên phải). Giải nén bốn giá trị này trên cùng một dòng sẽ tạo ra bản đồ.ping rõ ràng:
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
Để có được độ chính xác, độ thu hồi và F1 cho mọi lớp cùng một lúc, bao gồm cả macro và các giá trị trung bình có trọng số được mô tả ở trên, hãy gọi hàm sau: classification_report() thay vì tính toán từng chỉ số bằng tay:
from sklearn.metrics import classification_report print(classification_report(y_true, y_pred))
Đối với phiên bản có đồ thị, ConfusionMatrixDisplay.from_predictions(y_true, y_pred) Hiển thị cùng một bảng dưới dạng bản đồ nhiệt có nhãn. Danh sách đầy đủ các tham số, bao gồm labels và normalize các tùy chọn được ghi lại trong Tài liệu tham khảo về ma trận nhầm lẫn của scikit-learnBước đánh giá tương tự cũng áp dụng cho các mô hình được xây dựng bằng... TensorFlow, bởi vì chỉ số này chỉ phụ thuộc vào các nhãn được dự đoán.
Tại sao bạn cần ma trận nhầm lẫn?
Dưới đây là những ưu điểm và lợi ích của việc sử dụng ma trận nhầm lẫn.
- Nó cho thấy mô hình phân loại bị nhầm lẫn như thế nào khi đưa ra dự đoán.
- Ma trận nhầm lẫn không chỉ giúp bạn hiểu rõ các lỗi mà bộ phân loại mắc phải, mà còn cho biết cả các loại lỗi mà nó gây ra.
- Phân tích chi tiết này giúp bạn khắc phục hạn chế của việc chỉ sử dụng độ chính xác phân loại.
- Mỗi cột của ma trận nhầm lẫn biểu thị các thể hiện của lớp được dự đoán đó.
- Mỗi hàng của ma trận nhầm lẫn đại diện cho các thể hiện của lớp thực tế.
- Nó biến việc đánh giá mô hình thành một quá trình chẩn đoán, chỉ ra cặp lớp cụ thể cần thêm dữ liệu hoặc một đặc trưng tốt hơn.
Giá trị chẩn đoán đó là lý do tại sao ma trận nhầm lẫn lại nằm ở vị trí trung tâm của giai đoạn đánh giá trong bất kỳ quy trình nào. khoa học dữ liệu quy trình làm việc, và tại sao đây thường là bảng đầu tiên được xem xét trước khi một bộ phân loại được đưa vào sản xuất.


