matplotlib 使用plot_confusion_matrix绘制多个混淆矩阵

icomxhvb  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(321)

我使用plot_confusion_matrixsklearn.metrics .我想表示这些混淆矩阵彼此相邻的子图,我怎么能做到这一点?

0mkxixxg

0mkxixxg1#

让我们使用good'ol iris数据集来重现这一点,并拟合几个分类器,用plot_confusion_matrix绘制它们各自的混淆矩阵:

from sklearn.ensemble import AdaBoostClassifier, GradientBoostingClassifier
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
from sklearn.metrics import plot_confusion_matrix

data = load_iris()
X = data.data
y = data.target

设置-

X_train, X_test, y_train, y_test = train_test_split(X, y)
classifiers = [LogisticRegression(solver='lbfgs'), 
               AdaBoostClassifier(),
               GradientBoostingClassifier(), 
               SVC()]
for cls in classifiers:
    cls.fit(X_train, y_train)

因此,你可以简单地比较所有矩阵的方法是通过使用plt.subplots创建一组子图。然后在轴对象和训练的分类器上迭代(plot_confusion_matrix期望作为输入)并绘制各个混淆矩阵:

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(15,10))

for cls, ax in zip(classifiers, axes.flatten()):
    plot_confusion_matrix(cls, 
                          X_test, 
                          y_test, 
                          ax=ax, 
                          cmap='Blues',
                         display_labels=data.target_names)
    ax.title.set_text(type(cls).__name__)
plt.tight_layout()  
plt.show()

u7up0aaq

u7up0aaq2#

if your desired output is that这是我使用ConfusionMatrixDisplay并排查看多个混淆矩阵(confusion_matrix)的方法。
注意:在metrics.confusion_matrix()函数中粘贴您自己的测试和训练数据名称。

fig, ax = plt.subplots(1, 2)
ax[0].set_title("test")
ax[1].set_title("train")

metrics.ConfusionMatrixDisplay(
    confusion_matrix=metrics.confusion_matrix(y_test, y_pred), 
    display_labels=[False, True]).plot(ax=ax[0])

metrics.ConfusionMatrixDisplay(
    confusion_matrix=metrics.confusion_matrix(y_train, y_train_pred), 
    display_labels=[False, True]).plot(ax=ax[1])

相关问题