混淆矩阵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
。
我正在用 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
。