平均精度(AP)是机器学习领域中用于评估分类模型性能的一个重要指标。它通过计算在不同阈值下的精确度和召回率的加权平均值来总结精确度-召回率曲线。不同于使用梯形规则计算精确度-召回率曲线下面积的方法,AP的计算不进行线性插值,因此可能更为保守。
AP的计算公式如下:
AP = sum((Rn - Rn-1) * Pn)
其中,Pn和Rn分别表示第n个阈值下的精确度和召回率。这种计算方式考虑了从上一个阈值到当前阈值召回率的变化,作为权重。
在实际应用中,AP的计算可以通过以下参数进行调整:
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...