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:为相关函数添加了导入路径。
告诉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
有关文档,请参阅此处 (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')
平均值的默认值为加权,用于计算指定标签上的加权精度平均值。如果您使用micro,根据文档,它会计算所有真报和误报的精度(大概都意味着所有指定的标签,但文档对此不清楚)。我想这就是你想要的?我无法检查这一点,因为我不知道您使用的是哪个版本的scikit。