4. True/False Positive/Negative 5. Precision cùng ReHotline 5.4. Precision-regọi đến bài xích toán phân lớp những lớp

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

Bạn đang xem: False positive là gì

1. Giới thiệu

Khi xây đắp một quy mô Machine Learning, bọn họ cần một phép Đánh Giá giúp thấy mô hình sử dụng gồm hiệu quả không và nhằm so sánh kĩ năng của những quy mô. Trong nội dung bài viết này, tôi đang ra mắt các phương pháp đánh giá các mô hình classification.

Hiệu năng của một quy mô thường được nhận xét dựa vào tập dữ liệu kiểm demo (test data). Cụ thể, đưa sử Áp sạc ra của quy mô Lúc nguồn vào là tập kiểm thử được biểu thị bởi vì vector y_pred - là vector dự đoán cổng output cùng với mỗi phần tử là class được dự đân oán của một điểm dữ liệu trong tập kiểm test. Ta bắt buộc đối chiếu giữa vector dự đân oán y_pred này cùng với vector class thật của tài liệu, được diễn đạt vày vector y_true.

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

Có rất nhiều bí quyết Review một quy mô phân lớp. Tuỳ vào mọi bài toán thù khác nhau mà bọn 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 & Regọi, F1 score, Top R error, etc.

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

2. Accuracy

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

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


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ư ở bên trên chỉ mang lại bọn họ hiểu rằng từng nào xác suất lượng dữ liệu được phân nhiều loại đúng mà không chỉ là ra được cụ thể mỗi một số loại được phân các loại như thế nào, lớp nào được phân các loại đúng những tuyệt nhất, và tài liệu ở trong lớp làm sao thường hay bị phân các loại nhầm vào lớp khác. Để rất có thể review được những cực hiếm này, bọn họ áp dụng một ma trận được gọi là confusion matrix.

Về cơ bản, confusion matrix thể hiện tất cả từng nào điểm dữ liệu thực sự ở trong vào một class, và được dự đoán là rơi vào một class. Để hiểu rõ hơn, 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 tài liệu. Chúng ta xét ma trận chế tạo bởi những giá trị trên vùng 3x3 trung vai trung phong của bảng.

Ma trận thu được được call là confusion matrix. Nó là 1 ma trận vuông cùng với kích cỡ mỗi chiều bằng số lượng lớp tài liệu. Giá trị trên sản phẩm máy i, cột sản phẩm j là số lượng điểm lẽ ra nằm trong vào class i dẫu vậy lại được dự đoán thù là ở trong vào class j. do đó, chú ý vào hàng thứ nhất (0), ta hoàn toàn có thể thấy được rằng trong số tứ điểm đích thực nằm trong lớp 0, chỉ bao gồm nhì điểm được phân các loại đúng, nhị đ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: Nghĩa Của Từ Etymology Là Gì, Nghĩa Của Từ Etymology, Etymology Là Gì

Chụ ý: Có một số tư liệu khái niệm ngược trở lại, tức cực hiếm tại cột thứ i, hàng máy j là số lượng điểm đúng ra nằm trong vào class i dẫu vậy lại được dự đân oán là trực thuộc vào class j. Khi đó ta sẽ được confusion matrix là ma trận chuyển vị của confusion matrix như cách tôi vẫn làm cho. Tôi chọn cách này vày đây chính là giải pháp tlỗi viện sklearn sử dụng.

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

4. True/False Positive/Negative

4.1. True/False Positive/Negative

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

Trong đều bài bác toán thù này, bạn ta thường có mang lớp tài liệu quan tiền trọng rộng rất cần phải khẳng định đúng là lớp Positive (P-dương tính), lớp sót lại được call là Negative (N-âm tính). Ta định nghĩa True Positive (TP), False Positive (FP), True Negative sầu (TN), False Negative sầu (FN) dựa trên confusion matrix không chuẩn chỉnh hoá nlỗi sau:


| Predicted | Predicted | | as Positive sầu | as Negative |------------------|---------------------|---------------------| Actual: Positive sầu | True Positive sầu (TP) | False Negative (FN) |------------------|---------------------|---------------------| Actual: Negative sầu | False Positive (FP) | True Negative (TN) |------------------|---------------------|---------------------|
Người ta hay quyên tâm mang lại TPR, FNR, Flăng xê, TNR (R - Rate) dựa trên normalized confusion matrix như sau:


| Predicted | Predicted | | as Positive | as Negative sầu |------------------|--------------------|--------------------| Actual: Positive sầu | Tquảng cáo = TP/(TP + FN) | FNR = FN/(TP. + FN) |------------------|--------------------|--------------------| Actual: Negative | Fquảng cáo = FP/(FP + TN) | TNR = TN/(FPhường + TN) |------------------|--------------------|--------------------|
False Positive Rate nói một cách khác là False Alarm Rate (tỉ lệ thành phần báo động nhầm), False Negative sầu Rate còn được gọi là Miss Detection Rate (tỉ trọng quăng quật sót). Trong bài tân oán dò mìn, thà báo nhầm còn hơn quăng quật sót, Có nghĩa là ta hoàn toàn có thể gật đầu False Alarm Rate cao để 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 sẽ suy ra được cột còn lại bởi vì tổng các hàng luôn bằng 1 còn chỉ tất cả hai lớp tài liệu.

4.2. Receiver Operating Characteristic curve

Trong một số bài tân oán, Việc tăng giỏi sút FNR, Flăng xê hoàn toàn có thể được triển khai bởi bài toán biến đổi một ngưỡng (threshold) nào kia. Lấy ví dụ khi ta áp dụng thuật tân oán Logistic Regression, đầu ra của mô hình rất có thể là các lớp cứng 0 hay như là 1, hoặc cũng hoàn toàn có thể là các quý giá trình bày Xác Suất nhằm tài liệu nguồn vào thuộc vào lớp 1. Khi áp dụng thỏng viện sklearn Logistic Regression, ta hoàn toàn có thể mang được các cực hiếm xác xuất này bởi 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 dữ liệu x sẽ được dự đoán lâm vào lớp 1 nếu như quý hiếm predict_proba(x) lớn hơn 0.5 với ngược chở 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 đề ra là có tác dụng vắt làm sao để tăng mức độ báo nhầm (FPR) để giảm mức độ vứt sót (FNR)? Chú ý rằng tăng FNR đồng nghĩa với bài toán giảm Tquảng bá vày tổng của bọn chúng luôn luôn bởi 1.

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

trái lại, giả dụ ta mong muốn thải hồi còn hơn báo nhầm, tất nhiên là ở mức độ làm sao kia, nlỗi bài bác toán thù xác định tin nhắn rác ví dụ điển hình, ta buộc phải tăng threshold lên một vài to hơn 0.5. khi đó, số đông những điểm dữ liệu sẽ được dự đoán thù ở trong lớp 0, tức Negative, cùng cả TNF cùng FNR phần nhiều tạo thêm, tức Tlăng xê và FPR giảm đi.

vì thế, ứng với từng cực hiếm của threshold, ta sẽ nhận được một cặp (FPR, TPR). Biểu diễn những điểm (Flăng xê, TPR) bên trên đồ vật thị khi chuyển đổi threshold trường đoản cú 0 tới 1 ta sẽ nhận được một mặt đường được call là Receiver Operating Characteristic curve hay ROC curve. (Chụ ý rằng khoảng chừng giá trị của threshold ko độc nhất vô nhị thiết trường đoản cú 0 cho tới 1 trong các bài xích toán thù tổng quát. Khoảng cực hiếm này rất cần phải bảo vệ bao gồm ngôi trường thích hợp TPR/Flăng xê thừa nhận quý hiếm lớn nhất hay nhỏ độc nhất vô nhị nhưng nó rất có thể đạt được).

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


# generate simulated datan0, n1 = đôi mươi, 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 phổ biến, những điểm trực thuộc lớp 1 tất cả score cao hơn. Thư viện sklearn để giúp đỡ họ tính những thresholds cũng tương tự Fquảng bá và Tlăng xê tương ứng:


from sklearn.metrics import roc_curve sầu, aucfpr, ttruyền thông quảng cáo, thresholds = roc_curve(y_true, scores, pos_label = 1)print("Thresholds:")print(thresholds)