平均精度(AP)计算方法

平均精度(AP)是机器学习领域中用于评估分类模型性能的一个重要指标。它通过计算在不同阈值下的精确度和召回率的加权平均值来总结精确度-召回率曲线。不同于使用梯形规则计算精确度-召回率曲线下面积的方法,AP的计算不进行线性插值,因此可能更为保守。

AP的计算公式如下:

AP = sum((Rn - Rn-1) * Pn)

其中,Pn和Rn分别表示第n个阈值下的精确度和召回率。这种计算方式考虑了从上一个阈值到当前阈值召回率的变化,作为权重。

在实际应用中,AP的计算可以通过以下参数进行调整:

  • y_true:真实的二进制标签或二进制标签指示器,形状为(n_samples,)或(n_samples, n_classes)。
  • y_score:目标得分,可以是正类的概率估计、置信度值或非阈值化的决策度量(如某些分类器的decision_function返回的结果)。
  • average:可选参数,包括'micro'、'macro'、'weighted'、'samples'或None,默认为'macro'。这个参数决定了对数据进行何种类型的平均处理。
  • pos_label:正类的标签,对于二进制的y_true,该参数会被应用。对于多标签指示器y_true,pos_label固定为1。
  • sample_weight:样本权重,形状为(n_samples,),默认为None。

AP的返回值是平均精度得分,类型为float。此外,还可以参考其他相关函数,如roc_auc_score用于计算ROC曲线下的面积,precision_recall_curve用于计算不同概率阈值下的精确度-召回率对。

在版本0.19中,AP的计算方式发生了变化,不再在操作点之间进行线性插值,而是根据自上一个操作点以来召回率的变化对精确度进行加权。

以下是使用Python的sklearn库计算AP的示例代码:

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 = average_precision_score(y_true, y_scores) print(average_precision) # 输出: 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 = average_precision_score(y_true, y_scores) print(average_precision) # 输出: 0.77...
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485