作者:水哥
链接:http://www.zhihu.com/question/41540197/answer/91698989
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在图像中,尤其是分类问题中应用AP,是一种评价ranking方式好不好的指标:
举例来说,我有一个两类分类问题,分别5个样本,如果这个分类器性能达到完美的话,ranking结果应该是+1,+1,+1,+1,+1,-1,-1,-1,-1,-1.
但是分类器预测的label,和实际的score肯定不会这么完美。按照从大到小来打分,我们可以计算两个指标:precision和recall。比如分类器认为打分由高到低选择了前四个,实际上这里面只有两个是正样本。此时的recall就是2(你能包住的正样本数)/5(总共的正样本数)=0.4,precision是2(你选对了的)/4(总共选的)=0.5.
图像分类中,这个打分score可以由SVM得到:s=w^Tx+b就是每一个样本的分数。
从上面的例子可以看出,其实precision,recall都是选多少个样本k的函数,很容易想到,如果我总共有1000个样本,那么我就可以像这样计算1000对P-R,并且把他们画出来,这就是PR曲线:
这里有一个趋势,recall越高,precision越低。这是很合理的,因为假如说我把1000个全拿进来,那肯定正样本都包住了,recall=1,但是此时precision就很小了,因为我全部认为他们是正样本。recall=1时的precision的数值,等于正样本所占的比例。
所以AP,average precision,就是这个曲线下的面积,这里average,等于是对recall取平均。而mean average precision的mean,是对所有类别取平均(每一个类当做一次二分类任务)。现在的图像分类论文基本都是用mAP作为标准。
上图中有一个AP11,这是把recall从0,0.1,0.2.一直到1.0的11个点的precision取平均得到的结果。VOC08之后AP11已经被抛弃了。
貌似从VOC08之后要求PR曲线必须单调下降了?这个不太确定。
================================================
1.使用AP会比accuracy要合理。对于accuracy,如果有9个负样本和一个正样本,那么即使分类器什么都不做全部判定为负样本accuracy也有90%。但是对于AP,recall=1那个点precision会掉到0.1.曲线下面积就会反映出来。
2.在实际中计算AP时,如果是matlab的话,可以直接调用vl_feat中的vl_pr:VLFeat - Tutorials
这里面详细地给出了概念的解释以及计算方式。
相关文章
- 数组中的forEach和map的区别
- MATLAB函数的filter2 conv2 imfilter2函数 与opencv中的cvFilter2D函数的异同及图像的频率滤波
- (三)OpenCV中的图像处理之图像变换及模板匹配
- 图像处理中的一些基本问题解释
- C++中的STL中map用法详解
- OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式
- 将两个y轴放在MATLAB中的imagesc图像上
- JavaScript中的数组遍历forEach()与map()方法以及兼容写法
- 从MAP角度理解神经网络训练过程中的正则化
- JLabel上的滚动,包括网格布局中的图像?