4. True/False Positive/Negative 5. Precision và ReHotline 5.4. Precision-rehotline mang lại bài bác toán thù phân lớp các lớp

quý khách hàng có thể download toàn thể source code bên dưới dạng Jupyter Notebook tại trên đây.

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

1. Giới thiệu

khi thành lập một quy mô Machine Learning, họ yêu cầu một phxay Reviews giúp thấy mô hình sử dụng tất cả kết quả ko với nhằm đối chiếu khả năng của các mô hình. Trong bài viết này, tôi đã ra mắt những phương thức Đánh Giá những mô hình classification.

Hiệu năng của một quy mô thường xuyên được review dựa vào tập dữ liệu kiểm thử (thử nghiệm data). Cụ thể, giả sử đầu ra của quy mô Lúc đầu vào là tập kiểm thử được mô tả do vector y_pred - là vector dự đân oán cổng đầu ra cùng với mỗi bộ phận là class được dự đoán thù của một điểm dữ liệu vào tập kiểm demo. Ta yêu cầu đối chiếu giữa vector dự đoán y_pred này cùng với vector class thật của tài liệu, được biểu đạt do vector y_true.

lấy ví dụ như cùng với bài xích tân oán gồm 3 lớp dữ liệu được gán nhãn là 0, 1, 2. Trong bài xích tân oán thực tế, những class hoàn toàn có thể gồm nhãn bất kỳ, ko duy nhất thiết là số, và không duy nhất thiết bắt đầu từ 0. Chúng ta hãy nhất thời trả sử những class được khắc số trường đoản cú 0 đến C-một trong các trường thích hợp gồm C lớp tài liệu. Có 10 điểm dữ liệu trong tập kiểm thử cùng với những nhãn thực thụ được mô tả vì chưng y_true = <0, 0, 0, 0, 1, 1, 1, 2, 2, 2>. Giả sử cỗ phân lớp họ sẽ đề nghị đánh giá dự đoán nhãn cho những đặc điểm này là y_pred = <0, 1, 0, 2, 1, 1, 0, 2, 1, 2>.

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

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

2. Accuracy

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

Trong ví dụ này, ta có thể đếm được bao gồm 6 điểm dữ liệu được dự đoán đúng trên tổng số 10 điểm. Vậy ta Kết luận độ chính xác của mô hình là 0.6 (giỏi 60%). Để ý rằng đó là bài bác toán cùng với chỉ 3 class, cần độ đúng mực bé dại duy nhất đã là khoảng chừng 1/3, Lúc toàn bộ những điểm được dự đoán là thuộc vào một class như thế nào 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 thực hiện accuracgiống như sống trên chỉ mang đến chúng ta biết được bao nhiêu Tỷ Lệ lượng tài liệu được phân một số loại đúng cơ mà không chỉ là ra được rõ ràng từng các loại được phân một số loại ra sao, lớp như thế nào được phân các loại đúng các độc nhất, và dữ liệu ở trong lớp như thế nào thường bị phân loại nhầm vào lớp khác. Để rất có thể nhận xét được những giá trị này, chúng ta sử dụng một ma trận được Gọi là confusion matrix.

Về cơ bạn dạng, confusion matrix miêu tả tất cả từng nào điểm dữ liệu thực sự trực thuộc vào một class, và được dự đoán là rơi vào trong 1 class. Để hiểu rõ rộng, hãy coi 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 tạo ra bởi các cực hiếm trên vùng 3x3 trung trung tâm của bảng.

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

Xem thêm: Thông Tin Tiểu Sử Tiến Luật Là Ai? Tiểu Sử, Sự Nghiệp Và Hôn Nhân Nam Diễn Viên

Chú ý: Có một trong những tài liệu quan niệm ngược chở lại, tức quý giá trên cột vật dụng i, hàng lắp thêm j là con số điểm lẽ ra thuộc vào class i nhưng mà lại được dự đoán là trực thuộc vào class j. Khi kia ta sẽ tiến hành confusion matrix là ma trận gửi vị của confusion matrix nlỗi giải pháp tôi sẽ có tác dụng. Tôi chọn cách này vì chưng phía trên chính là cách thỏng viện sklearn áp dụng.

Chúng ta có thể suy ra ngay lập tức rằng tổng những thành phần trong toàn ma trận này đó là số điểm vào tập kiểm test. Các phần tử trên phố chéo của ma trận là số điểm được phân nhiều loại đúng của mỗi lớp dữ liệu. Từ đây có thể suy ra accuracy chính bằng tổng các phần tử trên phố chéo phân tách mang lại tổng những phần tử của toàn ma trận. Đoạn code tiếp sau đây mô tả phương pháp 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 centimet 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 trình diễn bên trên đây của confusion matrix còn được gọi là unnormalized confusion matrix, tức ma confusion matrix không chuẩn hoá. Để có mẫu nhìn rõ rộng, ta rất có thể cần sử dụng normalized confuion matrix, tức confusion matrix được chuẩn chỉnh hoá. Để gồm normalized confusion matrix, ta mang mỗi hàng của unnormalized confusion matrix sẽ tiến hành phân tách đến tổng những bộ phận bên trên hàng đó. Như vậy, ta bao gồm thừa nhận xét rằng tổng những phần tử trên một hàng của normalized confusion matrix luôn bởi 1. Vấn đề này thường xuyên sai trái bên trên từng cột. Dưới đó là phương pháp 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 & plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ if normalize: cm = centimet.astype("float") / cm.sum(axis=1, keepdims = True) plt.imshow(cm, 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(cm.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 bác toán với nhiều lớp dữ liệu, phương pháp trình diễn bằng màu này cực kỳ bổ ích. Các ô màu đậm trình bày các cực hiếm cao. Một quy mô giỏi vẫn cho 1 confusion matrix tất cả các phần tử trên tuyến đường chéo thiết yếu có mức giá trị phệ, những bộ phận còn lại có mức giá trị nhỏ. Nói biện pháp khác, lúc màn trình diễn bởi Color, con đường chéo bao gồm màu càng đậm đối với phần còn sót lại đã càng tốt. Từ nhì hình trên ta thấy rằng confusion matrix đã chuẩn chỉnh hoá có những đọc tin rộng. Sự khác nhau được thấy ngơi nghỉ ô bên trên cùng phía bên trái. Lớp dữ liệu 0 được phân nhiều loại ko thực thụ tốt nhưng mà vào unnormalized confusion matrix, nó vẫn đang còn màu sắc đậm nlỗi nhì ô còn sót lại trên đường chéo thiết yếu.

4. True/False Positive/Negative

4.1. True/False Positive/Negative

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

Trong đa số bài tân oán này, người ta thường xuyên khái niệm lớp tài liệu quan lại trọng hơn cần phải xác minh đúng là lớp Positive (P-dương tính), lớp còn sót lại được Gọi là Negative (N-âm tính). Ta khái niệm True Positive (TP), False Positive (FP), True Negative sầu (TN), False Negative (FN) dựa trên confusion matrix chưa chuẩn hoá nlỗi sau:


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


| Predicted | Predicted | | as Positive sầu | as Negative |------------------|--------------------|--------------------| Actual: Positive sầu | Ttruyền bá = TP/(TP + FN) | FNR = FN/(TPhường + FN) |------------------|--------------------|--------------------| Actual: Negative | FPR = FP/(FP. + TN) | TNR = TN/(FP.. + TN) |------------------|--------------------|--------------------|
False Positive Rate còn gọi là False Alarm Rate (tỉ trọng thông báo nhầm), False Negative sầu Rate còn gọi là Miss Detection Rate (tỉ lệ bỏ sót). Trong bài bác tân oán dò mìn, thà báo nhầm còn rộng quăng quật sót, tức là ta rất có thể gật đầu đồng ý False Alarm Rate cao nhằm giành được Miss Detection Rate phải chăng.

Crúc ý::

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

4.2. Receiver Operating Characteristic curve

Trong một vài bài toán, vấn đề tăng hay giảm FNR, Fquảng bá hoàn toàn có thể được triển khai bởi câu hỏi biến đổi một ngưỡng (threshold) làm sao kia. Lấy ví dụ khi ta áp dụng thuật toán Logistic Regression, đầu ra của quy mô hoàn toàn có thể là những lớp cứng 0 hay là một, hoặc cũng rất có thể là những quý giá biểu đạt xác suất để tài liệu đầu vào ở trong vào lớp 1. khi sử dụng tlỗi viện sklearn Logistic Regression, ta rất có thể mang được những quý hiếm xác xuất này bởi cách tiến hành predict_proba(). Mặc định, ngưỡng được áp dụng là 0.5, có nghĩa là một điểm tài liệu x sẽ được dự đoán lâm vào lớp 1 ví như quý hiếm predict_proba(x) to hơn 0.5 với ngược chở lại.

Nếu bây giờ ta coi lớp 1 là lớp Positive, lớp 0 là lớp Negative, câu hỏi đặt ra là có tác dụng cầm cố như thế nào để tăng cường độ báo nhầm (FPR) để giảm mức độ quăng quật sót (FNR)? Chụ ý rằng tăng FNR đồng nghĩa tương quan với việc bớt TPR do tổng của chúng luôn bằng 1.

Một nghệ thuật đơn giản và dễ dàng là ta nỗ lực giá trị threshold trường đoản cú 0.5 xuống một số nhỏ hơn. Chẳng hạn nếu lọc threshold = 0.3, thì hầu hết điểm được dự đoán thù gồm tỷ lệ đầu ra lớn hơn 0.3 sẽ được dự đân oán là nằm trong lớp Positive sầu. Nói cách không giống, tỉ lệ thành phần các điểm được phân một số loại là Positive sầu đã tăng lên, kéo theo cả False Positive Rate cùng True Positive Rate thuộc tạo thêm (cột đầu tiên trong ma trận tăng lên). Từ đây suy ra cả FNR với TNR phần đa bớt.

Ngược lại, giả dụ ta ao ước loại trừ 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 gmail rác chẳng hạn, ta đề xuất tăng threshold lên một số to hơn 0.5. Lúc đó, phần lớn những điểm dữ liệu sẽ tiến hành dự đân oán ở trong lớp 0, tức Negative, cùng cả TNF với FNR đông đảo tạo thêm, tức TPR và FPR giảm xuống.

Như vậy, ứng cùng với mỗi cực hiếm của threshold, ta đã nhận được một cặp (Flăng xê, TPR). Biểu diễn các điểm (FPR, TPR) trên vật dụng thị Lúc thay đổi threshold tự 0 cho tới 1 ta vẫn nhận được một đường được điện thoại tư vấn là Receiver Operating Characteristic curve giỏi ROC curve. (Chụ ý rằng khoảng chừng quý giá của threshold không tuyệt nhất thiết trường đoản cú 0 cho tới 1 trong số bài bác toán thù tổng quát. Khoảng cực hiếm này rất cần được bảo đảm tất cả ngôi trường hợp TPR/FPR nhận giá trị lớn nhất tuyệt nhỏ tuyệt nhất mà nó hoàn toàn có thể đạt được).

Xem thêm: Nghĩa Của Từ Pic Là Gì? Ý Nghĩa Của Từ Pic Định Nghĩa: Người Chịu Trách Nhiệm

Dưới đấy là một ví dụ với nhì lớp dữ liệu. Lớp đầu tiên là lớp Negative tất cả trăng tròn điểm dữ 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 đầu ra output của dữ liệu (xác suất) được lưu giữ ngơi nghỉ thay đổi scores.


# generate simulated datan0, n1 = 20, 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 bình thường, những điểm thuộc lớp 1 gồm score cao hơn nữa. Tlỗi viện sklearn để giúp đỡ bọn họ tính những thresholds cũng giống như Flăng xê và 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)

Chuyên mục: Ý NGHĨA

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *