Bạn có thể tải về cục bộ source code dưới dạng Jupyter Notebook trên phía trên.
Bạn đang xem: Auc là gì
1. Giới thiệu
Khi thành lập một mô hình Machine Learning, họ đề xuất một phnghiền Đánh Giá giúp thấy quy mô sử dụng gồm kết quả không với nhằm so sánh năng lực của những quy mô. Trong bài viết này, tôi đã trình làng các cách thức Reviews các mô hình classification.
Hiệu năng của một quy mô thường được Reviews dựa trên tập tài liệu kiểm test (test data). Cụ thể, trả sử cổng output của mô hình Khi đầu vào là tập kiểm thử được miêu tả vì chưng vector y_pred - là vector dự đoán thù áp ra output với mỗi phần tử là class được dự đoán của một điểm tài liệu trong tập kiểm test. Ta nên so sánh thân vector dự đoán y_pred này với vector class thật của tài liệu, được biểu đạt bởi vì vector y_true.
lấy ví dụ như với bài bác tân oán có 3 lớp tài liệu được gán nhãn là 0, 1, 2. Trong bài toán thực tiễn, những class hoàn toàn có thể bao gồm nhãn bất kỳ, không duy nhất thiết là số, và không tốt nhất thiết bước đầu tự 0. Chúng ta hãy tạm thời mang sử những class được đánh số từ bỏ 0 cho C-1 trong ngôi trường đúng theo 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 sự được miêu tả vày y_true = <0, 0, 0, 0, 1, 1, 1, 2, 2, 2>. Giả sử cỗ phân lớp họ đã yêu cầu nhận xét dự đ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 biện pháp Reviews một mô hình phân lớp. Tuỳ vào số đông bài xích toán khác biệt nhưng mà họ áp dụng các cách thức khác biệt. Các cách thức thường xuyên được áp dụng là: accuracy score, confusion matrix, ROC curve, Area Under the Curve, Precision & Rehotline, 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, cùng Area Under the Curve. Các cách thức sót lại sẽ tiến hành trình bày vào Phần 2.
2. Accuracy
Cách đơn giản và thường được sử dụng độc nhất là accuracy (độ thiết yếu xác). Cách đánh giá này dễ dàng và đơn giản tính tỉ lệ thân số điểm được dự đoán đúng cùng tổng số điểm trong tập dữ liệu kiểm thử.
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 đúng trên toàn bô 10 điểm. Vậy ta kết luận độ đúng mực của quy mô là 0.6 (xuất xắc 60%). Để ý rằng đó là bài bác tân oán cùng với chỉ 3 class, đề xuất độ chính xác bé dại duy nhất sẽ là khoảng chừng 1/3, lúc toàn bộ những điểm được dự đoán là trực thuộc vào một trong những 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 sử dụng accuracy như sinh hoạt trên chỉ mang lại bọn họ biết được từng nào Tỷ Lệ lượng tài liệu được phân một số loại đúng nhưng không chỉ ra được cụ thể mỗi một số loại được phân loại ra sao, lớp như thế nào được phân loại đúng những độc nhất vô nhị, cùng tài liệu trực thuộc lớp như thế nào hay bị phân nhiều loại nhầm vào lớp khác. Để rất có thể reviews được những giá trị này, chúng ta thực hiện một ma trận được hotline là confusion matrix.
Về cơ phiên bản, confusion matrix biểu hiện tất cả bao nhiêu điểm tài liệu thực sự thuộc vào một class, cùng được dự đoán là rơi vào một class. Để nắm rõ rộng, hãy xem 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 dữ liệu. Chúng ta xét ma trận sản xuất vị các giá trị tại vùng 3x3 trung trung khu của bảng.
Ma trận thu được được call là confusion matrix. Nó là một trong ma trận vuông với kích thước từng chiều bởi con số lớp tài liệu. Giá trị tại hàng vật dụng i, cột lắp thêm j là số lượng điểm lẽ ra nằm trong vào class i cơ mà lại được dự đoán thù là thuộc vào class j. do đó, nhìn vào mặt hàng thứ nhất (0), ta hoàn toàn có thể thấy được rằng trong số tứ điểm thực sự trực thuộc lớp 0, chỉ có hai điểm được phân một số loại đúng, nhì điểm sót lại bị phân nhiều loại nhầm vào lớp 1 với lớp 2.
Xem thêm: Truyện Gió Ấm Không Bằng Anh Thâm Tình Full, Đọc Full Truyện Gió Ấm Không Bằng Anh Thâm Tình
Crúc ý: Có một số tư liệu quan niệm ngược trở lại, tức quý hiếm tại cột thiết bị i, hàng đồ vật j là số lượng điểm đúng ra nằm trong vào class i nhưng lại lại được dự đoán là ở trong vào class j. lúc kia ta sẽ tiến hành confusion matrix là ma trận đưa vị của confusion matrix nhỏng phương pháp tôi đã làm. Tôi chọn lựa cách này do trên đây chính là giải pháp tlỗi viện sklearn thực hiện.
Chúng ta hoàn toàn có thể suy ra ngay lập tức 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 demo. Các bộ phận trên phố chéo của ma trận là số điểm được phân nhiều loại đúng của từng lớp tài liệu. Từ phía trên rất có thể suy ra accuracy bao gồm bởi tổng các thành phần trên tuyến đường chéo chia mang đến tổng các thành phần của toàn ma trận. Đoạn code tiếp sau đây trình bày 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
Cách biểu diễn bên trê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á. Để bao gồm cái nhìn thấy được 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á. Để có normalized confusion matrix, ta lấy mỗi mặt hàng của unnormalized confusion matrix sẽ được chia cho tổng các thành phần trên hàng kia. Bởi vậy, ta bao gồm dìm xét rằng tổng những thành phần trên một hàng của normalized confusion matrix luôn luôn bởi 1. Vấn đề này thường xuyên không đúng 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(cm, 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(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(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 bác toán thù với nhiều lớp tài liệu, cách màn biểu diễn bởi màu này rất hữu ích. Các ô màu đậm thể hiện những quý giá cao. Một quy mô tốt vẫn cho 1 confusion matrix có các bộ phận trên phố chéo cánh chính có mức giá trị to, các bộ phận sót lại có giá trị nhỏ tuổi. Nói biện pháp không giống, Khi màn biểu diễn bởi Color, đường chéo cánh tất cả màu càng đậm so 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á với các báo cáo hơn. Sự khác biệt được thấy sống ô bên trên cùng phía bên trái. Lớp dữ liệu 0 được phân các loại ko thực thụ tốt tuy vậy trong unnormalized confusion matrix, nó vẫn có màu đậm như nhì ô sót lại trê tuyến phố chéo chính.
4. True/False Positive/Negative
4.1. True/False Positive/Negative
Cách review này thường được vận dụng cho những bài bác tân oán phân lớp có nhị lớp tài liệu. Cụ thể rộng, vào nhì lớp dữ liệu này có một tấm nghiêm trọng rộng lớp tê và rất cần được dự đân oán chính xác. lấy ví dụ, trong bài bác tân oán xác minh gồm ung thư hay là không thì vấn đề không trở nên sót (miss) đặc biệt rộng là Việc chẩn đoán nhầm âm tính thành dương tính. Trong bài xích toán xác minh có mìn lòng đất hay không thì bài toán vứt sót nghiêm trọng rộng câu hỏi báo động nhầm không hề ít. Hay vào bài tân oán thanh lọc tin nhắn rác rưởi thì vấn đề đến nhầm gmail quan trọng đặc biệt vào thùng rác rưởi rất lớn rộng vấn đề xác minh một tin nhắn rác rưởi là email thường.
Trong phần lớn bài xích tân oán này, bạn ta thường định nghĩa lớp dữ liệu quan tiền trọng hơn rất cần phải khẳng định đúng là lớp Positive (P-dương tính), lớp còn lại được Call là Negative (N-âm tính). Ta quan niệm True Positive sầu (TP), False Positive (FP), True Negative sầu (TN), False Negative sầu (FN) dựa vào 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 sầu | False Positive sầu (FP) | True Negative sầu (TN) |------------------|---------------------|---------------------|
Người ta thường xuyên quan tâm đến Tquảng bá, 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 bá = TP/(TPhường. + FN) | FNR = FN/(TP + FN) |------------------|--------------------|--------------------| Actual: Negative sầu | Fquảng bá = FP/(FPhường. + TN) | TNR = TN/(FPhường + TN) |------------------|--------------------|--------------------|
False Positive sầu Rate còn gọi là False Alarm Rate (tỉ lệ báo động nhầm), False Negative Rate còn được gọi là Miss Detection Rate (tỉ lệ thành phần 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 vứt sót, Có nghĩa là ta có thể đồng ý False Alarm Rate cao nhằm đạt được Miss Detection Rate rẻ.
Chú ý::
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 do tổng các mặt hàng luôn luôn bằng 1 và chỉ còn gồm nhị lớp tài liệu.
4.2. Receiver Operating Characteristic curve
Trong một số bài bác toán, Việc tăng giỏi bớt FNR, Flăng xê hoàn toàn có thể được tiến hành bằng vấn đề thay đổ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 quy mô có thể là những lớp cứng 0 hay 1, hoặc cũng rất có thể là những quý hiếm mô tả Xác Suất để tài liệu đầu vào thuộc vào lớp 1. lúc thực hiện tlỗi viện sklearn Logistic Regression, ta rất có thể mang được các quý hiếm xác xuất này bằng cách làm predict_proba(). Mặc định, ngưỡng được sử dụng là 0.5, Có nghĩa là một điểm tài liệu x sẽ được dự đân oán rơi vào lớp 1 giả dụ quý hiếm predict_proba(x) to hơn 0.5 với ngược lại.
Nếu hiện giờ ta coi lớp một là lớp Positive, lớp 0 là lớp Negative, thắc mắc đưa ra là có tác dụng gắng làm sao nhằm tăng cường độ báo nhầm (FPR) để sút cường độ vứt sót (FNR)? Crúc ý rằng tăng FNR đồng nghĩa cùng với việc sút Tquảng bá 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 cầm cố cực hiếm threshold tự 0.5 xuống một vài bé dại hơn. Chẳng hạn nếu tìm threshold = 0.3, thì phần đa điểm được dự đoán gồm phần trăm cổng output to hơn 0.3 sẽ được dự đân oán là trực thuộc lớp Positive sầu. Nói bí quyết khác, tỉ trọng các điểm được phân một số 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ăng thêm (cột đầu tiên trong ma trận tăng lên). Từ trên đây suy ra cả FNR và TNR rất nhiều sút.
trái lại, giả dụ ta mong muốn thải hồi còn hơn báo nhầm, tất yếu là ở tầm mức độ như thế nào đó, nhỏng bài bác toán xác định tin nhắn rác rến ví dụ điển hình, ta cần tăng threshold lên một trong những lớn hơn 0.5. khi đó, phần lớn các điểm dữ liệu sẽ được dự đoán thuộc lớp 0, tức Negative, cùng cả TNF cùng FNR đầy đủ tăng thêm, tức Tquảng cáo với Flăng xê giảm xuống.
do đó, ứng với từng giá trị của threshold, ta đang thu được một cặp (Ftruyền bá, TPR). Biểu diễn những điểm (Fquảng cáo, TPR) bên trên đồ dùng thị Khi biến hóa threshold từ 0 cho tới 1 ta đang thu được một con đường được Hotline là Receiver Operating Characteristic curve hay ROC curve sầu. (Chụ ý rằng khoảng tầm quý hiếm của threshold ko độc nhất thiết từ bỏ 0 cho tới 1 trong các bài bác toán thù bao quát. Khoảng giá trị này rất cần được bảo đảm an toàn có trường vừa lòng TPR/Ftruyền bá nhấn giá trị lớn nhất hay bé dại tốt nhất nhưng nó có thể đạt được).
Dưới đây là một ví dụ cùng với nhì lớp dữ liệu. Lớp thứ nhất là lớp Negative bao gồm 20 điểm tài liệu, 30 điểm sót lại thuộc lớp Positive. Giả sử mô hình đang xét cho các đầu ra của dữ liệu (xác suất) được lưu nghỉ ngơi biến chuyển 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 chung, các điểm thuộc lớp 1 gồm score cao hơn nữa. Thỏng viện sklearn sẽ giúp họ tính các thresholds cũng như Fquảng cáo và Tquảng bá tương ứng:
from sklearn.metrics import roc_curve, aucfquảng cáo, tpr, thresholds = roc_curve(y_true, scores, pos_label = 1)print("Thresholds:")print(thresholds)