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

Posted

技术标签:

【中文标题】如何用最少的代码在 Python 中绘制不同类型的混淆矩阵?【英文标题】:How to plot confusion matrices of different types in Python with minimal code? 【发布时间】:2019-08-10 08:58:40 【问题描述】:

我有 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 和其他文档,找不到一个包含最少代码的综合示例,这可以帮助我完成以下任务:-

    形成混淆矩阵图(使用matplotlibSeaborn,其中显示每个类的实际样本数,旁边有名称标签0为Class A,1为Class B . 绘制类似的混淆矩阵图,其中显示了位于混淆矩阵中的每个类别的样本百分比(例如真阳性率、假阳性率等)。 绘制进一步的混淆矩阵,显示混淆矩阵,以及右侧显示样本数量的比例(像这样)https://scikit-learn.org/stable/_images/sphx_glr_plot_confusion_matrix_001.png。为标准化情况形成一个类似的混淆矩阵,如https://scikit-learn.org/stable/_images/sphx_glr_plot_confusion_matrix_001.png。

此外,如问题所述,目标是将 0 类标记为 Class A,将 1 类标记为 Class B,因为目前这些仅显示为 01,看起来不太连贯.我希望使用最少的代码来完成相同的任务,并生成连贯且美观的混淆矩阵图。非常感谢这方面的任何帮助。

【问题讨论】:

【参考方案1】:

我会告诉你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()

【讨论】:

以上是关于如何用最少的代码在 Python 中绘制不同类型的混淆矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

如何用 folium 绘制地图并在 python 中的地图旁边放置条形图?

如何用python绘制彩色蟒蛇

如何用python绘制红色叹号?

如何用tablea7绘制canvas

如何用最少的代码创建过滤后的 DataFrame

如何用 Python 绘制多边形?