2
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:添加了相关函数的导入路径。

4

2 回答 2

1

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

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

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

于 2013-10-27T11:22:50.707 回答
1

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

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

但是您想要 label 的精度2

>>> precision_score(a, b, pos_label=2)
0.5
于 2013-10-27T11:19:50.257 回答