【问题标题】:How can I interpret Scikit-learn confusion matrix我如何解释 Scikit-learn 混淆矩阵
【发布时间】:2014-06-11 12:27:24
【问题描述】:

我正在使用confusion matrix 来检查我的分类器的性能。

我正在使用 Scikit-Learn,我有点困惑。我如何解释

的结果
from sklearn.metrics import confusion_matrix
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]])

我怎样才能决定这个预测值是好还是不好。

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    判断分类器好坏的最简单方法是使用一些标准误差度量(例如Mean squared error)来计算误差。我想你的例子是从 Scikit 的documentation 复制的,所以我假设你已经阅读了定义。

    我们这里有三个类:012。在对角线上,混淆矩阵告诉你,一个特定类别被正确预测的频率。所以从对角线2 0 2 我们可以说索引为0 的类被正确分类了2 次,索引为1 的类从未被正确预测,而索引为2 的类被正确预测了2 次。

    对角线下方和上方都有数字,这些数字告诉您索引等于元素行号的类被归类为索引等于矩阵列的类的次数。例如,如果您查看第一列,在对角线下方您有:0 1(在矩阵的左下角)。较低的1 告诉您索引为2(最后一行)的类曾经被错误地归类为0(第一列)。这对应于在您的y_true 中有一个带有标签2 的样本并被归类为0 的事实。这发生在第一个样本中。

    如果您将混淆矩阵中的所有数字相加,您将得到测试样本的数量(2 + 2 + 1 + 1 = 6 - 等于y_truey_pred 的长度)。如果对行求和,您将得到每个标签的样本数:如您所见,y_pred 中确实有两个0s、一个1 和三个2s。

    例如,如果您将矩阵元素除以该数字,您可以看出,例如,标签为 2 的类以大约 66% 的准确率被正确识别,并且在 1/3 的情况下它会被混淆(因此名称),类标签为0

    TL;DR:

    虽然单数误差度量衡量整体性能,但您可以使用混淆矩阵确定是否(一些示例):

    • 你的分类器什么都烂

    • 或者它可以很好地处理某些类,而有些则不能(这会提示您查看数据的这个特定部分并观察分类器在这些情况下的行为)

    • 它做得很好,但经常混淆标签 A 和 B。例如,对于线性分类器,您可能需要检查这些类是否是线性可分的。

    等等

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 2018-05-22
      • 2018-09-18
      • 2020-07-16
      • 2020-05-30
      • 2017-11-03
      • 2013-08-25
      • 2017-03-03
      • 1970-01-01
      相关资源
      最近更新 更多