@huanghaian
2020-08-28T15:22:04.000000Z
字数 3104
阅读 1247
分类
要搞懂mAP,需要先理解PR曲线。
PR曲线是以precision(精准率)和recall(召回率)这两个为变量而做出的曲线,其中recall为横坐标,precision为纵坐标。
先以二分类问题为例
把正例正确地分类为正例,表示为TP(true positive)
把正例错误地分类为负例,表示为FN(false negative)
把负例正确地分类为负例,表示为TN(true negative)
把负例错误地分类为正例,表示为FP(false positive)
在缺陷检测领域,如果正例是背景即没有缺陷,负例是缺陷,那么fn就是误报率,fp就是漏报率。
精准率和召回率的计算公式为:precision = TP/(TP + FP), recall = TP/(TP +FN),分子相同。
精准率表示在所有检测为正例的样本里面,真正是正例的比例。也叫作查准率
召回率表示在所有正例样本里面,召回了多少正例的比例。,也叫做查全率
PR曲线的计算过程如下:
假设预测为正例的概率分别为pred=[0.1,0.4,0.2,0.8,0.5,0.7],对应的label为[0,1,0,0,1,1]
首先对pred按照从大到小顺序排序,并且按照同样顺序对label进行排序,变成:
pred=[0.8,0.7,0.5,0.4,0.2,0.1],label=[0,1,1,1,0,0]
在pred的每个间隔内部切分,也就是切6刀,切分左边的为正例即预测为1,右边为负即预测为0,在每个阈值下计算precision和recall即可。
label=[0,1,0,0,1,1]
(1) 在0.8和0.7之间切分,pred值变成对应的预测index=[1,0,0,0,0,0]
此时 recall=0/6=0,precision=0/1=0
(2) 在0.7和0.5之间切分,pred值变成对应的预测index=[1,1,0,0,0,0]
此时 recall=1/6,precision=1/2
其余类推...
auc就是可以计算pr曲线下的面积,值越大越好。
前面计算的是PR曲线,对应的常用曲线还有ROC曲线,其横纵坐标轴值不一样
在ROC曲线中,横轴是假正例率(FPR),纵轴是真正例率(TPR)。
(1)真正类率(True Postive Rate)TPR: TP/(TP+FN),代表分类器预测的正类中实际正实例占所有正实例的比例,即召回率。
(2)负正类率(False Postive Rate)FPR: FP/(FP+TN),代表分类器预测的正类中实际负实例占所有负实例的比例。
其绘制方法:假设有P个正例,N个反例,首先拿到分类器对于每个样本预测为正例的概率,根据概率对所有样本进行逆序排列,然后将分类阈值设为最大,即把所有样本均预测为反例,此时图上的点为 (0,0)。然后将分类阈值依次设为每个样本的预测概率,即依次将每个样本划分为正例,如果该样本为真正例,则TP+1即TPR+1/P,如果该样本为负例,则FP+1,即FPR+1/N
ROC的评估方法兼顾正例和负例的权衡。因为TPR聚焦于正例,FPR聚焦于与负例,使其成为一个比较均衡的评估方法,
注意TPR用到的TP和FN同属P列,FPR用到的FP和TN同属N列,所以即使P或N的整体数量发生了改变,也不会影响到另一列。也就是说,即使正例与负例的比例发生了很大变化,ROC曲线也不会产生大的变化,而像Precision使用的TP和FP就分属两列,则易受类别分布改变的影响。这个结论的前提是样本分布不发生变化,也就是预测分布保持一致。这是ROC曲线的优点,即具有鲁棒性,在类别分布发生明显改变的情况下依然能客观地识别出较好的分类器。但是这其实也是缺点,因为负例N增加了很多,而曲线却没变,这等于产生了大量FP。像信息检索中如果主要关心正例的预测准确性的话,这就不可接受了。在类别不平衡的背景下,负例的数目众多致使FPR的增长不明显,导致ROC曲线呈现一个过分乐观的效果估计
类别不平衡问题中由于主要关心正例,所以在此情况下PR曲线被广泛认为优于ROC曲线。
使用场景
1 ROC曲线由于兼顾正例与负例,所以适用于评估分类器的整体性能,相比而言PR曲线完全聚焦于正例。
2 如果有多份数据且存在不同的类别分布,比如信用卡欺诈问题中每个月正例和负例的比例可能都不相同,这时候如果只想单纯地比较分类器的性能且剔除类别分布改变的影响,则ROC曲线比较适合,因为类别分布改变可能使得PR曲线发生变化时好时坏,这种时候难以进行模型比较;反之,如果想测试不同类别分布下对分类器的性能的影响,则PR曲线比较适合。
3 如果想要评估在相同的类别分布下正例的预测情况,则宜选PR曲线。
4 类别不平衡问题中,ROC曲线通常会给出一个乐观的效果估计,所以大部分时候还是PR曲线更好。
5 最后可以根据具体的应用,在曲线上找到最优的点,得到相对应的precision,recall,f1 score等指标,去调整模型的阈值,从而得到一个符合具体应用的模型。
AUC (Area under Curve):ROC曲线下的面积,介于0.1和1之间,作为数值可以直观的评价分类器的好坏,值越大越好。
AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值
F1-Score又称为平衡F分数(balanced F Score),他被定义为精准率和召回率的调和平均数。F1-Score指标综合了Precision与Recall的产出的结果。F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。
人们通常使用精准率和召回率这两个指标,来评价二分类模型的分析效果。但是当这两个指标发生冲突时,我们很难在模型之间进行比较。比如,我们有如下两个模型A、B,A模型的召回率高于B模型,但是B模型的精准率高于A模型,A和B这两个模型的综合性能,哪一个更优呢? 此时就需要F1指标了。
mAP: mean Average Precision, 即各类别AP的平均值
AP: PR曲线下面积
先对voc数据集中涉及的mAP评估指标进行分析。
参考链接: https://www.zhihu.com/question/53405779/answer/419532990
其评估指标分为两种VOC2007和VOC2012,
假设已经计算得到了所有bbox和gt的PR曲线,那么VOC2007的AP计算方法是所谓的11点法即选取Recall >= 0, 0.1, ..., 1的11处Percision的最大值,计算AP=11点处的精度最大值和/11。
VOC2012的评估指标就是标准的PR曲线下面积。
mAP就是对每一个类别都计算出AP然后再计算AP平均值就好了
由于一个gt bbox可能对应多个预测bbox,故混淆矩阵的算法需特别考虑下。
由于PR曲线仅仅关注正例,故其核心就是算出TP FP。
TP就是真正命中的bbox数目,FP就是误报数,对于任何一个gt bbox,可能出现没有预测框;只有一个预测框;和多个预测框。
1 如果没有预测框,则表示漏报,FN+1
2 如果只有一个预测框且iou大于阈值,则TP+1
3 如果有多个框,则需要根据实际需要来定了,在voc评估指标中,预测概率分值最大且iou大于阈值认为是TP(不是iou最大),TP+1,其余框算FP误报。但是在实际场合中,可能不会算误报,因为毕竟还是命中了