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_samples,) 或 (n_samples, n_classes) 的类似数组对象
真实的二元标签或二元标签指示器。
- y_score形状为 (n_samples,) 或 (n_samples, n_classes) 的类似数组对象
目标分数,可以是正类的概率估计、置信度值,或者非阈值化的决策度量(如某些分类器上的 decision_function 返回的值)。对于 decision_function 分数,大于或等于零的值应表示正类。
- average{‘micro’, ‘samples’, ‘weighted’, ‘macro’} 或 None, default=’macro’
如果为
None,则返回每个类别的分数。否则,这决定了对数据执行的平均类型'micro':通过将标签指示器矩阵的每个元素视为一个标签来全局计算指标。
'macro':计算每个标签的指标,并找到它们的未加权平均值。这不考虑标签不平衡。
'weighted':计算每个标签的指标,并找到它们的平均值,按支持度(每个标签的真实实例数)加权。
'samples':计算每个实例的指标,并找到它们的平均值。
当
y_true为二元时将被忽略。- pos_labelint, float, bool or str, default=1
正类的标签。仅适用于二元
y_true。对于多标签指示器y_true,pos_label固定为 1。- sample_weightshape 为 (n_samples,) 的 array-like, default=None
样本权重。
- 返回:
- average_precisionfloat
平均精度得分。
另请参阅
roc_auc_score计算 ROC 曲线下的面积。
precision_recall_curve计算不同概率阈值的精确度-召回率对。
PrecisionRecallDisplay.from_estimator使用估计器和数据绘制精度-召回曲线。
PrecisionRecallDisplay.from_predictions使用真实标签和预测标签绘制精度-召回曲线。
注意事项
版本 0.19 中的变更: 不再在操作点之间进行线性插值,而是根据自上一个操作点以来召回率的变化来加权精度。
References
[1]示例
>>> 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