如何用最少的代码在 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 和其他文档,并没有找到一个代码最少的综合示例,它可以帮助我完成以下操作:-
- 形成一个混淆矩阵图(使用
matplotlib
或Seaborn
,其中显示每个class的实际样本数,旁边有0的名称标签Class A
,1 为 Class B
。
- 绘制一个类似的混淆矩阵图,其中在混淆矩阵内显示每个class中的样本百分比(例如真阳性率,假阳性率等)。
- 绘制另一个混淆矩阵,它显示了混淆矩阵,以及右侧显示样本数量的刻度(像这样)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
,如目前这些所示仅作为 0
和 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()
我有 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
,其中显示每个class的实际样本数,旁边有0的名称标签Class A
,1 为Class B
。 - 绘制一个类似的混淆矩阵图,其中在混淆矩阵内显示每个class中的样本百分比(例如真阳性率,假阳性率等)。
- 绘制另一个混淆矩阵,它显示了混淆矩阵,以及右侧显示样本数量的刻度(像这样)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
,如目前这些所示仅作为 0
和 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()