【问题标题】:2x2 confusion matrix in three-class classification?三类分类中的2x2混淆矩阵?
【发布时间】:2020-06-17 22:18:00
【问题描述】:

我正在对具有三个类别(标签低、中、高)的数据集进行分类。

我运行以下代码来获取我的混淆矩阵:

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

我得到cm 的以下输出:

array([[18, 10],
       [ 7, 61]], dtype=int64)

这个输出是什么意思?我阅读了以下链接,但不明白 Confusion Matrix and Class Statistics

【问题讨论】:

  • scikit docs 怎么样?
  • spyder 与此无关,它只是一个 IDE,不会影响您的代码运行方式。相关标签为scikit-learnclassificationmulticlass-classification
  • 如果y 中有三个不同的类,那么混淆矩阵应该是 3x3。您能否检查y_testy_pred 中是否存在所有标签?
  • 你说你有三个类,但看起来你的分类器只做了两个类。向我们发布您用于训练分类器的代码。特别要确保您正确传递标签列。
  • 您还没有发布分类器的代码,所以我们无法解决为什么它只训练到两个类而不是三个。 SO规则要求您Minimal, Complete Verifiable Example (MCVE)

标签: python scikit-learn classification confusion-matrix multiclass-classification


【解决方案1】:

这是你得到的解释。

对于任何 NxN 混淆矩阵,以下成立:

实际:是真正的标签


对于 2x2 的情况(更简单的解释):


另请阅读:https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix

【讨论】:

    【解决方案2】:

    让我们仔细看看结果:

    tn, fp, fn, tp = np.array([[18, 10],
                               [ 7, 61]]).ravel()
    

    这意味着:

    tn (True Negative) = 18
    fp (False Positive) = 10
    fn (False Negative) = 7 
    tp (True Positive) = 61
    

    换句话说,

    • 18 个 0 类样本(正确)归类为 0 类
    • 10 个 0 类样本(错误地)归类为 1 类
    • 7 个 1 类样本(错误地)归类为 0 类
    • 61 个 1 类样本(正确)归类为 1 类

    你也可以直接使用

    tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
    

    【讨论】:

      猜你喜欢
      • 2020-08-21
      • 2019-05-26
      • 2021-11-11
      • 2018-10-21
      • 1970-01-01
      • 2019-01-05
      • 2019-07-26
      • 2020-04-11
      • 2016-02-05
      相关资源
      最近更新 更多