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 的 RandomForest 中如何计算特征重要性?
sklearn 如何计算average_precision_score?