sklearn中评估指标(精度等)的意外行为


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

相关内容

  • 没有找到相关文章

最新更新