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()
结果,否则我必须交换返回值?但最终结果是一样的,对吗?本质上没有对错之分。为了理解这个过程,构建一个矩阵,其中行是真实类,列是预测类。然后,根据预测值和真实值填充矩阵。你得到了结果。