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

时间:2018-12-12 17:29:55

标签: python scikit-learn confusion-matrix

我知道我们可以使用列表来指示顺序:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

简短答案 在二进制分类中,当使用参数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表示在2种情况下,模型预测样本为负(即0),但实际标签为正(即1),因此假负等于2。

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

这样,假设sklearn将第一个标签(在labels=[0,1]中视为否定类,则所有内容加起来。因此,这里,第一个标签0代表否定类。