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:添加了相关功能的导入路径。
答案 0 :(得分:1)
你必须告诉precision_score
它应该计算精度的标签。您所看到的是标签1
的精确度:
>>> precision_score(a, b)
0.66666666666666663
>>> precision_score(a, b, pos_label=1)
0.66666666666666663
但是你想要标签2
的精度:
>>> precision_score(a, b, pos_label=2)
0.5
答案 1 :(得分:1)
请参阅此处(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')
平均值的默认值为加权,它计算指定标签上的精度加权平均值。如果您使用 micro ,根据文档,它会计算所有真实和误报的精确度(可能 all 表示所有指定的标签,但文档不清楚这个)。我想这就是你想要的?我无法检查这个,因为我不知道你正在使用哪个版本的 scikit 。