Roc curve là gì
quý khách rất có thể download tổng thể source code bên dưới dạng Jupyter Notebook tại phía trên.
Bạn đang xem: Roc curve là gì
1. Giới thiệu
khi tạo một mô hình Machine Learning, họ yêu cầu một phxay Reviews giúp xem mô hình thực hiện tất cả hiệu quả ko và để đối chiếu tài năng của các mô hình. Trong bài viết này, tôi đã trình làng những phương pháp reviews các quy mô classification.
Hiệu năng của một mô hình thường được đánh giá dựa trên tập dữ liệu kiểm test (thử nghiệm data). Cụ thể, giả sử Áp sạc ra của mô hình khi nguồn vào là tập kiểm test được diễn tả bởi vì vector y_pred - là vector dự đoán thù Áp sạc ra với từng bộ phận là class được dự đân oán của một điểm dữ liệu trong tập kiểm test. Ta đề xuất đối chiếu thân vector dự đân oán y_pred này cùng với vector class thật của tài liệu, được bộc lộ bởi vector y_true.
lấy ví dụ như cùng với bài xích toán tất cả 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ế, các class rất có thể tất cả nhãn bất kỳ, ko nhất thiết là số, với ko độc nhất vô nhị thiết ban đầu trường đoản cú 0. Chúng ta hãy tạm bợ giả sử các class được khắc số tự 0 mang đến C-1 trong các ngôi trường phù hợp tất cả C lớp dữ liệu. Có 10 điểm dữ liệu vào tập kiểm thử với các nhãn đích thực được biểu thị vị y_true = <0, 0, 0, 0, 1, 1, 1, 2, 2, 2>. Giả sử bộ phân lớp họ đang phải reviews 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 phương pháp nhận xét một quy mô phân lớp. Tuỳ vào số đông bài tân oán khác biệt mà chúng ta thực hiện các cách thức khác biệt. Các phương pháp thường được thực hiện là: accuracy score, confusion matrix, ROC curve, Area Under the Curve, 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, và Area Under the Curve. Các phương pháp sót lại sẽ tiến hành trình bày trong Phần 2.
2. Accuracy
Cách đơn giản và dễ dàng cùng hay sử dụng duy nhất là accuracy (độ bao gồm xác). Cách nhận xét này đơn giản và dễ dàng tính tỉ lệ thân số điểm được dự đoán đúng và toàn bô điểm vào tập dữ liệu kiểm demo.
Trong ví dụ này, ta rất có thể đếm được gồm 6 điểm dữ liệu được dự đoán thù đúng trên tổng cộng 10 điểm. Vậy ta tóm lại độ đúng mực của mô hình là 0.6 (tuyệt 60%). Để ý rằng đấy là bài toán cùng với chỉ 3 class, đề nghị độ đúng mực bé dại duy nhất đang là khoảng 1/3, khi toàn bộ những điểm được dự đoán thù là ở trong vào một trong những 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 accuracy hệt như sinh hoạt bên trên chỉ đến họ hiểu rằng từng nào xác suất lượng dữ liệu được phân các loại đúng mà lại không chỉ có ra được rõ ràng mỗi loại được phân nhiều loại ra sao, lớp như thế nào được phân loại đúng nhiều độc nhất vô nhị, và dữ liệu thuộc lớp như thế nào thường hay bị phân các loại nhầm vào lớp khác. Để rất có thể Đánh Giá được các cực hiếm này, bọn họ áp dụng một ma trận được hotline là confusion matrix.
Về cơ phiên bản, confusion matrix miêu tả tất cả bao nhiêu điểm tài liệu thực sự ở trong vào trong 1 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 tài liệu. Chúng ta xét ma trận chế tạo ra vày các quý hiếm trên vùng 3x3 trung tâm của bảng.
Ma trận thu được được Điện thoại tư vấn là confusion matrix. Nó là 1 ma trận vuông với kích cỡ từng chiều bởi số lượng lớp dữ liệu. Giá trị trên mặt hàng thiết bị i, cột vật dụng j là số lượng điểm đúng ra ở trong vào class i nhưng mà lại được dự đoán là thuộc vào class j. Bởi vậy, nhìn vào mặt hàng thứ nhất (0), ta có thể thấy được rằng trong số tư điểm đích thực trực thuộc lớp 0, chỉ tất cả hai điểm được phân một số 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: Top Những Tựa Game Đua Xe Pc Hay Nhất 2021, Top 50 Game Đua Xe Offline Pc Nhẹ Mà Hay Nhất
Crúc ý: Có một số tài liệu có mang ngược trở lại, tức quý hiếm tại cột vật dụng i, hàng máy j là con số điểm lẽ ra ở trong vào class i cơ mà lại được dự đoán thù là nằm trong vào class j. lúc đó 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 vẫn có tác dụng. Tôi chọn cách này bởi phía trên chính là giải pháp tlỗi viện sklearn thực hiện.
Chúng ta rất có thể suy ra tức thì rằng tổng các phần tử trong toàn ma trận này đó là số điểm trong tập kiểm demo. Các bộ phận trên tuyến đường chéo cánh của ma trận là số điểm được phân loại đúng của từng lớp tài liệu. Từ trên đây có thể suy ra accuracy bao gồm bởi tổng những bộ phận trên đường chéo cánh phân tách mang đến tổng các phần tử của toàn ma trận. Đoạn code sau đây bộc lộ cách 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
Cách màn biểu diễn trên đây của confusion matrix còn gọi là unnormalized confusion matrix, tức ma confusion matrix chưa chuẩn hoá. Để tất cả dòng nhìn thấy rõ rộng, ta hoàn toàn có thể cần sử dụng normalized confuion matrix, tức confusion matrix được chuẩn hoá. Để có normalized confusion matrix, ta mang từng mặt hàng của unnormalized confusion matrix sẽ được phân tách đến tổng các thành phần trên sản phẩm kia. bởi thế, ta gồm dìm xét rằng tổng các thành phần trên một mặt hàng của normalized confusion matrix luôn luôn bằng 1. Điều này thường sai trái 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(cm, 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: centimet = centimet.astype("float") / centimet.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(centimet.shape<0>), range(centimet.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 toán thù với rất nhiều lớp dữ liệu, bí quyết màn biểu diễn bởi color này vô cùng bổ ích. Các ô màu sắc đậm biểu đạt các quý giá cao. Một quy mô tốt đang cho một confusion matrix gồm các thành phần trên phố chéo cánh thiết yếu có giá trị to, những phần tử còn sót lại có mức giá trị nhỏ tuổi. Nói cách không giống, lúc màn trình diễn bằng Color, mặt đường chéo cánh gồm màu sắc càng đậm so với phần còn sót lại đang càng xuất sắc. Từ nhì hình trên ta thấy rằng confusion matrix đang chuẩn hoá mang những lên tiếng hơn. Sự không giống nhau được thấy sinh sống ô bên trên cùng bên trái. Lớp tài liệu 0 được phân một số loại ko đích thực xuất sắc nhưng vào unnormalized confusion matrix, nó vẫn đang còn màu sắc đậm như hai ô còn lại trên phố chéo chủ yếu.
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 tân oán phân lớp bao gồm hai lớp dữ liệu. Cụ thể hơn, vào hai lớp tài liệu này có một tấm nghiêm trọng rộng lớp tê cùng cần được dự đoán đúng mực. Ví dụ, vào bài xích toán thù xác minh gồm bệnh ung thư hay không thì bài toán không xẩy ra sót (miss) quan trọng rộng là bài toán chẩn đoán nhầm âm tính thành dương tính. Trong bài toán thù khẳng định có mìn dưới lòng đất hay là không thì Việc bỏ sót cực kỳ nghiêm trọng hơn câu hỏi báo động nhầm không ít. Hay vào bài bác toán thanh lọc tin nhắn rác rưởi thì câu hỏi mang lại nhầm tin nhắn đặc trưng vào thùng rác rất lớn rộng Việc xác định một email rác rưởi là tin nhắn hay.
Trong rất nhiều bài tân oán này, bạn ta thường tư tưởng lớp tài liệu quan trọng hơn cần được xác định chính xác là lớp Positive (P-dương tính), lớp còn lại được Gọi là Negative (N-âm tính). Ta tư tưởng True Positive (TP), False Positive (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 | True Positive (TP) | False Negative (FN) |------------------|---------------------|---------------------| Actual: Negative | False Positive (FP) | True Negative (TN) |------------------|---------------------|---------------------|
Người ta thường quan tâm cho Ttruyền bá, FNR, Fquảng cáo, TNR (R - Rate) dựa vào normalized confusion matrix như sau:
| Predicted | Predicted | | as Positive sầu | as Negative sầu |------------------|--------------------|--------------------| Actual: Positive sầu | Ttruyền bá = TP/(TPhường + FN) | FNR = FN/(TPhường + FN) |------------------|--------------------|--------------------| Actual: Negative sầu | Fquảng cáo = FP/(FPhường + TN) | TNR = TN/(FPhường + TN) |------------------|--------------------|--------------------|
False Positive Rate có cách gọi khác là False Alarm Rate (tỉ lệ thành phần báo động nhầm), False Negative Rate nói một cách khác là Miss Detection Rate (tỉ lệ vứt sót). Trong bài xích toán thù dò mìn, thà báo nhầm còn hơn vứt sót, tức là ta có thể đồng ý False Alarm Rate cao để đã có được Miss Detection Rate rẻ.
Chú ý::
Việc biết một cột của confusion matrix này đã suy ra được cột còn sót lại bởi vì tổng những sản phẩm luôn luôn bằng 1 còn chỉ bao gồm nhị lớp tài liệu.
4.2. Receiver Operating Characteristic curve
Trong một trong những bài tân oán, việc tăng hay bớt FNR, Ftruyền bá rất có thể được thực hiện bởi việc chuyển đổi một ngưỡng (threshold) nào đó. 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 rất có thể là các cực hiếm miêu tả tỷ lệ để tài liệu nguồn vào nằm trong vào lớp 1. lúc sử dụng tlỗi viện sklearn Logistic Regression, ta có thể mang được các giá trị xác xuất này bởi thủ tục predict_proba(). Mặc định, ngưỡng được áp dụng là 0.5, tức là một điểm dữ liệu x sẽ được dự đân oán lâm vào lớp 1 trường hợp giá trị predict_proba(x) lớn hơn 0.5 cùng ngược trở lại.
Nếu bây giờ ta coi lớp một là lớp Positive, lớp 0 là lớp Negative, câu hỏi đưa ra là làm cầm cố làm sao để tăng mức độ báo nhầm (FPR) để sút mức độ bỏ sót (FNR)? Chú ý rằng tăng FNR đồng nghĩa cùng với vấn đề sút Tquảng cáo vị 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 thế giá trị threshold từ bỏ 0.5 xuống một số trong những nhỏ rộng. Chẳng hạn nếu chọn threshold = 0.3, thì phần đông điểm được dự đân oán bao gồm tỷ lệ cổng đầu ra to hơn 0.3 sẽ tiến hành dự đân oán là thuộc lớp Positive. Nói cách không giống, tỉ trọng các điểm được phân các loại là Positive sầu đang tăng thêm, kéo theo cả False Positive Rate và True Positive Rate cùng tăng lên (cột thứ nhất trong ma trận tăng lên). Từ đây suy ra cả FNR và TNR phần đa bớt.
Ngược lại, nếu ta mong loại bỏ còn hơn báo nhầm, tất nhiên là tại mức độ nào đó, nhỏng bài bác toán xác minh tin nhắn rác ví dụ điển hình, ta cần tăng threshold lên một số lớn hơn 0.5. Lúc đó, phần đông những điểm tài liệu sẽ được dự đân oán ở trong lớp 0, tức Negative, cùng cả TNF và FNR hồ hết tăng thêm, tức Ttruyền bá và FPR giảm đi.
bởi thế, ứng cùng với mỗi quý hiếm của threshold, ta đang chiếm được một cặp (FPR, TPR). Biểu diễn các điểm (Flăng xê, TPR) trên vật thị Khi biến đổi threshold từ bỏ 0 tới 1 ta đang thu được một con đường được Điện thoại tư vấn là Receiver Operating Characteristic curve tuyệt ROC curve. (Chú ý rằng khoảng chừng quý hiếm của threshold ko nhất thiết từ 0 cho tới 1 trong số bài xích toán thù bao quát. Khoảng quý giá này cần được bảo vệ có trường đúng theo TPR/Flăng xê dấn cực hiếm lớn số 1 hay nhỏ tuổi duy nhất nhưng nó có thể đạt được).
Xem thêm: Auto - Hack Cf
Dưới đó là một ví dụ cùng với nhì lớp tài liệu. Lớp trước tiên là lớp Negative bao gồm đôi mươi đ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 những đầu ra của dữ liệu (xác suất) được lưu nghỉ ngơi biến đổ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 ở trong lớp 1 bao gồm score cao hơn. Thư viện sklearn sẽ giúp bọn họ tính các thresholds cũng giống như Fquảng cáo cùng Tquảng bá 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)