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

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

Bạn đang xem: Roc curve là gì

1. Giới thiệu

Khi xây cất một quy mô Machine Learning, họ cần một phép reviews giúp xem mô hình áp dụng có hiệu quả ko với nhằm so sánh năng lực của các quy mô. Trong bài viết này, tôi đã reviews những phương pháp Đánh Giá những mô hình classification.

Hiệu năng của một quy mô thường xuyên được reviews dựa trên tập tài liệu kiểm thử (chạy thử data). Cụ thể, trả sử áp ra output của quy mô lúc đầu vào là tập kiểm test được diễn đạt vị vector y_pred - là vector dự đoán thù áp ra output cùng với mỗi thành phần là class được dự đân oán của một điểm tài 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 với vector class thật của tài liệu, được diễn đạt vày vector y_true.

lấy một ví dụ với bài toán thù gồm 3 lớp dữ liệu được gán nhãn là 0, 1, 2. Trong bài bác tân oán thực tế, những class có thể tất cả nhãn bất kỳ, không tốt nhất thiết là số, và không nhất thiết bước đầu từ bỏ 0. Chúng ta hãy trợ thì đưa sử các class được viết số từ bỏ 0 mang đến C-một trong các trường hợp có C lớp dữ liệu. Có 10 điểm tài liệu vào tập kiểm demo với các nhãn thực thụ được trình bày bởi vì y_true = <0, 0, 0, 0, 1, 1, 1, 2, 2, 2>. Giả sử cỗ phân lớp chúng ta đang yêu cầu Reviews dự đân 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 hề ít giải pháp Review một mô hình phân lớp. Tuỳ vào phần lớn bài xích toán thù khác nhau mà lại họ sử dụng các cách thức không giống nhau. Các phương pháp thường được áp dụng là: accuracy score, confusion matrix, ROC curve sầu, Area Under the Curve sầu, Precision và Regọi, F1 score, Top R error, etc.

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

2. Accuracy

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

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

Về cơ bản, confusion matrix thể hiện bao gồm bao nhiêu điểm tài liệu thực sự trực thuộc vào trong 1 class, với được dự đoán là rơi vào trong 1 class. Để hiểu rõ rộng, 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 sản xuất vị những quý hiếm trên vùng 3x3 trung trung khu của bảng.

Ma trận nhận được được điện thoại tư vấn là confusion matrix. Nó là 1 ma trận vuông cùng với size từng chiều bởi số lượng lớp dữ liệu. Giá trị tại hàng máy i, cột thứ j là con số điểm đáng ra ở trong vào class i nhưng lại lại được dự đoán là trực thuộc vào class j. bởi thế, nhìn vào sản phẩm trước tiên (0), ta hoàn toàn có thể thấy được rằng trong những tứ điểm thực sự trực thuộc lớp 0, chỉ có hai điểm được phân nhiều 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ới lớp 2.

Xem thêm: Tại Sao Người Cao Nhất Thế Giới Cần Dùng 'Nạng' Để Đi?

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

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

4. True/False Positive/Negative

4.1. True/False Positive/Negative

Cách Reviews này thường xuyên được vận dụng cho các bài xích tân oán phân lớp có nhì lớp tài liệu. Cụ thể hơn, vào nhị lớp tài liệu này có một lớp nghiêm trọng rộng lớp cơ và rất cần phải dự đoán chính xác. lấy ví dụ như, trong bài tân oán xác minh gồm ung thư hay không thì vấn đề không xẩy ra sót (miss) đặc trưng hơn là vấn đề 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 định bao gồm mìn sâu dưới lòng đất hay là không thì Việc vứt sót cực kỳ nghiêm trọng rộng câu hỏi thông báo nhầm không ít. Hay vào bài tân oán lọc tin nhắn rác rến thì bài toán cho nhầm tin nhắn quan trọng đặc biệt vào thùng rác cực kỳ nghiêm trọng rộng câu hỏi xác định một email rác rến là tin nhắn thường.

Trong đa số bài xích toán thù này, tín đồ ta thường xuyên quan niệm lớp dữ liệu quan tiền trọng rộng cần phải xác định chính xác là lớp Positive (P-dương tính), lớp còn lại được Call là Negative (N-âm tính). Ta định nghĩa True Positive sầu (TP), False Positive sầu (FP), True Negative sầu (TN), False Negative (FN) dựa vào confusion matrix chưa chuẩn chỉnh hoá nhỏng sau:


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


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

Chú ý::

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 mặt hàng luôn bởi 1 và chỉ bao gồm hai lớp tài liệu.

4.2. Receiver Operating Characteristic curve

Trong một số trong những bài xích tân oán, vấn đề tăng tuyệt bớt FNR, FPR hoàn toàn có thể được tiến hành bởi việc biến hóa một ngưỡng (threshold) nào kia. Lấy ví dụ khi ta sử dụng thuật toán Logistic Regression, áp ra output của mô hình có thể là những lớp cứng 0 hay là một, hoặc cũng có thể là các giá trị biểu thị Xác Suất để 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 có thể đem được những quý giá xác xuất này bởi phương thức predict_proba(). Mặc định, ngưỡng được sử dụng là 0.5, tức là một điểm tài liệu x sẽ tiến hành dự đoán thù lâm vào lớp 1 ví như giá trị predict_proba(x) lớn hơn 0.5 và ngược trở lại.

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

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

trái lại, ví như ta mong muốn vứt bỏ còn rộng báo nhầm, tất yếu là ở mức độ nào kia, như bài xích tân oán khẳng định email rác ví dụ điển hình, ta phải tăng threshold lên một trong những to hơn 0.5. lúc kia, phần đông các điểm tài liệu sẽ tiến hành dự đân oán nằm trong lớp 0, tức Negative, và cả TNF với FNR phần lớn tăng lên, tức Tquảng cáo cùng Fquảng bá giảm sút.

vì vậy, ứ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 những điểm (Ftruyền bá, TPR) bên trên vật thị Khi chuyển đổi threshold trường đoản cú 0 tới 1 ta vẫn 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 không duy nhất thiết từ bỏ 0 cho tới 1 trong số bài bác toán thù bao quát. Khoảng cực hiếm này rất cần được đảm bảo an toàn tất cả ngôi trường vừa lòng TPR/Fquảng cáo dìm quý hiếm lớn số 1 tốt bé dại tốt nhất cơ mà nó có thể đạt được).

Dưới đây là một ví dụ với hai lớp dữ liệu. Lớp thứ nhất là lớp Negative tất cả 20 điểm tài liệu, 30 điểm còn lại trực thuộc lớp Positive. Giả sử quy mô đã xét cho các đầu ra của tài liệu (xác suất) được giữ sống đổi mới 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 thông thường, các điểm nằm trong lớp 1 gồm score cao hơn nữa. Tlỗi viện sklearn để giúp bọn họ tính các thresholds cũng giống như Flăng xê và TPR tương ứng:


from sklearn.metrics import roc_curve, aucfquảng cáo, tquảng cáo, 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 *