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

Which class label is considered negative in sklearn.metrics.confusion_matrix?

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

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

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

  1. 行或列是否被视为实际(或预测)标签。
  2. 是否假定 01 为正(或负)class。 其中 none 直接在 the docstring.
  3. 中提到

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

简答 在二进制 classification 中,当使用参数 labels 时,

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

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


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

>>> 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 如下:

>>> 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) , 因此 False Negative 等于 2.

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

假设 sklearn 认为第一个标签(在 labels=[0,1] 中为负数 class。因此,这里 0,第一个标签, 代表负 class.