Roc curve là gì

4. True/False Positive/Negative 5. Precision với ReCall 5.4. Precision-regọi mang lại bài toán thù phân lớp nhiều lớp

quý khách hàng hoàn toàn có thể tải về toàn bộ source code bên dưới dạng Jupyter Notebook trên 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, chúng ta buộc phải một phxay đánh giá để xem mô hình áp dụng có hiệu quả không với để so sánh tài năng của các mô hình. Trong bài viết này, tôi vẫn reviews các phương pháp reviews các mô hình classification.

Hiệu năng của một quy mô hay được Reviews dựa trên tập tài liệu kiểm demo (thử nghiệm data). Cụ thể, đưa sử cổng output của mô hình Khi đầu vào là tập kiểm test được mô tả vị vector y_pred - là vector dự đoán đầu ra output với mỗi phần tử là class được dự đân oán của một điểm dữ liệu vào tập kiểm thử. Ta phải đối chiếu thân vector dự đân oán y_pred này với vector class thật của dữ liệu, được mô tả vày vector y_true.

lấy ví dụ với bài tân oán bao 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ế, các class có thể tất cả nhãn ngẫu nhiên, ko duy nhất thiết là số, cùng ko tuyệt nhất thiết bước đầu trường đoản cú 0. Chúng ta hãy lâm thời giả sử những class được đánh số trường đoản cú 0 mang lại C-một trong những trường đúng theo tất cả C lớp dữ liệu. Có 10 điểm dữ liệu trong tập kiểm thử với các nhãn thực thụ được biểu hiện vì chưng y_true = <0, 0, 0, 0, 1, 1, 1, 2, 2, 2>. Giả sử bộ phân lớp chúng ta đã yêu cầu Review dự đoán nhãn cho các đặc điểm đó là y_pred = <0, 1, 0, 2, 1, 1, 0, 2, 1, 2>.

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

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

2. Accuracy

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

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

Về cơ bạn dạng, confusion matrix trình bày gồm bao nhiêu đ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 một class. Để làm 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 tạo ra do những giá trị tại vùng 3x3 trung trọng điể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 với kích thước mỗi chiều bởi con số lớp tài liệu. Giá trị tại sản phẩm lắp thêm i, cột máy j là con số điểm đáng ra ở trong vào class i nhưng lại được dự đoán là thuộc vào class j. bởi thế, chú ý vào mặt hàng trước tiên (0), ta rất có thể thấy được rằng trong những tứ điểm đích thực nằm trong lớp 0, chỉ có nhị điểm được phân các loại đúng, hai điểm sót 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: Sandwich Là Gì, Nghĩa Của Từ Sandwich, Sandwich Là Gì, Nghĩa Của Từ Sandwich

Chú ý: Có một số trong những tài liệu khái niệm ngược chở lại, tức quý giá trên cột vật dụng i, hàng trang bị j là con số điểm đúng ra thuộc vào class i nhưng mà lại được dự đoán thù là trực thuộc vào class j. lúc kia ta sẽ được confusion matrix là ma trận gửi vị của confusion matrix như bí quyết tôi vẫn có tác dụng. Tôi chọn cách này do đây chính là cách tlỗi viện sklearn áp dụng.

Chúng ta rất có thể suy ra tức thì rằng tổng các thành phần trong toàn ma trận này chính là số điểm vào tập kiểm demo. Các phần tử trê tuyến phố chéo cánh 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 rất có thể suy ra accuracy thiết yếu bằng tổng những bộ phận trê tuyến phố chéo phân chia mang lại tổng những phần tử của toàn ma trận. Đoạn code tiếp sau đây miêu tả 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, 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 đây của confusion matrix còn gọi là unnormalized confusion matrix, tức ma confusion matrix chưa chuẩn hoá. Để bao gồm dòng nhìn rõ rộng, ta rất có thể cần sử dụng normalized confuion matrix, tức confusion matrix được chuẩn chỉnh hoá. Để tất cả normalized confusion matrix, ta đem mỗi mặt hàng của unnormalized confusion matrix sẽ tiến hành chia cho tổng các thành phần bên trên sản phẩm đó. do vậy, ta bao gồm thừa 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ằng 1. Vấn đề này hay 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 và plots the confusion matrix. Normalization can be applied by web3_setting `normalize=True`. """ if normalize: centimet = centimet.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 = cm.max() / 2. for i, j in itertools.product(range(cm.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 những bài bác toán thù với rất nhiều lớp tài liệu, bí quyết biểu diễn bởi color này siêu hữu dụng. Các ô màu sắc đậm biểu thị các giá trị cao. Một mô hình tốt vẫn cho một confusion matrix tất cả những phần tử trên đường chéo cánh chính có mức giá trị lớn, những phần tử còn lại có giá trị nhỏ tuổi. Nói cách khác, khi biểu diễn bởi Màu sắc, đường chéo cánh bao gồm color càng đậm so với phần còn sót lại đã càng xuất sắc. Từ nhị hình trên ta thấy rằng confusion matrix đã chuẩn chỉnh hoá mang các thông tin hơn. Sự khác biệt được thấy nghỉ ngơi ô bên trên cùng phía bên trái. Lớp dữ liệu 0 được phân nhiều loại không thực thụ giỏi tuy thế vào unnormalized confusion matrix, nó vẫn có màu đậm nlỗi nhị ô còn lại trê tuyến phố chéo thiết yếu.

4. True/False Positive/Negative

4.1. True/False Positive/Negative

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

Trong phần lớn bài toán này, tín đồ ta hay khái niệm lớp tài liệu quan liêu trọng rộng rất cần được xác định và đúng là lớp Positive (P-dương tính), lớp còn sót lại được Hotline là Negative (N-âm tính). Ta khái niệm True Positive sầu (TP), False Positive (FP), True Negative sầu (TN), False Negative (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 | True Positive (TP) | False Negative (FN) |------------------|---------------------|---------------------| Actual: Negative | False Positive (FP) | True Negative sầu (TN) |------------------|---------------------|---------------------|
Người ta thường quyên tâm cho Tquảng bá, FNR, Fquảng bá, 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 | Tquảng cáo = 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 Rate có cách gọi khác là False Alarm Rate (tỉ lệ thông báo nhầm), False Negative Rate còn gọi là Miss Detection Rate (tỉ trọng quăng quật sót). Trong bài xích toán dò mìn, thà báo nhầm còn hơn vứt sót, Tức là ta có thể chấp nhận False Alarm Rate cao để đạt được Miss Detection Rate thấp.

Chụ ý::

Việc biết một cột của confusion matrix này vẫn suy ra được cột còn sót lại vì tổng những sản phẩm luôn bởi 1 còn chỉ gồm nhị lớp dữ liệu.

4.2. Receiver Operating Characteristic curve

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

Một chuyên môn dễ dàng và đơn giản là ta nạm quý 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ì đều điểm được dự đoán thù tất cả Phần Trăm đầu ra output to hơn 0.3 sẽ tiến hành dự đoán thù là trực thuộc lớp Positive sầu. Nói biện pháp không giống, tỉ lệ các điểm được phân loại là Positive sầu đang tăng thêm, kéo theo cả False Positive sầu Rate cùng True Positive sầu Rate cùng tăng lên (cột thứ nhất trong ma trận tăng lên). Từ phía trên suy ra cả FNR cùng TNR phần lớn bớt.

Ngược lại, giả dụ ta hy vọng loại trừ còn rộng 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 thù xác định tin nhắn rác rến ví dụ điển hình, ta nên tăng threshold lên một số trong những lớn hơn 0.5. Lúc kia, hầu như các điểm tài liệu sẽ tiến hành dự đoán thù ở trong lớp 0, tức Negative, cùng cả TNF cùng FNR đông đảo tăng lên, tức TPR với Flăng xê giảm xuống.

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

Xem thêm: " Snowmobile Là Gì ? Snowmobile Có Nghĩa Là Gì

Dưới đó là một ví dụ với hai lớp dữ liệu. Lớp thứ nhất là lớp Negative bao gồm trăng tròn điểm dữ liệu, 30 điểm còn lại ở trong lớp Positive. Giả sử mô hình vẫn xét cho các đầu ra output của dữ liệu (xác suất) được giữ ngơi nghỉ biế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 thông thường, những điểm nằm trong lớp 1 có score cao hơn nữa. Tlỗi viện sklearn sẽ giúp đỡ chúng ta tính những thresholds cũng giống như Fquảng bá và Tlăng xê tương ứng:


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

Chuyên mục: Kiến Thức