Python sklearn如何计算平均精度分数?

Python sklearn如何计算平均精度分数?,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,根据中平均精度AP分数的定义,AP是基于跨阈值召回的精度和增量计算的 在average_precision_score函数中,强制参数如下: y_true:二进制标签指示器中的真二进制标签 y_分数:目标分数,可以是正类的概率估计、置信值,也可以是决策函数在某些分类器上返回的决策的非阈值度量 据我所知,y_true是每个记录所属的基本真相类的列表。y_分数是对应于每个记录的预测类列表。同样,对于二元分类任务,y_true=[1,0,0,1,1]和y_分数=[0,0,0,1,0]将是可行参数,其中

根据中平均精度AP分数的定义,AP是基于跨阈值召回的精度和增量计算的

在average_precision_score函数中,强制参数如下: y_true:二进制标签指示器中的真二进制标签

y_分数:目标分数,可以是正类的概率估计、置信值,也可以是决策函数在某些分类器上返回的决策的非阈值度量

据我所知,y_true是每个记录所属的基本真相类的列表。y_分数是对应于每个记录的预测类列表。同样,对于二元分类任务,y_true=[1,0,0,1,1]和y_分数=[0,0,0,1,0]将是可行参数,其中对于记录1,基本真值类为正1,但预测类为负0

我们尝试使用不同的阈值执行分类任务。因此,对于每个阈值,我们会得到不同的y_分数列表。在这种情况下,当我应用average_precision_score函数时,我将获得每个阈值的AP值。没有一个值跨越定义所暗示的阈值。sklearn函数中没有“阈值”参数

你能告诉我我对sklearn中平均精度评分函数的理解是否正确吗?如果是这样,与定义相矛盾的原因是什么?

您犯了一个错误:

Y_分数不是[0,0,1,0]的形式

从文件:

y_分数:数组,形状=[n_样本]或[n_样本,n_类] 目标分数,既可以是概率估计的正值 类别、置信值或决策的非阈值度量 由某些分类器上的decision_函数返回

这意味着它的形式如下[[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,…]

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

几天前在这里有一个很好的解释: