average_precision_score#

sklearn.metrics.average_precision_score(y_true, y_score, *, average='macro', pos_label=1, sample_weight=None)[源代码]#

根据预测分数计算平均精度(AP)。

AP将准确率-召回率曲线总结为每个阈值下实现的准确率的加权平均值,将较之前阈值的召回率增加作为权重:

\[\text{AP} = \sum_n(R_n-R_{n-1})P_n\]

哪里 \(P_n\)\(R_n\) 是第n个阈值的准确率和召回率 [1]. 此实现不是内插的,与用梯律计算精确率-召回曲线下的面积不同,后者使用线性内插,并且可能过于乐观。

阅读更多的 User Guide .

参数:
y_true形状类似阵列(n_samples,)或(n_samples,n_classes)

真正的二进制标签或二进制标签指示器。

y_score形状类似阵列(n_samples,)或(n_samples,n_classes)

目标分数可以是积极类别的概率估计、置信值或决策的非阈值测量(由 decision_function 在一些分类器上)。为 decision_function 分数、大于或等于零的值应表示阳性类别。

average“微观”、“样本”、“加权”、“宏观”}或无, 默认='宏'

如果 None ,返回每个班级的成绩。否则,这将确定对数据执行的平均类型:

'micro' :

通过将标签指标矩阵的每个元素视为一个标签来全局计算指标。

'macro' :

计算每个标签的指标,并找到其未加权平均值。 这没有考虑标签不平衡。

'weighted' :

计算每个标签的指标,并找到其平均值,并通过支持度(每个标签的真实实例数量)进行加权。

'samples' :

计算每个实例的指标,并找到其平均值。

将被忽视时 y_true 是二进制的。

pos_labelint、float、bool或char,默认=1

积极类的标签。仅适用于二进制 y_true .对于多标签指示器 y_true , pos_label 固定为1。

sample_weight形状类似数组(n_samples,),默认=无

样本重量。

返回:
average_precision浮子

平均精度得分。

参见

roc_auc_score

计算ROC曲线下面积。

precision_recall_curve

Compute precision-recall pairs for different probability thresholds.

注意到

在 0.19 版本发生变更: 精度不是在操作点之间线性插值,而是通过自上一个操作点以来的召回率变化来加权。

引用

[1]

Wikipedia entry for the Average precision <https://en.wikipedia.org/w/index.php?title=Information_retrieval& oldid=793358396#Average_precision> _

示例

>>> import numpy as np
>>> from sklearn.metrics import average_precision_score
>>> y_true = np.array([0, 0, 1, 1])
>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> average_precision_score(y_true, y_scores)
np.float64(0.83...)
>>> y_true = np.array([0, 0, 1, 1, 2, 2])
>>> y_scores = np.array([
...     [0.7, 0.2, 0.1],
...     [0.4, 0.3, 0.3],
...     [0.1, 0.8, 0.1],
...     [0.2, 0.3, 0.5],
...     [0.4, 0.4, 0.2],
...     [0.1, 0.2, 0.7],
... ])
>>> average_precision_score(y_true, y_scores)
np.float64(0.77...)