【问题标题】:Unexpected behaviour for evaluation metrics (precision etc) in sklearnsklearn 中评估指标(精度等)的意外行为
【发布时间】:2013-10-27 10:46:44
【问题描述】:
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:添加了相关函数的导入路径。

【问题讨论】:

标签: python numpy scikit-learn


【解决方案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

【讨论】:

    【解决方案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

    【讨论】:

    • 你在正确的轨道上。我确实想计算所有真/假阳性的精度。但是“average='micro'”仍然给我相同的结果(0.66666)而不是0.6。让我升级我的 scikit 安装,然后再试一次。
    猜你喜欢
    • 2020-10-29
    • 2019-04-30
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2021-01-05
    • 2023-03-21
    • 2021-01-09
    • 1970-01-01
    相关资源
    最近更新 更多