使用scikit-learn绘制混淆矩阵,无需分类器

17

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

现在,我想用 sklearn.metrics.plot_confusion_matrix 来绘制它,但第一个参数是训练好的分类器,如文档中所述。文档链接。问题是我没有一个分类器;结果是通过手动计算得到的。

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

3个回答

34
您可以直接导入plot_confusion_matrix,这表明您安装了最新版本的scikit-learn(0.22)。因此,您只需查看plot_confusion_matrix()的源代码即可了解它如何使用estimator。 从最新的源代码中可以看到,估计器用于:
  1. 使用confusion_matrix计算混淆矩阵
  2. 获取标签(y的唯一值,对应于混淆矩阵中的0,1,2 ...)
所以如果您已经有了这两个东西,您只需要下面这部分:
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部分的编码方式此处


ConfusionMatrixDisplay正是我一直在寻找的。谢谢! - Irina
如何对混淆矩阵进行对数缩放?上下文如下: `import numpy as np ; from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay; disp = ConfusionMatrixDisplay(confusion_matrix=np.asarray([[13099,7004],[27420,544967]]), display_labels= np.asarray([0,1])) ;disp.plot()`。这里的真负样本比例远高于其他,因此颜色缩放在这里有点无意义,除非有一种方法可以对颜色进行对数缩放?谢谢! - Thomas Leyshon
1
这种方法的问题在于我们无法对混淆矩阵进行归一化处理。 - Bilal Chandio
我无法使用这种方法对矩阵进行归一化。 - Shamsul Arefin
@ShamsulArefinSajib 是的,因为我们正在使用函数的源代码使其在没有估算器的情况下工作。因此,您想对混淆矩阵进行的任何更改都必须手动完成。 - Vivek Kumar
显示剩余2条评论

4
下面的代码是根据真实值和预测值创建混淆矩阵。如果您已经创建了混淆矩阵,则只需运行下面的最后一行代码即可。
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')

请尽量详细解释答案。 - Tyler2P

0

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

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

(请查看我的原始答案:不带估计器的绘制混淆矩阵


2
请在回答问题时避免仅留下指向其他 Stack Overflow 帖子的链接。相反,请[编辑]您的答案,包括与所提问的问题相关且量身定制的链接帖子中最重要的细节。 - Hoppeduppeanut
1
@Hoppeduppeanut 当然没问题。我也在这里包含了相关的代码块。谢谢。 - g4s9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接