sklearn 如何计算average_precision_score?

Posted

技术标签:

【中文标题】sklearn 如何计算average_precision_score?【英文标题】:How does sklearn comput the 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函数的理解是否正确?如果有,与定义相矛盾的原因是什么?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于sklearn 如何计算average_precision_score?的主要内容,如果未能解决你的问题,请参考以下文章

如何在sklearn中计算随机森林模型的AUC?

sklearn 的 RandomForest 中如何计算特征重要性?

sklearn 如何计算二元分类器的 roc 曲线下面积?

sklearn 如何计算average_precision_score?

如何计算 Sklearn 中点到质心的平均距离的平均值? [复制]

如何在sklearn中计算交叉验证的每个模型中的特征重要性