Hướng dẫn how do you plot a confusion matrix in python using seaborn? - làm thế nào để bạn vẽ một ma trận nhầm lẫn trong python bằng cách sử dụng seaborn?

Làm thế nào để thêm nhãn và tỷ lệ phần trăm vào một ma trận nhầm lẫn được vẽ bằng cách sử dụng bản đồ nhiệt trên biển. Cộng với một số tùy chọn bổ sung.

Một công cụ tuyệt vời để đánh giá hành vi và hiểu hiệu quả của một phân loại nhị phân hoặc phân loại là ma trận nhầm lẫn. Một giáo sư khoa học dữ liệu khôn ngoan đã từng nói:Confusion Matrix. A wise data science professor once said:

Việc sử dụng ma trận nhầm lẫn tốt ngăn cách một nhà khoa học dữ liệu tốt với một vụ hack.

Ahh… những kỷ niệm đẹp từ nhóm học tập.

Lưu ý bên lề: Tôi hoàn toàn thích cái tên Ma trận nhầm lẫn vì nó làm tôi nhớ đến Giosue Cozzarelli - thí sinh cuộc thi sắc đẹp Panama, khi được yêu cầu giải thích trích dẫn Khổng Tử: Đọc sách mà không cần thiền là một nghề nghiệp vô dụng. tuyên bố rằng Khổng Tử là một trong những người đàn ông đã phát minh ra sự nhầm lẫn vì điều này, anh ta là một trong những người già nhất là một trong những người già nhất. Cảm ơn bạn." I absolutely love the name confusion matrix because it reminds me of Giosue Cozzarelli — the Panamanian beauty pageant contestant who, when asked to explain the Confucius quote: “Reading without meditating is a useless occupation.” proclaimed that “Confucius was one of the men who invented confusion… Because of this, he was one of the most old… who was one of the oldest. Thank you.”

Khi tôi nghe thấy ma trận nhầm lẫn, tôi luôn nghĩ về điều này và sau đó cười với chính mình. Dù sao đi nữa, đủ về khiếu hài hước kỳ lạ của tôi, hãy để Lôi trở lại với ma trận nhầm lẫn.Anyway, enough about my strange sense of humor, let’s get back to Confusion Matrices.

Ma trận nhầm lẫn là một mảng 2 chiều so sánh các nhãn danh mục dự đoán với nhãn thực. Đối với phân loại nhị phân, đây là những loại tích cực thực sự, tiêu cực thực sự, dương tính giả và âm tính giả.predicted category labels to the true label. For binary classification, these are the True Positive, True Negative, False Positive and False Negative categories.

Giả sử rằng bạn đã phù hợp với mô hình hồi quy logistic, ma trận nhầm lẫn có thể được tính bằng tay hoặc nếu bạn lười biếng (hay còn gọi là thông minh).confusion_matrix function from sklearn.

Mã bên dưới phù hợp với mô hình hồi quy logistic và đưa ra ma trận nhầm lẫn. X là khung dữ liệu của các yếu tố dự đoán của tôi trong khi Y chứa dữ liệu cho danh mục mục tiêu (Tôi đã bỏ qua việc phân chia kiểm tra tàu để đơn giản vì nó không liên quan đến bài đăng trên blog này).

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
#Fit the model
logreg = LogisticRegression(C=1e5)
logreg.fig(X,y)
#Generate predictions with the model using our X values
y_pred = logreg.predict(X)
#Get the confusion matrix
cf_matrix = confusion_matrix(y, y_pred)
print(cf_matrix)

Output:

array([[23,  5],
[ 3, 30]])

Đầu ra có ý nghĩa, nhưng trông giống như rác tuyệt đối. May mắn thay, chúng ta có thể làm cho nó đẹp với một bản đồ nhiệt từ Thư viện Seaborn.Seaborn library.

import seaborn as sns
sns.heatmap(cf_matrix, annot=True)

Oooooh làm thế nào gọn gàng. Nhưng sẽ rất tốt nếu tôi có thể thấy bao nhiêu phần trăm dữ liệu của tôi được thể hiện trong mỗi góc phần tư?

Nó có thể được thực hiện dễ dàng như sau:

sns.heatmap(cf_matrix/np.sum(cf_matrix), annot=True, 
fmt='.2%', cmap='Blues')

Điều này cũng rất tuyệt. Tôi thậm chí đã thay đổi màu sắc thành một cái gì đó hấp dẫn hơn với thuộc tính CMAP, nhưng nếu tôi muốn thấy cả số lượng và tỷ lệ phần trăm cùng một lúc? Điều gì sẽ xảy ra nếu tôi cũng muốn xem một nhãn hiệu? May mắn thay, SeaBorn Heatmap có khả năng chấp nhận nhãn văn bản cho trường Annot.

Tạo bản đồ nhiệt với nhãn::

labels = [‘True Neg’,’False Pos’,’False Neg’,’True Pos’]
labels = np.asarray(labels).reshape(2,2)
sns.heatmap(cf_matrix, annot=labels, fmt=‘’, cmap='Blues')

Điều này là mát mẻ. Trường FMT đã được thêm vào để ngăn chặn định dạng được áp dụng cho nhãn thủ công. Tuy nhiên, với hình dung này, tôi đã mất tất cả thông tin chi tiết giúp nó hữu ích.

Với khả năng thêm một nhãn tùy chỉnh với chuỗi chú thích, tôi nhận ra rằng tôi có thể tạo các nhãn tùy chỉnh chứa tất cả thông tin tôi muốn.create custom labels that contained all of the information I desired.

Nếu tôi có thể tạo các chuỗi chứa tất cả thông tin mà tôi muốn, tôi có thể áp dụng chúng vào bản đồ nhiệt và hiển thị mọi thứ cùng một lúc.

group_names = [‘True Neg’,’False Pos’,’False Neg’,’True Pos’]group_counts = [“{0:0.0f}”.format(value) for value in
cf_matrix.flatten()]
group_percentages = [“{0:.2%}”.format(value) for value in
cf_matrix.flatten()/np.sum(cf_matrix)]
labels = [f”{v1}\n{v2}\n{v3}” for v1, v2, v3 in
zip(group_names,group_counts,group_percentages)]
labels = np.asarray(labels).reshape(2,2)sns.heatmap(cf_matrix, annot=labels, fmt=‘’, cmap='Blues')

Việc này thật là tuyệt! Tôi đã có một số tên nhóm, số lượng và tỷ lệ phần trăm.

Vì vậy, điều gì sẽ xảy ra nếu tôi đặt tất cả vào một chức năng và bao gồm các tùy chọn để hiển thị hoặc không thể hiện các tham số nhất định, và cũng vượt qua một số tùy chọn Seaborn khác như Colormap, hoặc hiển thị thanh màu? Điều gì sẽ xảy ra nếu tôi bao gồm một số thống kê tóm tắt để hiển thị như độ chính xác, độ chính xác, thu hồi và điểm F? Điều đó sẽ vô cùng thuận tiện. Với những suy nghĩ trong tâm trí, tôi đã tạo ra một chức năng làm điều đó. Hãy ghé thăm kho lưu trữ dưới đây:Accuracy, Precision, Recall and F-Score? That would be incredibly convenient. With these thoughts in mind, I created a function that does just that. Feel free to visit the repository below:

Hàm sẽ có trong một mảng 2 chiều đại diện cho một ma trận nhầm lẫn. Nó có nhiều tùy chọn để thay đổi đầu ra. Các mặc định là để hiển thị (không ẩn) mọi thứ. Chức năng chứa một DocString hiển thị tất cả các tùy chọn. Tôi đã bao gồm các tài liệu dưới đây để thuận tiện:

This function will make a pretty plot of an sklearn Confusion Matrix cm using a Seaborn heatmap visualization.

Arguments
---------
cf: confusion matrix to be passed in

group_names: List of strings that represent the labels row by row
to be shown in each square.

categories: List of strings containing the categories to be
displayed on the x,y axis. Default is 'auto'

count: If True, show the raw number in the confusion matrix.
Default is True.

normalize: If True, show the proportions for each category.
Default is True.

cbar: If True, show the color bar. The cbar values are
based off the values in the confusion matrix.
Default is True.

xyticks: If True, show x and y ticks. Default is True.

xyplotlabels: If True, show 'True Label' and 'Predicted Label' on
the figure. Default is True.

sum_stats: If True, display summary statistics below the figure.
Default is True.

figsize: Tuple representing the figure size. Default will be
the matplotlib rcParams value.

cmap: Colormap of the values displayed from
matplotlib.pyplot.cm. Default is 'Blues'

Dưới đây là một số ví dụ với đầu ra:

labels = [‘True Neg’,’False Pos’,’False Neg’,’True Pos’]
categories = [‘Zero’, ‘One’]
make_confusion_matrix(cf_matrix,
group_names=labels,
categories=categories,
cmap=’binary’)

Dưới đây là một ví dụ sử dụng trình phân loại không nhị phân (3x3 trong trường hợp này).

make_confusion_matrix(cf_matrix_3x3, figsize=(8,6), cbar=False)

Bạn thực sự có thể làm bất cứ điều gì với nó. Tôi hy vọng rằng bạn thích bản demo nhanh này về việc cải thiện trực quan ma trận nhầm lẫn. Nó luôn luôn tuyệt vời để có một cách tốt đẹp để trực quan hóa dữ liệu của bạn. Vui lòng sao chép mã của tôi hoặc đưa ra đề xuất về cách cập nhật chức năng. Chúc mừng!Cheers!

Làm thế nào để bạn vẽ một ma trận nhầm lẫn trong Seaborn Python?

Hiển thị ma trận nhầm lẫn bằng cách sử dụng Seaborn để hoàn thành nhiệm vụ này, bạn sẽ cần thêm hai thành phần sau vào mã: Nhập Seaborn dưới dạng SN. Sn. HeatMap (Confusion_Matrix, Annot = true)import seaborn as sn. sn. heatmap(confusion_matrix, annot=True)

Làm thế nào để bạn vẽ một ma trận nhầm lẫn trong Python Sklearn?

Làm thế nào để tạo một ma trận nhầm lẫn trong Scikit-learn ?..
Chạy một thuật toán phân loại. classifier.fit (x_train, y_train) ....
Nhập số liệu từ mô -đun Sklearn. ....
Chạy hàm ma trận nhầm lẫn trên các giá trị thực tế và dự đoán. ....
Vẽ ma trận nhầm lẫn. ....
Kiểm tra báo cáo phân loại ..

Làm thế nào để bạn tạo ra một ma trận nhầm lẫn trong Python mà không cần Sklearn?

Bạn có thể rút ra ma trận nhầm lẫn bằng cách đếm số lượng phiên bản trong mỗi kết hợp các lớp thực tế và dự đoán như sau: Nhập Numpy là NP def comp_confmat (thực tế, dự đoán): # Trích xuất các lớp khác nhauma trận nhầm lẫn confmat = np.import numpy as np def comp_confmat(actual, predicted): # extract the different classes classes = np. unique(actual) # initialize the confusion matrix confmat = np.

Bản đồ nhiệt của ma trận nhầm lẫn là gì?

Các giá trị mục tiêu được phân vùng thành 20 khoảng thời gian. Các giá trị dự đoán và các giá trị dự đoán sau đó được phân tách thành các khoảng đó.Ma trận nhầm lẫn giữa các giá trị thực và giá trị dự đoán được hình thành bằng cách đếm số lượng khớp trong mỗi khoảng. True values and prediction values are then discretized into those intervals. Confusion matrix between true values and prediction values is formed by counting the number of matches within each interval.