python代码:由精确率召回率得到平均精确率AP
时间: 2023-07-22 19:40:31 浏览: 47
要从精确率和召回率计算平均精确率(AP),需要使用以下步骤:
1. 将精确率-召回率曲线(PR曲线)上的点按照召回率(或者按照精确率)排序,从高到低或从低到高,得到一系列的点$(r_1, p_1), (r_2, p_2), ..., (r_n, p_n)$。
2. 计算每个点的累积召回率(recall)$r_j$,定义为第j个点及其之后所有点的最大召回率。
$$r_j = \max\limits_{k \geq j} r_k$$
3. 计算AP,定义为每个点的精确率乘以其对应的召回率增量$\Delta r_j$的加权平均值。
$$AP = \sum\limits_{j=1}^n p_j \Delta r_j$$
其中,$\Delta r_j = r_j - r_{j-1}$,$r_0 = 0$。
下面是一个计算AP的Python代码示例,假设我们已经有了一个按照召回率排序的精确率列表p和召回率列表r:
```python
def average_precision(p, r):
# Append 0 at the beginning of r and p
r = [0] + r
p = [0] + p
# Compute delta recall and accumulate AP
ap = 0
for i in range(1, len(p)):
delta_r = r[i] - r[i-1]
ap += p[i] * delta_r
return ap
```
这个函数将返回我们的PR曲线下的平均精确率(AP)。