在没有分类器的情况下使用 scikit-learn 绘制混淆矩阵

Plot Confusion Matrix with scikit-learn without a Classifier

我有一个使用 sklearn.metrics.confusion_matrix 创建的混淆矩阵。

现在,我想用 sklearn.metrics.plot_confusion_matrix 绘制它,但第一个参数是训练过的分类器,如 documentation 中指定的那样。问题是我没有分类器;结果是通过手工计算得到的。

是否仍然可以通过 scikit-learn 在一行中绘制混淆矩阵,还是我必须自己用 matplotlib 编写代码?

您可以直接导入 plot_confusion_matrix 表明您安装了最新版本的 scikit-learn (0.22)。所以你可以看看 plot_confusion_matrix() 的源代码,看看它是如何使用 estimator.

来自 latest sources here,估算器用于:

  1. 使用confusion_matrix
  2. 计算混淆矩阵
  3. 获取标签(对应于混淆矩阵中的 0,1,2.. 的唯一 y 值)

因此,如果您已经拥有这两件事,则只需要以下部分:

import matplotlib.pyplot as plt
from sklearn.metrics import ConfusionMatrixDisplay

disp = ConfusionMatrixDisplay(confusion_matrix=cm,
                              display_labels=display_labels)


# NOTE: Fill all variables here with default values of the plot_confusion_matrix
disp = disp.plot(include_values=include_values,
                 cmap=cmap, ax=ax, xticks_rotation=xticks_rotation)

plt.show()

请务必查看评论中的注意事项。

老版本可以看看matplotlib部分是怎么编码的here

如果适合您的用例,您可以使用单行“身份分类器”。

IC = type('IdentityClassifier', (), {"predict": lambda i : i, "_estimator_type": "classifier"})
plot_confusion_matrix(IC, y_pred, y_test, normalize='true', values_format='.2%');

(请参阅我的原始答案:

下面的代码是根据真实值和预测值创建混淆矩阵。如果您已经创建了混淆矩阵,您可以 运行 下面的最后一行。

import seaborn as sns
from sklearn.metrics import confusion_matrix

cm = confusion_matrix(y_true, y_pred)
f = sns.heatmap(cm, annot=True, fmt='d')