def consault_matrix[pred, original]. # chuyển nhãn ban đầu và dự đoán cho chức năng này
ma trận = np. số không[[2,2]] # từ ma trận trống 2x2
cho tôi trong phạm vi [len [pred]]. #ma trận nhầm lẫn dành cho 2 lớp. 1,0
nếu int[pred[i]]==1 và int[ original[i]]==0
matrix[0,0]+=1 #True positive
elif int[pred[i]]==-1 và int[ original[i]]==1
matrix[0,1]+=1 #False positive
elif int[pred[i]]==0 và int[ original[i]]==1
matrix[1,0]+=1 #False Phủ định
elif int[pred[i]]==0 và int[ original[i]]==0
matrix[1,1]+=1 #True Phủ định
độ chính xác=ma trận[0,0]/[ma trận[0,0]+ma trận[0,1]]
in ["Chính xác. ",độ chính xác]
gọi lại=ma trận[0,0]/[ma trận[0,0]+ma trận[1,0]]
độ đặc hiệu=ma trận[1,1]/[ma trận[0,1]+ma trận[1,1]]
print["Tính đặc hiệu. ", tính đặc hiệu]
negative_pred_value=ma trận[1,1]/[ma trận[1,0]+ma trận[1,1]]
print["Giá trị dự đoán âm. ",negative_pred_value]
f1=2[độ chính xác*thu hồi]/[độ chính xác+thu hồi]
#đoạn mã trên cộng các tần số của tps,tns,fps,fns và một ma trận được hình thành
Cách thêm nhãn và tỷ lệ phần trăm vào ma trận nhầm lẫn được vẽ bằng bản đồ nhiệt Seaborn. 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 tính hiệu quả của 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
“Việc sử dụng ma trận nhầm lẫn tốt giúp phân biệt một nhà khoa học dữ liệu giỏi 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 cực kỳ thích ma trận nhầm lẫn tên vì nó khiến tôi nhớ đến Giosue Cozzarelli - thí sinh cuộc thi sắc đẹp người Panama, khi được yêu cầu giải thích câu nói của Khổng Tử. “Đọc sách mà không suy ngẫm là một công việc vô ích. ” tuyên bố rằng “Khổng Tử là một trong những người đã phát minh ra sự nhầm lẫn… Vì điều này, ông ấy 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. ”
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 một mình. … Dù sao thì, nói về khiếu hài hước kỳ lạ của tôi đủ rồi, hãy quay lại với Ma trận bối rối
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 được dự đoán với nhãn thực. Đối với phân loại nhị phân, đây là các danh mục Tích cực Thực sự, Tiêu cực Thực sự, Tích cực Sai và Tiêu cực Sai
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 toán theo cách thủ công hoặc nếu bạn lười biếng [hay còn gọi là thông minh]… bạn có thể sử dụng hàm mess_matrix từ sklearn
Đoạn mã dưới đây phù hợp với Mô hình hồi quy logistic và xuất 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 phân tách kiểm tra đào tạo để đơ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]
đầu ra
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 hơn với bản đồ nhiệt từ thư viện Seaborn
import seaborn as sns
sns.heatmap[cf_matrix, annot=True]
Oooooh gọn gàng làm sao. Nhưng sẽ không hay sao nếu tôi có thể thấy bao nhiêu phần trăm dữ liệu của mình đượ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']
Cái này cũng hay đấy. Tôi thậm chí đã thay đổi màu sắc thành thứ gì đó hấp dẫn hơn với thuộc tính cmap… nhưng nếu tôi muốn xem cả số lượng và tỷ lệ phần trăm cùng một lúc thì sao?
Tạo bản đồ nhiệt có 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']
cái này hay đấy. Trường fmt đã được thêm vào để ngăn định dạng được áp dụng cho nhãn thủ công. …nhưng với hình ảnh trực quan 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 nhãn tùy chỉnh bằng chuỗi chú thích, tôi nhận ra rằng tôi có thể tạo nhãn tùy chỉnh chứa tất cả thông tin tôi muốn
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ậy… điều gì sẽ xảy ra nếu tôi đưa 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 hiển thị một số tham số nhất định, đồng thời chuyển qua một số tùy chọn bẩm sinh khác như bản đồ màu hoặc hiển thị thanh màu? . Với những suy nghĩ này trong đầu, tôi đã tạo ra một chức năng thực hiện điều đó. Vui lòng truy cập kho lưu trữ bên dưới
DTrimarchi10/confusion_matrix
Chứa cf_matrix. py có chức năng tạo hình ảnh đẹp mắt về ma trận nhầm lẫn. …
github. com
Hàm sẽ lấy một mảng Numpy 2 chiều biểu thị một ma trận nhầm lẫn. Nó có nhiều tùy chọn để thay đổi đầu ra. Các giá trị mặc định là hiển thị [không ẩn] mọi thứ. Hàm chứa một chuỗi tài liệu hiển thị tất cả các tùy chọn. Tôi đã bao gồm chuỗi tài liệu bên dưới để 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 kết quả đầ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 bộ phân loại không nhị phân [3x3 trong trường hợp này]
________số 8Bạ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 hóa ma trận nhầm lẫn. Thật tuyệt khi có một cách hay để 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