混淆矩阵sklearn错误?

Confusion matrix sklearn bug?

我正在用 sklearn.metrics.confusion_matrix 进行测试,看看如果预测数组中有一个 class 不在标签和映射数组中会发生什么。 我的代码是:

from sklearn.metrics import confusion_matrix as cm

a = ["positive\n", "positive\n", "negative\n", "positive\n", "negative\n"]
b = ["negative\n", "negative\n", "don't\n", "negative\n", "negative\n"]
m = ["positive\n", "negative\n"]
c = cm(a, b, m)
TN, FP, FN, TP = c.ravel()

print(c)
print("")
print("{} {} {} {}\n".format(TN, FP, FN, TP))

输出是:

[[0 3]
 [0 1]]

0 3 0 1

因此 class don't 被跳过。


但是,如果您查看 v0.21.2 版本的 documentation,这是我安装的版本 ravel() 方法 "should" 将混淆矩阵的值输出为我写道:TN、FP、FN、TP。我的 print 的输出不同。似乎 ravel() 的真实输出被翻转了:TP、FN、FP、TN。我的想法对吗?

没有错误。您已定义标签:

m = ["positive\n", "negative\n"]

因此"positive\n"为负,"negative\n"为正。结果符合您的要求。

如果这样修改m

m = ["negative\n", "positive\n"]

您将获得:

1 0 3 0

分别为TN, FP, FN, TP