sklearn中的评估度量(准确率等)的意外行为

2024-04-25 14:02:57 发布

您现在位置:Python中文网/ 问答频道 /正文

from sklearn.metrics import precision_score
a = [ 1, 2, 1, 1, 2 ]
b = [ 1, 2, 2, 1, 1 ]

print precision_score(a,b, labels = [1])
# 0.6666
print precision_score(a,b, labels = [2])
# 0.5
print precision_score(a,b, labels = [1,2])
# 0.6666

为什么第一个和最后一个案例的值是相同的?在

手工计算,总精度应为3/5=0.6。但是第三种情况输出0.6666,正好是第一种情况的值。在

编辑1:将导入路径添加到有问题的函数。在


Tags: 函数fromimport路径编辑labels情况精度
2条回答

有关文档,请参阅此处(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_score.html#sklearn.metrics.precision_score)。我认为您需要将average参数更改为micro以获得指定标签的总体精度,即:

print precision_score(a,b, labels = [1,2], average='micro')

average的默认值是weighted,它计算指定标签上精度的加权平均值。如果使用micro,根据文档,它计算所有真阳性和假阳性的精度(大概all表示所有指定的标签,但文档对此并不清楚)。我想这就是你想要的?我无法检查这个,因为我不知道您使用的是哪个版本的scikit。在

您必须告诉precision_score它应该为哪个标签计算精度。您看到的是标签1的精度:

>>> precision_score(a, b)
0.66666666666666663
>>> precision_score(a, b, pos_label=1)
0.66666666666666663

但您需要标签2的精度:

^{pr2}$

相关问题 更多 >