查全率(Recall)、查准率(Precision)与平均精度(Average Precision )

宁静致远
3周前 阅读 52 点赞 2

信息检索系统(如搜索引擎)的评价一般有这两种指标:

1、检索结果的相关性(precision)

2、系统检索多少真正相关的内容(recall)


飞机和大雁的故事

假设下面有一个由飞机和大雁组成的图像数据集。

你现在想识别数据集中的所有的飞机。根据机器所识别的结果与图片的实际情况,我们可以得到以下四种识别结果与实际对比的情况:

True Positives(TP):识别正确,系统认为是飞机,实际是飞机;

True Negatives(TN):识别正确,系统认为不是飞机,实际不是飞机;

False Positives(FP):识别错误,系统认为是飞机,实际不是飞机;

False Negatives(FN):识别错误,系统认为不是飞机,实际是飞机。

在这个识别案例中,有三个 True Positive和一个False Positive。

根据以上定义的术语,在本次识别中,分别有三个TP、一个FP、四个TN和两个FN。


查准率(Precision)和查全率(Recall)

现在,我们来看看查准率和查全率的定义。

查准率是识别正确的结果在所识别出的结果中所占的比率,即:

precision=tptp+fp=tpnprecision = \frac{tp}{tp + fp} = \frac{tp}{n}

其中 nn 是等于识别出的总数(tp+fptp + fp )。

查全率是识别正确的结果占数据集中所有要识别出的总数的比率,即:

precision=tptp+fnprecision = \frac{tp}{tp + fn}

在上面的识别例子中,有3个TP、1个FP、4个TN、2个FN,也即

查准率= 3 / (3 + 1) = 0.75,

查全率= 3 / (3 + 2) = 0.6。

也就是说,识别的准确率为75%,60%的飞机被识别出来了。


调整阈值

一次识别的结果可能说明不了什么,我们可以进行多次识别。识别出的数量可能是一个、两个或者其他个,正确识别的个数也有很多种情况。在上述例子中,系统识别出了四个,也即本次识别对应了一个特定的阈值(下图所示的蓝线)。多次运行后会出现不同的阈值(分割线)。

根据每次阈值的不同,分割线也会在不同的位置,在每个不同的位子,我们会得到一个不同的查准率和查全率。如果只识别到了最上面的一个图片,这时候TP=1、FP=0、FN=4,所以查准率为100%, 查全率为 20%;如果只识别到了前两张图,这时候TP=2、FP=0、FN=3,查准率仍然是100%,和查全率将涨到40%。下表给出了查准率和查全率在上述假设顺序在所有可能的组合。


查准率-查全率曲线(Precision-Recall curves)

分析一个分类器效果的一个好方法是去观察查准率和查全率随着阈值改变的变化情况。一个好的分类器的查准率应该是随着查全率的增加而保持着一个高的比率的,也就是说能在识别出所有大雁之前识别出更多的飞机;反之,一个效果不好的分类器的查准率将随着查全率的上升而迅速下降。下图为查准率 pp 关于查全率 rr 的函数图像:


平均精度

相比于一张曲线图,一个具体的数值更能体现出这个分类器的效果。通常,我们用平均精度来表示。

近似平均精度(Approximated Average precision)

平均精度就是就是在查全率从0到1各个点的查准率的均值:

01p(r)dr\int_{0}^{1}p(r)dr

也就是曲线下的面积。实际上,这个积分是无限接近于每种可能的阈值下的查准率与查全率的变化值的乘积之和的:

Nk=1P(k)Δr(k)\sum_{N}^{k=1}P(k)\Delta r(k)

其中 NN 是数据集中图像的总数,P(k)P(k) 是识别出的图像为 kk 时的查准率,Δr(k)\Delta r(k) 是查全率在 kkk1k-1 之间的差值。

本例中,该值=(1×0.2)+(1×0.2)+(0.66 *0)+(0.75×0.2)+(0.6×0)+(0.66×0.2)+(0.57×0)+(0.5×0)+(0.44×0)+(0.5×0.2)= 0.782。


插值平均精度(Interpolated average precision)

还有一种计算方法叫做插值平均精度。一般情况下,这也叫做叫平均精度。与用 P(k)P(k) 的做法不一样,这种方法是这样计算查准率的:

maxk~kP(k~)max_{\tilde k \geq k}P(\tilde k)

换句话说,而不是使用在 kk 个识别图片下在查全率该点的查准率,而是在更高查全率中的查准率的最大值做为查准率。计算插值平均精度全方程:

k=1Nmaxk~kP(k~)Δr(k)\int_{k=1}^{N} max_{\tilde k \geq k}P(\tilde k) \Delta r(k)

以下是两种计算方法的对比(为更明显突出差异,没有使用上面的结果):

此外,还有其他方法计算插值平均精度。比如11点插值平均精度法,从0到1(0,0.1,0.2,…,0.9,1 )这些点取查准率,其他点和插值平均精度一样。


参考链接:https://sanchom.wordpress.com/2011/09/01/precision-recall/


为自己,也为初学AI的你,整理一些知识,节省一些时间。

| 2
登录后可评论,马上登录吧~
评论 ( 0 )

还没有人评论...