没有估计器的 plot_confusion_matrix

Rak*_*san 7 python confusion-matrix scikit-learn

我正在尝试使用 plot_confusion_matrix,

from sklearn.metrics import confusion_matrix

y_true = [1, 1, 0, 1]
y_pred = [1, 1, 0, 0]

confusion_matrix(y_true, y_pred)
Run Code Online (Sandbox Code Playgroud)

输出:

array([[1, 0],
       [1, 2]])
Run Code Online (Sandbox Code Playgroud)

现在,在使用以下内容时;使用“类”或不使用“类”

from sklearn.metrics import plot_confusion_matrix

plot_confusion_matrix(y_true, y_pred, classes=[0,1], title='Confusion matrix, without normalization')
Run Code Online (Sandbox Code Playgroud)

或者

plot_confusion_matrix(y_true, y_pred, title='Confusion matrix, without normalization')
Run Code Online (Sandbox Code Playgroud)

除了里面的数字,我希望得到类似的输出,

在此处输入图片说明

绘制简单的图表,应该不需要估计器。

使用 mlxtend.plotting,

from mlxtend.plotting import plot_confusion_matrix
import matplotlib.pyplot as plt
import numpy as np

binary1 = np.array([[4, 1],
                   [1, 2]])

fig, ax = plot_confusion_matrix(conf_mat=binary1)
plt.show()
Run Code Online (Sandbox Code Playgroud)

它提供相同的输出。

基于此

它需要一个分类器,

disp = plot_confusion_matrix(classifier, X_test, y_test,
                                 display_labels=class_names,
                                 cmap=plt.cm.Blues,
                                 normalize=normalize)
Run Code Online (Sandbox Code Playgroud)

我可以在没有分类器的情况下绘制它吗?

yat*_*atu 9

plot_confusion_matrix期望一个训练有素的分类器。如果您查看源代码,它的作用是执行y_pred为您生成的预测:

y_pred = estimator.predict(X)
    cm = confusion_matrix(y_true, y_pred, sample_weight=sample_weight,
                          labels=labels, normalize=normalize)
Run Code Online (Sandbox Code Playgroud)

因此,为了在不指定分类器的情况下绘制混淆矩阵,您必须使用其他工具,或者自己完成。一个简单的选择是使用 seaborn:

import seaborn as sns

cm = confusion_matrix(y_true, y_pred)
f = sns.heatmap(cm, annot=True)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


and*_*aae 6

我来晚了一点,但我认为其他人可能会从我的回答中受益。

正如其他人提到的,如果plot_confusion_matrix没有分类器,则不能选择使用,但仍然可以使用 sklearn 在没有分类器的情况下获得外观相似的混淆矩阵。下面的函数正是这样做的。

from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

def confusion_ma(y_true, y_pred, class_names):
    cm = confusion_matrix(y_true, y_pred, normalize='true')
    disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=class_names)
    disp.plot(cmap=plt.cm.Blues)
    return plt.show()
Run Code Online (Sandbox Code Playgroud)

该confusion_matrix函数返回一个简单的 ndarry 矩阵。通过将其与预测标签一起传递给函数,ConfusionMatrixDisplay可以获得类似的矩阵。在定义中,我添加了class_names要显示的 ,而不是 0 和 1,选择标准化输出并指定颜色图 - 根据您的需要进行更改。