我知道我们可以使用列表来指示顺序:
tn, fp, fn, tp = confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0], labels=[0,1]).ravel()
但是矩阵元素的含义取决于两个假设:
0
或1
是正(或负)类。
the docstring中没有直接提及它们。这个问题已经被问到here,但是我想在这里我是在询问混乱的根源,而不是一般意义上的混乱。问题不在于如何解释混淆矩阵,而在于如何将特定类别设置为肯定或否定。
答案 0 :(得分:0)
简短答案
在二进制分类中,当使用参数labels
时,
confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0], labels=[0,1]).ravel()
类标签0
和1
分别被视为Negative
和Positive
。这是由于列表所隐含的顺序,而不是字母数字顺序。
验证: 考虑这样的不平衡类标签:(使用不平衡类使区分更加容易)
>>> 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
代表否定类。