在 sklearn.metrics.confusion_matrix 中哪个类标签被认为是负面的?

Posted

技术标签:

【中文标题】在 sklearn.metrics.confusion_matrix 中哪个类标签被认为是负面的?【英文标题】:Which class label is considered negative in sklearn.metrics.confusion_matrix? 【发布时间】:2019-05-13 20:58:40 【问题描述】:

我知道我们可以用一个列表来表示顺序:

tn, fp, fn, tp = confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0], labels=[0,1]).ravel()

但矩阵元素的含义取决于两个假设:

    行或列是否被视为 ACTUAL(或 PREDICTED)标签。 01 被假定为正(或负)类。 the docstring 中没有直接提及。

这个问题已经被问过here,但我想我在这里问的是混淆的根源,而不是一般意义上的混淆。问题不在于如何解释混淆矩阵,而在于如何将特定类别设置为正面或负面。

【问题讨论】:

Scikit-learn confusion matrix的可能重复 我在发布问题之前注意到了这一点,但我认为更中肯的问题可能会有所帮助。 【参考方案1】:

简答 在二元分类中,使用参数labels时,

confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0], labels=[0,1]).ravel()

类标签01 分别被视为NegativePositive。这是由于列表隐含的顺序,而不是字母数字顺序。


验证: 考虑这样的不平衡类标签:(使用不平衡类使区分更容易)

>>> y_true = [0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0]
>>> y_pred = [0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0]
>>> table = confusion_matrix(y_true, y_pred, labeels=[0,1]).reval()

这会给你一个混淆表如下:

>>> table
array([12,  1,  2,  1])

对应于:

              Actual
        |   1   |   0  |
     ___________________
pred  1 |  TP=1 | FP=1 |
      0 |  FN=2 | TN=12|

其中FN=2 表示模型预测样本为负(即0)但实际标签为正(即1)的两种情况,因此假负等于2。

TN=12 类似,在 12 种情况下,模型正确预测了负类 (0),因此 True Negative 等于 12。

这样一来,假设sklearn 将第一个标签(在labels=[0,1] 中作为否定类)考虑在内,所有内容都会相加。因此,这里的第一个标签0 代表否定类。

【讨论】:

以上是关于在 sklearn.metrics.confusion_matrix 中哪个类标签被认为是负面的?的主要内容,如果未能解决你的问题,请参考以下文章

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据