Python 混乱矩阵学习错误?

Python 混乱矩阵学习错误?,python,python-3.x,scikit-learn,confusion-matrix,Python,Python 3.x,Scikit Learn,Confusion Matrix,我正在使用sklearn.metrics.conflusion\u matrix进行测试,以查看如果在预测数组中存在一个不在标签和映射数组中的类,会发生什么情况。 我的代码是: from sklearn.metrics import confusion_matrix as cm a = ["positive\n", "positive\n", "negative\n", "positive\n", "negative\n"] b = ["negative\n", "negative\n", "

我正在使用
sklearn.metrics.conflusion\u matrix
进行测试,以查看如果在预测数组中存在一个不在标签和映射数组中的类,会发生什么情况。 我的代码是:

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
因此将跳过类
don



但是,如果您查看我安装的版本
v0.21.2
,则
ravel()
方法“应该”输出混淆矩阵的值,如我所写:TN、FP、FN、TP。my
打印的输出不同。似乎ravel()的真正输出是翻转的:TP、FN、FP、TN。我的想法对吗?

没有bug。您已定义标签:

m = ["positive\n", "negative\n"]
因此,
“正\n”
是负的,
“负\n”
是正的。结果符合您的要求

如果以这种方式修改
m

m = ["negative\n", "positive\n"]
您将获得:

1 0 3 0

分别用于
TN、FP、FN、TP

因此,在二进制a分类的情况下,映射数组中的第一个类必须是“负”类才能获得正确的
ravel()
结果,否则我必须交换返回值?但最终结果是一样的,对吗?本质上没有对错之分。为了理解这个过程,构建一个矩阵,其中行是真实类,列是预测类。然后,根据预测值和真实值填充矩阵。你得到了结果。