zoukankan      html  css  js  c++  java
  • 评价体系-分类

    转:首先我们先列举几个常见的评价标准:
    分类问题:accuracy, precision, recall, confusion matrix, F1-Measure, ROC curve
    检测问题:AP, mAP, IoU value, P-R Curve

    接下来我们从简单到复杂逐一介绍。

    accuracy

    在做分类问题时,最普遍的也是最简单的评价指标就是accuracy,正是因为这种普遍,caffe中已经实现了这个层,那怎么算呢?其实就是假如有10个样本,8个判断对了,2个错了,那么accuracy就是0.8,所以说这是一种很直观的评价方法,但是这是数据平衡的情况下。在数据不平衡的情况下,假如有10个样本,9个正例,1个反例,那么如果分类器无脑全部判定为正例,那么accuracy就是0.9,在test场景中,毫无疑问这个分类器没有任何作用。所以说,accuracy这个评价标准是有局限性的。

    precision

    precision就是精确度,用公式表示为:
    precision = TP/(TP + FP)
    TP指的是本来是正样本,预测也是正样本
    FP指的是本来是负样本,预测成了正样本
    换句话说,precision指的是预测的正样本中有多少是真正的正样本。如果某个任务我们不奢求把所有的正样本都找出来,但是希望找出来的都是对的,那么我们就应该让precision高一些。

    recall

    recall是召回率,用公式表示为:
    recall = TP/(TP + FN)
    FN指的是本来是正样本,但是预测成了负样本
    换句话说,recall指的是所有真正的正样本中到底找到了多少个。如果某个任务,我们希望宁可错杀一千,绝不放过一个,那么我们就希望recall要高一些。

    confusion matrix

    没错,这就是一个矩阵。那么它的横纵坐标轴是什么呢?一般说来它的横轴是预测结果,纵轴是groundtruth,举个例子如下图所示
    这里写图片描述
    也就是说,它预测了7个cat,其中5个确实是cat,有2个应该是dog,并且有3个事实上是cat的被预测成了dog,因此,根据这个矩阵就可以计算每个类别的precision和recall,并且我们也可以看出,斜对角线上的数值越大,分类器的性能越优越。

    F1-Measure

    F1 measure 主要是针对数据不平衡情况下的度量,它综合考虑了precision和recall,具体公式如下
    这里写图片描述
    因此一般在分类问题中,F1 measure也是每一个类别都有一个值
    事实上F1 measure 之所以叫F1是因为在F measure中有一个参数β

    取值为1,在这种情况下相当于均衡考虑了recall和precision的重要性。那接下来看一下完整的F measure公式
    这里写图片描述
    如果要着重考虑precision,那么β的取值极端情况下取0,则F = precision,如果着重考虑recall,那么β

    极端情况下取正无穷,则F = recall,注重考虑哪个方面主要根据不同应用场景而定。

    ROC curve

    参考:机器学习之分类器性能指标之ROC曲线、AUC值
    ROC曲线的横轴为负正类率(false postive rate FPR),纵轴为真正类率(true postive rate TPR),其实就是给confidence设定一个threshold,所有predict的结果大于这个值的都认为是正例,然而这些被认为的正例有对有错,对的就是TP,错的就是FP,而之所以被称为是率,主要是要将当前的TP或FP除以总的TP或FP。下面贴一个常见的表格
    这里写图片描述
    上图可知,在20个样本中,10个正例,10个负例,如果threshold取0.51,则有9个样本被认为是正例,这10个样本中6个正确,3个错误,因此横轴的FPR = 3/10 = 0.3,纵轴的TPR = 6/10 = 0.6,因此在ROC curve上就存在该点(0.3,0.6)其他阈值下的计算类似

    mAP

    终于到了mAP,我们通常认为mAP的度量比precision要科学一些,这主要是因为,倘若一个数据集有9个正样本,1个负样本,那么直接预测时候什么训练都不要做,全部预测为正样本,那么precision为0.9,recall为1.这样看上去,效果非常好,但是这并不科学。因此,需要引入mAP的概念。mAP一句话概括是计算每种recall下最大的precision的平均值。

    举例说明,倘若groundtruth为[1,0,1,1,0],而predict为[0.96,0.94,0.92,0.90,0.88]那么当recall等于1/3时,precision有两个值,分别为1和1/2,当recall等于2/3时,precision为2/3,当recall为1时,precision为3/4和3/5.

    那么AP = (1+2/3+3/4)/3 = 29/36

    mAP就是在多分类问题中对AP求的平均值

    而在object detection 中,被用来计算AP和mAP的区域IOU 是要大于某个阈值的,印象中faster RCNN中应该是0.5。

    IOU value这个度量标准,是对最终的bbox的IOU求的平均。

    P-R curve就是对precision和recall绘制的曲线,而precision和recall在计算mAP的时候已经得到。而具体概念前文也已经描述,其中横轴是recall纵轴是precision

    一般情况下,在object detection时候用验证集的mAP来表示训练模型的性能,当然,因为通常情况下验证集是训练集分出来的,因此数据分布类似,所以这里的mAP一般只能表现模型对训练数据的拟合程度,并不能表示泛化性能。

  • 相关阅读:
    Redis源码剖析之字典(dict)
    Redis源码剖析之跳表(skiplist)
    面试题精选:神奇的斐波那契数列
    awk实现类sql的join操作
    [翻译]CAP理论及其证明
    今年是冷冬?我爬了北京10年的气温,哟 还真是!
    python 等间隔抽取一定数量的数据
    操作系统-第十章-文件系统
    操作系统-第九章-虚拟内存管理
    操作系统-第八章-内存管理
  • 原文地址:https://www.cnblogs.com/hrnn/p/13404973.html
Copyright © 2011-2022 走看看