如何用最少的代码在 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 和其他文档,找不到一个包含最少代码的综合示例,这可以帮助我完成以下任务:-
-
形成混淆矩阵图(使用
matplotlib
或Seaborn
,其中显示每个类的实际样本数,旁边有名称标签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
,因为目前这些仅显示为 0
和 1
,看起来不太连贯.我希望使用最少的代码来完成相同的任务,并生成连贯且美观的混淆矩阵图。非常感谢这方面的任何帮助。
【问题讨论】:
【参考方案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 中绘制不同类型的混淆矩阵?的主要内容,如果未能解决你的问题,请参考以下文章