4. True/False Positive/Negative 5. Precision cùng Recall 5.4. Precision-recall cho bài toán phân lớp nhiều lớp

Bạn hoàn toàn có thể download tổng thể source code dưới dạng Jupyter Notebook trên đây.Bạn vẫn xem: False positive là gì

1. Giới thiệu

Khi xây đắp một mô hình Machine Learning, bọn họ cần một phép reviews để xem quy mô sử dụng có hiệu quả không cùng để so sánh khả năng của những mô hình. Trong nội dung bài viết này, tôi sẽ reviews các phương pháp đánh giá bán các mô hình classification.

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

Hiệu năng của một mô hình thường được review dựa trên tập tài liệu kiểm demo (test data). Cố thể, mang sử áp sạc ra của quy mô khi đầu vào là tập kiểm demo được thể hiện bởi vector y_pred - là vector dự đoán đầu ra 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 thử. Ta cần đối chiếu giữa vector dự kiến y_pred này với vector class thật của dữ liệu, được diễn đạt bởi vector y_true.

Ví dụ với việc có 3 lớp dữ liệu được gán nhãn là 0, 1, 2. Trong việc thực tế, các class hoàn toàn có thể có nhãn bất kỳ, không nhất thiết là số, cùng không duy nhất thiết bước đầu từ 0. Bọn họ hãy tạm giả sử các class được đánh số từ 0 cho C-1 vào trường hợp bao gồm C lớp dữ liệu. Có 10 điểm dữ liệu trong tập kiểm demo với những nhãn thực sự được biểu thị bởi y_true = . Mang sử cỗ phân lớp bọn họ đang cần reviews dự đoán nhãn cho những điểm này là y_pred = .

Có rất nhiều cách reviews một mô hình phân lớp. Tuỳ vào những bài bác toán khác nhau mà bọn họ sử dụng các cách thức khác nhau. Các phương pháp thường được áp dụng là: accuracy score, confusion matrix, ROC curve, Area Under the Curve, Precision & Recall, F1 score, vị trí cao nhất R error, etc.

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

2. Accuracy

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

Trong ví dụ như này, ta rất có thể đếm được gồm 6 điểm dữ liệu được dự đoán đúng trên tổng thể 10 điểm. Vậy ta tóm lại độ chính xác của mô hình là 0.6 (hay 60%). Để ý rằng đấy là bài toán cùng với chỉ 3 class, nên độ bao gồm xác nhỏ dại nhất vẫn là khoảng chừng 1/3, khi toàn bộ các điểm được dự kiến là thuộc vào trong 1 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.shapey_true = np.array()y_pred = np.array()print("accuracy = ", acc(y_true, y_pred))

3. Confusion matrix

Cách tính sử dụng accuracy như nghỉ ngơi trên chỉ cho họ biết được bao nhiêu xác suất lượng dữ liệu được phân các loại đúng mà không những ra được ví dụ mỗi loại được phân loại như vậy nào, lớp nào được phân loại đúng các nhất, và dữ liệu thuộc lớp nào thường hay bị phân các loại nhầm vào lớp khác. Để có thể đánh giá được các giá trị này, chúng ta sử dụng một ma trận được gọi là confusion matrix.

Về cơ bản, confusion matrix thể hiện gồm bao nhiêu điểm dữ liệu thực sự thuộc vào trong 1 class, và được dự đoán là rơi vào trong 1 class. Để hiểu rõ hơn, 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 cộng 10 điểm dữ liệu. Bọn họ xét ma trận chế tác bởi những giá trị trên vùng 3x3 trung chổ chính giữa của bảng.

Xem thêm: "Điều Khoản Và Điều Kiện Tiếng Anh Là Gì ? Kiện Cáo Trong Tiếng Anh Là Gì

Chú ý: Có một số trong những tài liệu quan niệm ngược lại, tức cực hiếm tại cột trang bị i, hàng sản phẩm j là con số điểm lẽ ra thuộc vào class i nhưng lại được dự đoán là ở 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 như biện pháp tôi đang làm. Tôi chọn cách này do đây chính là cách tủ sách sklearn sử dụng.

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 đó là số điểm trong tập kiểm thử. Các bộ phận 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 mỗi lớp dữ liệu. Từ bỏ đây có thể suy ra accuracy chính bởi tổng các phần tử trên đường chéo chia đến tổng các bộ phận của toàn ma trận. Đoạn code tiếp sau đây mô tả cách tính confusion matrix:

def my_confusion_matrix(y_true, y_pred): N = np.unique(y_true).shape # number of classes centimet = np.zeros((N, N)) for n in range(y_true.shape): cm, y_pred> += 1 return centimet 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 biểu 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 chưa chuẩn hoá. Để có cái nhìn được rõ hơn, ta hoàn toàn có thể dùng normalized confuion matrix, tức confusion matrix được chuẩn hoá. Để gồm normalized confusion matrix, ta đem mỗi sản phẩm của unnormalized confusion matrix sẽ tiến hành chia đến tổng các phần tử trên hàng đó. Như vậy, ta bao gồm nhận xét rằng tổng các bộ phận trên một hàng của normalized confusion matrix luôn luôn bằng 1. Điều này thường không đúng 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.cm.Blues): """ This function prints & 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 = cm.max() / 2. For i, j in itertools.product(range(cm.shape), range(cm.shape)): 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 = 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()