average_precision_score#

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

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

AP 将精确率-召回率曲线概括为在每个阈值处获得的精确率的加权平均值,其中召回率相对于前一个阈值的增加用作权重

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

其中 \(P_n\)\(R_n\) 是第 n 个阈值处的精确率和召回率 [1]。此实现未进行插值,不同于使用梯形法则计算精确率-召回率曲线下的面积(后者使用线性插值,可能过于乐观)。

更多信息请参阅用户指南

参数:
y_true形状为 (n_样本,) 或 (n_样本, n_类别) 的类数组

真实的二元标签或二元标签指示器。

y_score形状为 (n_样本,) 或 (n_样本, n_类别) 的类数组

目标分数,可以是正类的概率估计、置信值,或未经过阈值化的决策度量(由某些分类器的 decision_function 返回)。对于 decision_function 分数,大于或等于零的值应指示正类。

average{'micro', 'samples', 'weighted', 'macro'} 或 None,默认值='macro'

如果为 None,则返回每个类别的分数。否则,这决定了对数据执行的平均类型。

'micro':

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

'macro':

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

'weighted':

计算每个标签的指标,并找到它们的平均值,并按支持度(每个标签的真实实例数量)加权。

'samples':

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

y_true 是二元时将被忽略。

pos_labelint、float、bool 或 str,默认值=1

正类的标签。仅适用于二元 y_true。对于多标签指示器 y_truepos_label 固定为 1。

sample_weight形状为 (n_样本,) 的类数组,默认值=None

样本权重。

返回:
average_precision浮点数

平均精度分数。

另请参阅

roc_auc_score

计算 ROC 曲线下面积。

precision_recall_curve

计算不同概率阈值下的精确率-召回率对。

PrecisionRecallDisplay.from_estimator

使用估计器和数据绘制精确率-召回率曲线。

PrecisionRecallDisplay.from_predictions

使用真实和预测标签绘制精确率-召回率曲线。

注意

0.19 版中的变化: 精确率不再在操作点之间进行线性插值,而是根据自上次操作点以来召回率的变化进行加权。

参考

示例

>>> 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)
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)
0.77