如何用最少的代码在 Python 中绘制不同类型的混淆矩阵?

How to plot confusion matrices of different types in Python with minimal code?

我有 2 个 numpy 数组,y_actual(实际值)和 y_pred(ML 模型预测),都具有二进制值,0 或 1。

目前,我正在根据以下语法形成一个confusion matrix:-

df_confusion = pd.crosstab(y_actual, y_pred, rownames=['Actual'], colnames=['Predicted'], margins=True)
print('Confusion Matrix:')
print(df_confusion)

但是,我查看了 SO 和其他文档,并没有找到一个代码最少的综合示例,它可以帮助我完成以下操作:-

  1. 形成一个混淆矩阵图(使用matplotlibSeaborn,其中显示每个class的实际样本数,旁边有0的名称标签Class A,1 为 Class B
  2. 绘制一个类似的混淆矩阵图,其中在混淆矩阵内显示每个class中的样本百分比(例如真阳性率,假阳性率等)。
  3. 绘制另一个混淆矩阵,它显示了混淆矩阵,以及右侧显示样本数量的刻度(像这样)https://scikit-learn.org/stable/_images/sphx_glr_plot_confusion_matrix_001.png. Form a similar confusion matrix for normalised case, like https://scikit-learn.org/stable/_images/sphx_glr_plot_confusion_matrix_001.png

此外,如问题中所述,目标是完成将 Class 0 标记为 Class A 并将 Class 1 标记为 Class B,如目前这些所示仅作为 01,看起来不太连贯。我更喜欢用最少的代码来完成同样的事情,并生成连贯且美观的混淆矩阵图。非常感谢这方面的任何帮助。

我会向您指出 Kaggle,其中有大量资源。您应该能够轻松调整以下示例以满足您的需要。

from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix, precision_recall_fscore_support

clf = SVC(kernel = 'linear').fit(x_train,y_train)
clf.predict(x_train)
y_pred = clf.predict(x_test)

# Creates a confusion matrix
cm = confusion_matrix(y_test, y_pred) 

# Transform to df for easier plotting
cm_df = pd.DataFrame(cm,
                     index = ['setosa','versicolor','virginica'], 
                     columns = ['setosa','versicolor','virginica'])

plt.figure(figsize=(5.5,4))
sns.heatmap(cm_df, annot=True)
plt.title('SVM Linear Kernel \nAccuracy:{0:.3f}'.format(accuracy_score(y_test, y_pred)))
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()