4. True/False Positive/Negative 5. Precision với Ređiện thoại tư vấn 5.4. Precision-reGọi mang lại bài toán phân lớp các lớp

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

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

1. Giới thiệu

lúc sản xuất một mô hình Machine Learning, họ cần một phép review giúp xem quy mô sử dụng bao gồm tác dụng không cùng để đối chiếu kỹ năng của các mô hình. Trong bài viết này, tôi đã reviews những cách thức reviews những quy mô classification.

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

lấy ví dụ như với bài xích tân oán tất cả 3 lớp tài liệu được gán nhãn là 0, 1, 2. Trong bài xích tân oán thực tế, các class rất có thể tất cả nhãn bất kỳ, ko độc nhất thiết là số, và ko duy nhất thiết ban đầu từ bỏ 0. Chúng ta hãy lâm thời trả sử những class được viết số trường đoản cú 0 cho C-1 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 test với các nhãn thực thụ được miêu tả vị y_true = <0, 0, 0, 0, 1, 1, 1, 2, 2, 2>. Giả sử cỗ phân lớp chúng ta đã nên reviews dự đoán thù nhãn cho các đặc điểm đó là y_pred = <0, 1, 0, 2, 1, 1, 0, 2, 1, 2>.

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

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

2. Accuracy

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

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 thù đúng bên trên tổng số 10 điểm. Vậy ta Kết luận độ đúng mực của mô hình là 0.6 (xuất xắc 60%). Để ý rằng đây là bài bác tân oán cùng với chỉ 3 class, đề nghị độ đúng mực nhỏ tuổi tuyệt nhất vẫn là khoảng tầm 1/3, Lúc toàn bộ những điểm được dự đoán thù là ở trong vào một trong những class làm sao đó.


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 accurachệt như sinh hoạt trên chỉ mang đến bọn họ biết được từng nào phần trăm lượng tài liệu được phân nhiều loại đúng mà không những ra được rõ ràng từng một số loại được phân một số loại ra sao, lớp nào được phân một số loại đúng nhiều độc nhất vô nhị, và tài liệu trực thuộc lớp làm sao hay bị phân loại nhầm vào lớp không giống. Để có thể review được các quý giá này, họ sử dụng một ma trận được Hotline là confusion matrix.

Về cơ phiên bản, confusion matrix biểu thị gồm từng nào điểm tài liệu thực sự nằm trong vào trong 1 class, và được dự đoán là rơi vào trong 1 class. Để làm rõ rộng, hãy coi bảng bên 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 tạo ra vì chưng các quý giá trên vùng 3x3 trung trọng tâm của bảng.

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

Xem thêm: Hot Boy Kiên Hoàng Là Ai ? Trò Pr Lố Và Bị Dân Mạng Bóc Phốt

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

Chúng ta rất có thể suy ra ngay lập tức rằng tổng những phần tử trong toàn ma trận này đó là số điểm vào tập kiểm thử. Các phần tử trên đường chéo cánh của ma trận là số điểm được phân các loại đúng của từng lớp dữ liệu. Từ trên đây có thể suy ra accuracy chủ yếu bằng tổng các bộ phận trê tuyến phố chéo phân chia cho tổng những thành phần của toàn ma trận. Đoạn code sau đây miêu 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 centimet = 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 không chuẩn hoá. Để bao gồm loại nhìn rõ rộng, ta hoàn toàn có thể dùng normalized confuion matrix, tức confusion matrix được chuẩn chỉnh hoá. Để bao gồm normalized confusion matrix, ta lấy từng hàng của unnormalized confusion matrix sẽ được chia mang lại tổng các thành phần bên trên hàng kia. vì thế, ta gồm nhận xét rằng tổng những thành phần bên trên một sản phẩm của normalized confusion matrix luôn luôn bằng 1. Điều này hay không đúng bên trên mỗi 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.cm.Blues): """ This function prints và 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 = centimet.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 các bài tân oán với nhiều lớp tài liệu, bí quyết màn trình diễn bằng màu sắc này khôn xiết có lợi. Các ô màu đậm biểu thị những cực hiếm cao. Một quy mô giỏi sẽ cho một confusion matrix tất cả các phần tử trê tuyến phố chéo bao gồm có mức giá trị mập, các bộ phận còn sót lại có mức giá trị bé dại. Nói bí quyết không giống, khi biểu diễn bằng màu sắc, mặt đường chéo bao gồm màu càng đậm so với phần sót lại vẫn càng tốt. Từ hai hình bên trên ta thấy rằng confusion matrix vẫn chuẩn chỉnh hoá với nhiều đọc tin hơn. Sự không giống nhau được thấy sinh hoạt ô bên trên cùng phía trái. Lớp tài liệu 0 được phân các loại không đích thực tốt tuy thế vào unnormalized confusion matrix, nó vẫn có color đậm nhỏng nhị ô còn lại trên phố chéo bao gồm.

4. True/False Positive/Negative

4.1. True/False Positive/Negative

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

Trong đa số bài bác toán thù này, người ta hay định nghĩa lớp dữ liệu quan tiền trọng rộng cần được xác định đú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 định nghĩa True Positive (TP), False Positive sầu (FP), True Negative (TN), False Negative sầu (FN) dựa vào confusion matrix không chuẩn hoá như sau:


| Predicted | Predicted | | as Positive sầu | as Negative |------------------|---------------------|---------------------| Actual: Positive | 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 xuyên quyên tâm cho TPR, FNR, FPR, 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 sầu | Fquảng bá = FP/(FPhường + TN) | TNR = TN/(FP.. + TN) |------------------|--------------------|--------------------|
False Positive sầu 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 Rate còn được gọi là Miss Detection Rate (tỉ lệ thành phần vứt sót). Trong bài xích toán thù dò mìn, thà báo nhầm còn hơn bỏ sót, có nghĩa là ta hoàn toàn có thể chấp nhận False Alarm Rate cao để đã có được Miss Detection Rate phải chăng.

Crúc ý::

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

4.2. Receiver Operating Characteristic curve

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

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

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

Ngược lại, ví như ta muốn loại trừ còn hơn báo nhầm, tất nhiên là ở mức độ như thế nào kia, như bài xích toán thù xác minh gmail rác rến chẳng hạn, ta phải tăng threshold lên một trong những lớn hơn 0.5. Khi đó, phần nhiều những điểm dữ liệu sẽ tiến hành dự đoán thù ở trong lớp 0, tức Negative, và cả TNF và FNR đều tạo thêm, tức TPR và Flăng xê sụt giảm.

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

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 dữ liệu, 30 điểm sót lại ở trong lớp Positive. Giả sử quy mô vẫn xét cho các đầu ra output của dữ liệu (xác suất) được giữ sinh sống biến hóa 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 phổ biến, các điểm trực thuộc lớp 1 gồm score cao hơn. Thỏng viện sklearn sẽ giúp đỡ bọn họ tính các thresholds tương tự như Fquảng cáo với Ttruyền bá tương ứng:


from sklearn.metrics import roc_curve, aucftruyền thông quảng cáo, tquảng bá, thresholds = roc_curve(y_true, scores, pos_label = 1)print("Thresholds:")print(thresholds)

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 *