【问题标题】:How does sklearn comput the average_precision_score?sklearn 如何计算average_precision_score?
【发布时间】:2019-02-14 10:26:34
【问题描述】:

根据here中平均精度(AP)分数的定义,AP是根据精度和跨阈值的召回增量来计算的。

average_precision_score函数中,必选参数如下:
y_true:二进制标签指标中的真正二进制标签。

y_score:目标分数,可以是正类的概率估计、置信度值或决策的非阈值度量(由某些分类器上的“decision_function”返回)。

据我了解,y_true 是每条记录所属的基本事实类别的列表。 y_score 是每条记录对应的预测类别列表。同样,对于二元分类任务,y_true = [1,0,0,1,1] 和 y_score = [0,0,0,1,0]是可行的参数,对于记录 1,ground truth 类别为正 (1),但预测类别为负 (0)。

我们尝试使用不同的阈值进行分类任务。因此,我们为每个阈值获得不同的 y_score 列表。在这种情况下,当我应用 average_precision_score 函数时,我将获得每个阈值的 AP 值。不是定义所暗示的跨阈值的单个值。在 sklearn 函数中无论如何都没有“阈值”参数。

请问我对sklearn中average_precision_score函数的理解是否正确?如果有,与定义相矛盾的原因是什么?

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    你犯了一个错误:

    Y_score 不是 [0,0,1,0] 形式的 a

    来自文档:

    y_score : 数组,形状 = [n_samples] 或 [n_samples, n_classes] 目标分数,可以是正面的概率估计 类别、置信度值或决策的非阈值度量 (由某些分类器上的“decision_function”返回)。

    表示它的形式如下[[0.33,0.66][0.65,0.35][0.1,0.9]...]。你得到每个类的概率。现在阈值是您将决定分配给每个点的类别的值。

    例如,在我上面给出的阈值为 0.4 的列表中,如果 1 的概率高于 0.4,那么我分配 1。有了这个阈值,我的向量现在是 [1,0,1,... ] 但如果阈值为 0.70,则为 [0,0,1,....]。

    因此,通过一个预测,您可以应用不同的阈值,从而计算平均精度分数。精度和召回率是基于阈值的。

    前几天在这里做了一个很好的解释:Understanding ROC curve

    【讨论】:

      猜你喜欢
      • 2014-04-13
      • 2016-10-06
      • 1970-01-01
      • 2016-03-08
      • 2016-05-20
      • 2016-06-04
      • 2017-08-30
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多