【问题标题】:Why scikit learn confusion matrix is reversed?为什么scikit学习混淆矩阵是反转的?
【发布时间】:2019-09-28 09:34:03
【问题描述】:

我有 3 个问题:

1)

sklearn的混淆矩阵如下:

TN | FP
FN | TP

当我查看在线资源时,我发现它是这样的:

TP | FP
FN | TN

我应该考虑哪一个?

2)

由于 scikit learn 的上述混淆矩阵与我在其他资源中找到的不同,在多类混淆矩阵中,结构是什么?我在这里看这篇文章: Scikit-learn: How to obtain True Positive, True Negative, False Positive and False Negative 在那篇文章中,@lucidv01d 发布了一个图表来了解多类的类别。 scikit learn中的那个类别是一样的吗?

3)

如何计算多类的准确度?例如,我有这个混淆矩阵:

[[27  6  0 16]
 [ 5 18  0 21]
 [ 1  3  6  9]
 [ 0  0  0 48]]

在我在问题 2 中提到的同一篇文章中,他写了这个等式:

整体准确度

ACC = (TP+TN)/(TP+FP+FN+TN)

但这不只适用于二进制文件吗?我的意思是,我用什么类代替TP?

【问题讨论】:

    标签: scikit-learn text-classification confusion-matrix performance-measuring


    【解决方案1】:

    sklearn 的混淆矩阵显示如下的原因

    TN | FP
    FN | TP
    

    这样是因为在他们的代码中,他们认为 0 是负类,1 是正类。 sklearn 始终认为较小的数字为负数,较大的数字为正数。通过数字,我的意思是类值(0或1)。顺序取决于您的数据集和类。

    准确率将是对角元素的总和除以所有元素的总和。p 对角元素是正确预测的数量。

    【讨论】:

      【解决方案2】:

      正如sklearn guide 所说:“(维基百科和其他参考资料可能对轴使用不同的约定)”

      这是什么意思?在构建混淆矩阵时,第一步是决定在哪里放置预测和真实值(真实标签)。有两种可能:

      • 将预测放在列中,将真实标签放在行中
      • 将预测放在行中,将真实标签放在列中

      决定你想走哪条路完全是主观。从这张图片中,here 中解释,很明显 scikit-learn 的约定是将预测放在列上,将真实标签放在行上。

      因此,根据 scikit-learns 约定,这意味着:

      • 第一列包含负预测(TN 和 FN)
      • 第二列包含正预测(TP 和 FP)
      • 第一行包含否定标签(TN 和 FP)
      • 第二行包含正标签(TP 和 FN)
      • 对角线包含正确预测标签的数量。

      根据这些信息,我认为您将能够解决您的问题的第 1 部分和第 2 部分。

      对于第 3 部分,您只需将对角线上的值相加并除以所有元素的总和,即为

      (27 + 18 + 6 + 48) / (27 + 18 + 6 + 48 + 6 + 16 + 5 + 21 + 1 + 3 + 9)

      或者你可以只使用 score() 函数。

      【讨论】:

      • 但是我们这里有 3 列,第 3 行也发生了什么?
      • @JohnSall 你指的是这个数字还是别的什么?
      • 图中一共有三行三列。
      【解决方案3】:
      • scikit-learn 的约定是将预测放在列中,将实际值放在行中

      • scikit-learn 的约定是默认将 0 用于负类(顶部),将 1 用于正类(底部)。可以使用标签 = [1,0] 更改顺序。 可以这样计算整体准确率

        M = np.array([[27, 6, 0, 16], [5, 18,0,21],[1,3,6,9],[0,0,0,48]] )

        M

      对角线之和

      w = M.diagonal()
      w.sum()
      

      99

      矩阵之和

      M.sum()
      

      160

      ACC = w.sum()/M.sum()
      ACC
      

      0.61875

      【讨论】:

        猜你喜欢
        • 2013-08-25
        • 2019-01-22
        • 2018-10-23
        • 2018-10-23
        • 2020-07-25
        • 2021-11-30
        • 2015-08-25
        • 2016-05-12
        • 2021-02-01
        相关资源
        最近更新 更多