CONFUSION MATRIX LÀ GÌ

  -  
4. True/False Positive/Negative sầu 5. Precision với ReĐiện thoại tư vấn 5.4. Precision-ređiện thoại tư vấn mang lại bài xích toán thù phân lớp những lớp

Bạn hoàn toàn có thể tải về toàn thể source code bên dưới dạng Jupyter Notebook trên đây.

Bạn đang xem: Confusion matrix là gì

1. Giới thiệu

lúc xuất bản một quy mô Machine Learning, họ đề xuất một phnghiền reviews để thấy mô hình sử dụng tất cả hiệu quả không với để đối chiếu kỹ năng của các mô hình. Trong nội dung bài viết này, tôi đang giới thiệu những phương thức Reviews các quy mô classification.

Hiệu năng của một quy mô hay được Reviews dựa vào tập dữ liệu kiểm thử (chạy thử data). Cụ thể, đưa sử đầu ra output của quy mô Lúc nguồn vào là tập kiểm test được biểu thị bởi vector y_pred - là vector dự đoán đầu ra output với mỗi thành phần là class được dự đoán thù của một điểm tài liệu trong tập kiểm test. Ta yêu cầu so sánh giữa vector dự đân oán y_pred này với vector class thật của tài liệu, được trình bày bởi vì vector y_true.

Ví dụ cùng với bài xích toán gồm 3 lớp dữ liệu được gán nhãn là 0, 1, 2. Trong bài tân oán thực tiễn, những class có thể bao gồm nhãn ngẫu nhiên, ko duy nhất thiết là số, và ko độc nhất vô nhị thiết ban đầu tự 0. Chúng ta hãy lâm thời đưa sử những class được đánh số tự 0 cho C-một trong những ngôi trường đúng theo có C lớp dữ liệu. Có 10 điểm dữ liệu vào tập kiểm demo cùng với những nhãn đích thực được diễn đạt vì y_true = <0, 0, 0, 0, 1, 1, 1, 2, 2, 2>. Giả sử cỗ phân lớp chúng ta đã phải Reviews dự đoán nhãn cho những đặc điểm đó là y_pred = <0, 1, 0, 2, 1, 1, 0, 2, 1, 2>.

Có không ít biện pháp Đánh Giá một mô hình phân lớp. Tuỳ vào những bài xích tân oán khác nhau nhưng mà họ thực hiện những phương pháp không giống nhau. Các phương thức thường được sử dụng là: accuracy score, confusion matrix, ROC curve sầu, Area Under the Curve, Precision và Regọi, F1 score, Top R error, etc.

Trong Phần 1 này, tôi vẫn trình diễn về accuracy score, confusion matrix, ROC curve, cùng Area Under the Curve. Các phương thức còn lại sẽ được trình diễn vào Phần 2.

2. Accuracy

Cách dễ dàng với thường dùng độc nhất là accuracy (độ chính xác). Cách Review này dễ dàng và đơn giản tính tỉ lệ giữa số điểm được dự đoán thù đúng với tổng thể điểm trong tập tài liệu kiểm thử.

Trong ví dụ này, ta hoàn toàn có thể đếm được tất cả 6 điểm dữ liệu được dự đoán đúng trên tổng số 10 điểm. Vậy ta Tóm lại độ đúng mực của quy mô là 0.6 (tuyệt 60%). Để ý rằng đấy là bài bác tân oán với chỉ 3 class, phải độ đúng mực nhỏ dại tốt nhất đã là khoảng chừng 1/3, khi toàn bộ các điểm được dự đân oán là thuộc vào một trong những class làm sao kia.


from __future__ import print_functionimport numpy as np def acc(y_true, y_pred): correct = np.sum(y_true == y_pred) return float(correct)/y_true.shape<0>y_true = np.array(<0, 0, 0, 0, 1, 1, 1, 2, 2, 2>)y_pred = np.array(<0, 1, 0, 2, 1, 1, 0, 2, 1, 2>)print("accuracy = ", acc(y_true, y_pred))

3. Confusion matrix

Cách tính sử dụng accurachệt như sinh sống trên chỉ mang đến chúng ta hiểu rằng bao nhiêu phần trăm lượng dữ liệu được phân các loại đúng nhưng không những ra được rõ ràng từng nhiều loại được phân nhiều loại như thế nào, lớp như thế nào được phân nhiều loại đúng nhiều độc nhất vô nhị, cùng dữ liệu thuộc lớp như thế nào hay bị phân các loại nhầm vào lớp không giống. Để có thể reviews được các giá trị này, chúng ta thực hiện một ma trận được Call là confusion matrix.

Về cơ bản, confusion matrix diễn đạt bao gồm bao nhiêu điểm dữ liệu thực sự thuộc vào một trong những class, cùng được dự đoán là rơi vào một class. Để nắm rõ hơn, hãy xem bảng dưới đây:


Total: 10 | Predicted | Predicted | Predicted | | as: 0 | as: 1 | as: 2 | -----------|-----------|-----------|-----------|--- True: 0 | 2 | 1 | 1 | 4 -----------|-----------|-----------|-----------|--- True: 1 | 1 | 2 | 0 | 3 -----------|-----------|-----------|-----------|--- True: 2 | 0 | 1 | 2 | 3 -----------|-----------|-----------|-----------|---
Có tổng số 10 điểm dữ liệu. Chúng ta xét ma trận chế tạo bởi những quý giá tại vùng 3x3 trung trung tâm của bảng.

Ma trận thu được được Gọi là confusion matrix. Nó là 1 ma trận vuông với kích thước mỗi chiều bằng con số lớp tài liệu. Giá trị tại hàng trang bị i, cột thứ j là con số điểm đáng ra nằm trong vào class i tuy vậy lại được dự đoán là trực thuộc vào class j. Vậy nên, quan sát vào mặt hàng trước tiên (0), ta có thể thấy được rằng trong các bốn điểm thực sự ở trong lớp 0, chỉ gồm nhị điểm được phân loại đúng, hai điểm còn lại bị phân một số loại nhầm vào lớp 1 và lớp 2.

Xem thêm: Tóm Tắt Cốt Truyện The Witcher, The Witcher 1

Crúc ý: Có một vài tư liệu tư tưởng trở lại, tức cực hiếm trên cột thứ i, hàng lắp thêm j là số lượng điểm đáng ra ở trong vào class i nhưng lại được dự đoán là thuộc vào class j. khi kia ta sẽ được confusion matrix là ma trận đưa vị của confusion matrix nhỏng cách tôi vẫn làm cho. Tôi chọn cách này vì chưng trên đây chính là biện pháp thư viện sklearn áp dụng.

Chúng ta có thể suy ra ngay lập tức rằng tổng các bộ phận vào toàn ma trận này đó là số điểm trong tập kiểm test. Các phần tử trên phố chéo cánh của ma trận là số điểm được phân một số loại đúng của mỗi lớp tài liệu. Từ trên đây có thể suy ra accuracy chính bởi tổng các phần tử trê tuyến phố chéo cánh phân tách mang đến tổng những bộ phận của toàn ma trận. Đoạn code dưới đây mô tả cách tính confusion matrix:


def my_confusion_matrix(y_true, y_pred): N = np.unique(y_true).shape<0> # number of classes cm = np.zeros((N, N)) for n in range(y_true.shape<0>): cm, y_pred> += 1 return cm cnf_matrix = my_confusion_matrix(y_true, y_pred)print("Confusion matrix:")print(cnf_matrix)print(" Accuracy:", np.diagonal(cnf_matrix).sum()/cnf_matrix.sum())
Cách màn trình diễn trên trên đây của confusion matrix nói một cách khác là unnormalized confusion matrix, tức ma confusion matrix chưa chuẩn hoá. Để có cái nhìn thấy được rõ rộng, ta rất có thể cần sử dụng normalized confuion matrix, tức confusion matrix được chuẩn hoá. Để bao gồm normalized confusion matrix, ta rước mỗi mặt hàng của unnormalized confusion matrix sẽ tiến hành phân chia cho tổng những bộ phận bên trên sản phẩm đó. Vậy nên, ta có thừa nhận xét rằng tổng những thành phần bên trên một hàng của normalized confusion matrix luôn luôn bằng 1. Điều này thường không đúng bên trên từng cột. Dưới đó là cách tính normalized confusion matrix:


normalized_confusion_matrix = cnf_matrix/cnf_matrix.sum(axis = 1, keepdims = True)print(" Confusion matrix (with normalizatrion:)")print(normalized_confusion_matrix)

import matplotlib.pyplot as pltimport itertoolsdef plot_confusion_matrix(centimet, classes, normalize=False, title="Confusion matrix", cmap=plt.centimet.Blues): """ This function prints và plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ if normalize: cm = centimet.astype("float") / centimet.sum(axis=1, keepdims = True) plt.imshow(centimet, interpolation="nearest", cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) fmt = ".2f" if normalize else "d" thresh = cm.max() / 2. for i, j in itertools.product(range(centimet.shape<0>), range(cm.shape<1>)): plt.text(j, i, format(cm, fmt), horizontalalignment="center", color="white" if cm > thresh else "black") plt.tight_layout() plt.ylabel("True label") plt.xlabel("Predicted label")# Plot non-normalized confusion matrixclass_names = <0, 1, 2>plt.figure()plot_confusion_matrix(cnf_matrix, classes=class_names, title="Confusion matrix, without normalization")# Plot normalized confusion matrixplt.figure()plot_confusion_matrix(cnf_matrix, classes=class_names, normalize=True, title="Normalized confusion matrix")plt.show()

*
*

Với những bài xích tân oán với tương đối nhiều lớp tài liệu, phương pháp màn biểu diễn bởi màu này khôn xiết hữu ích. Các ô màu sắc đậm biểu đạt những cực hiếm cao. Một quy mô tốt đã cho một confusion matrix gồm những phần tử trên tuyến đường chéo chủ yếu có mức giá trị lớn, những phần tử còn lại có mức giá trị nhỏ dại. Nói giải pháp không giống, Lúc màn biểu diễn bởi màu sắc, con đường chéo gồm màu càng đậm so với phần còn lại đã càng giỏi. Từ hai hình bên trên ta thấy rằng confusion matrix đã chuẩn chỉnh hoá có nhiều báo cáo rộng. Sự khác nhau được thấy sinh hoạt ô bên trên thuộc phía trái. Lớp tài liệu 0 được phân loại ko đích thực xuất sắc dẫu vậy vào unnormalized confusion matrix, nó vẫn có màu sắc đậm như nhì ô sót lại trên tuyến đường chéo cánh thiết yếu.

4. True/False Positive/Negative

4.1. True/False Positive/Negative

Cách Review này thường được vận dụng cho các bài xích toán thù phân lớp bao gồm nhì lớp dữ liệu. Cụ thể hơn, trong nhị lớp dữ liệu này còn có một tờ nghiêm trọng rộng lớp cơ cùng rất cần được dự đoán thù chính xác. lấy một ví dụ, trong bài bác tân oán xác định gồm bệnh ung thư hay không thì bài toán không trở nên sót (miss) đặc biệt quan trọng rộng là Việc chẩn đoán nhầm âm tính thành dương tính. Trong bài xích toán thù xác minh bao gồm mìn dưới lòng đất hay là không thì Việc bỏ sót nghiêm trọng hơn câu hỏi thông báo nhầm rất nhiều. Hay vào bài bác toán thanh lọc tin nhắn rác rến thì Việc mang đến nhầm email đặc trưng vào thùng rác rến nghiêm trọng rộng việc khẳng định một gmail rác là email thường.

Trong số đông bài bác toán thù này, bạn ta hay định nghĩa lớp tài liệu quan lại trọng hơn rất cần được khẳng định chính xác là lớp Positive (P-dương tính), lớp sót lại được Call là Negative (N-âm tính). Ta quan niệm True Positive (TP), False Positive sầu (FP), True Negative sầu (TN), False Negative (FN) dựa trên confusion matrix chưa chuẩn hoá nhỏng sau:


| Predicted | Predicted | | as Positive sầu | as Negative sầu |------------------|---------------------|---------------------| Actual: Positive sầu | True Positive (TP) | False Negative sầu (FN) |------------------|---------------------|---------------------| Actual: Negative | False Positive sầu (FP) | True Negative sầu (TN) |------------------|---------------------|---------------------|
Người ta thường quyên tâm đến Tquảng bá, FNR, FPR, TNR (R - Rate) dựa vào normalized confusion matrix nlỗi sau:


| Predicted | Predicted | | as Positive sầu | as Negative sầu |------------------|--------------------|--------------------| Actual: Positive sầu | Tlăng xê = TP/(TP + FN) | FNR = FN/(TP + FN) |------------------|--------------------|--------------------| Actual: Negative | Flăng xê = FP/(FP. + TN) | TNR = TN/(FP.. + TN) |------------------|--------------------|--------------------|
False Positive sầu Rate còn gọi là False Alarm Rate (tỉ lệ thành phần thông báo nhầm), False Negative Rate còn gọi là Miss Detection Rate (tỉ trọng quăng quật sót). Trong bài xích toán thù dò mìn, thà báo nhầm còn hơn quăng quật sót, tức là ta hoàn toàn có thể gật đầu đồng ý False Alarm Rate cao nhằm đạt được Miss Detection Rate thấp.

Chụ ý::

Việc biết một cột của confusion matrix này đã suy ra được cột sót lại vì tổng các sản phẩm luôn bởi 1 và chỉ còn có hai lớp dữ liệu.

4.2. Receiver Operating Characteristic curve

Trong một số trong những bài xích toán, câu hỏi tăng giỏi giảm FNR, FPR có thể được thực hiện bởi việc chuyển đổi một ngưỡng (threshold) nào kia. Lấy ví dụ khi ta sử dụng thuật toán thù Logistic Regression, đầu ra output của quy mô hoàn toàn có thể là những lớp cứng 0 hay 1, hoặc cũng hoàn toàn có thể là những giá trị diễn tả Xác Suất để tài liệu nguồn vào thuộc vào lớp 1. lúc thực hiện thư viện sklearn Logistic Regression, ta rất có thể lấy được những cực hiếm xác xuất này bằng cách tiến hành predict_proba(). Mặc định, ngưỡng được sử dụng là 0.5, có nghĩa là một điểm tài liệu x sẽ tiến hành dự đoán lâm vào hoàn cảnh lớp 1 nếu giá trị predict_proba(x) to hơn 0.5 cùng ngược trở lại.

Nếu bây chừ ta coi lớp một là lớp Positive, lớp 0 là lớp Negative, câu hỏi đặt ra là làm cho nỗ lực như thế nào để tăng mức độ báo nhầm (FPR) để bớt mức độ bỏ sót (FNR)? Crúc ý rằng tăng FNR đồng nghĩa với vấn đề giảm Tquảng bá bởi tổng của bọn chúng luôn luôn bằng 1.

Một kỹ thuật dễ dàng là ta cụ quý hiếm threshold trường đoản cú 0.5 xuống một trong những nhỏ dại rộng. Chẳng hạn nếu tìm threshold = 0.3, thì đầy đủ điểm được dự đoán tất cả phần trăm cổng đầu ra to hơn 0.3 sẽ được dự đoán thù là trực thuộc lớp Positive. Nói bí quyết không giống, tỉ lệ các điểm được phân nhiều loại là Positive sầu sẽ tạo thêm, kéo theo cả False Positive Rate và True Positive Rate thuộc tăng lên (cột trước tiên vào ma trận tăng lên). Từ phía trên suy ra cả FNR cùng TNR đa số giảm.

Ngược lại, giả dụ ta hy vọng đào thải còn rộng báo nhầm, tất nhiên là ở mức độ làm sao đó, nhỏng bài toán khẳng định tin nhắn rác rưởi ví dụ điển hình, ta đề xuất tăng threshold lên một vài to hơn 0.5. lúc đó, hầu hết các điểm dữ liệu sẽ được dự đoán thù nằm trong lớp 0, tức Negative, và cả TNF cùng FNR hầu hết tạo thêm, tức Tlăng xê và FPR sụt giảm.

Bởi vậy, ứng cùng với mỗi quý giá của threshold, ta đang thu được một cặp (Fquảng bá, TPR). Biểu diễn những điểm (Flăng xê, TPR) trên thứ thị Lúc chuyển đổi threshold trường đoản cú 0 tới 1 ta sẽ nhận được một đường được Gọi là Receiver Operating Characteristic curve tuyệt ROC curve sầu. (Chú ý rằng khoảng cực hiếm của threshold ko độc nhất vô nhị thiết tự 0 tới 1 trong số bài tân oán tổng thể. Khoảng quý hiếm này rất cần phải đảm bảo có trường vừa lòng TPR/Fquảng cáo dấn quý hiếm lớn nhất hay nhỏ dại duy nhất nhưng nó rất có thể đạt được).

Xem thêm: Trạm Thu Phí Tiếng Anh Là Gì ? Trạm Thu Phí Tiếng Anh Là Gì

Dưới đó là một ví dụ với nhị lớp dữ liệu. Lớp trước tiên là lớp Negative tất cả 20 điểm tài liệu, 30 điểm còn sót lại thuộc lớp Positive. Giả sử mô hình đang xét cho những cổng đầu ra của tài liệu (xác suất) được lưu lại sống trở thành scores.


# generate simulated datan0, n1 = trăng tròn, 30score0 = np.random.rand(n0)/2label0 = np.zeros(n0, dtype = int)score1 = np.random.rand(n1)/2 + .2label1 = np.ones(n1, dtype = int)scores = np.concatenate((score0, score1))y_true = np.concatenate((label0, label1))print("True labels:")print(y_true)print(" Scores:")print(scores)
Nhìn thông thường, các điểm ở trong lớp 1 tất cả score cao hơn. Thư viện sklearn sẽ giúp bọn họ tính các thresholds cũng tương tự Ftruyền bá với Tquảng cáo tương ứng:


from sklearn.metrics import roc_curve sầu, aucfquảng bá, tquảng bá, thresholds = roc_curve(y_true, scores, pos_label = 1)print("Thresholds:")print(thresholds)