【问题标题】:Plot Confusion Matrix with scikit-learn without a Classifier使用没有分类器的 scikit-learn 绘制混淆矩阵
【发布时间】:2020-03-28 14:44:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: python scikit-learn confusion-matrix


    【解决方案1】:

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

    latest sources here,估计器用于:

    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部分是怎么编码的here

    【讨论】:

    • ConfusionMatrixDisplay 正是我想要的。谢谢!
    • 如何获得混淆矩阵的对数缩放?上下文是: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()。这里真底片的比例使一切都相形见绌,所以颜色缩放在这里有点毫无意义,除非有一种方法可以对数缩放颜色?提前致谢!
    • 这种方法的问题是我们不能标准化混淆矩阵。
    • 我无法用这种方法对矩阵进行归一化
    • @ShamsulArefinSajib ,您能否详细解释一下。 ConfusionMatrixDisplay 只需使用 cm 矩阵来绘制它。您是说不能在其中传递标准化的cm 矩阵吗?
    【解决方案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')
    

    【讨论】:

    • 请尽量给出正确的答案解释。
    【解决方案3】:

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

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

    (请参阅我的原始答案:plot_confusion_matrix without estimator

    【讨论】:

    • 在发布答案时,请避免将仅链接的答案留给其他 Stack Overflow 帖子。相反,请edit您的答案包括链接帖子中与所问问题相关且量身定制的最重要细节。
    • @Hoppeduppeanut 当然。我在这里也包含了相关的代码块。谢谢
    猜你喜欢
    • 2016-05-12
    • 2018-05-22
    • 2022-10-20
    • 2019-12-17
    • 1970-01-01
    • 2014-06-11
    • 2020-07-16
    • 2016-01-31
    相关资源
    最近更新 更多