为什么有了Accuracy还要提出Precision的概念呢?因为前者在测试样本集的正负样本数不均衡的时候,比如正样本数为1,负样本数为99时,模型只要每次都将给定的样本预测成负样本,那么Accuracy = (0+99)/100 = 0.99,精度依然可以很高,但这毫无意义。但是同样的样本集,同样的方法运用到查准率公式上,就不可能得到一个很高的值了。

查全率/召回率 recall
所有真的是正样本的图片中,被成功预测出来的图片所占的比例。

查准率和查全率的关系
一般来说,想查的准,那么往往查不全(想想宁缺毋滥);想查的全,又往往会不准(想想宁抓错不放过)。所以P和R是两个矛盾的量。

P-R曲线 (查准率-查全率曲线)
该曲线是通过取不同的阈值下的P和R,绘制出来。这里的阈值就是指模型预测样本为正样本的概率。比如阈值取0.6,则所有被预测出的概率大于该阈值的样本,都认为是被预测成了正样本,这些被预测成正样本的样本中,实际是由TP(真的是正样本)和FP(并不是正样本)组成的。所以取一个阈值,就能计算出一组P-R,那么取多个阈值后,P-R曲线就绘制出来了。

从上图中可以看到,P-R曲线是采用平衡点(P=R的点)来判断哪个学习器更好(图中有A、B、C三个学习器),A好于B好于C。

  • F1分数和Fβ分数
    然而,上面的度量方法只能通过看图来理解,但是我们希望能更直接的通过一个分数来判定模型的好坏。所以更常用来度量的方法是取相同阈值下各模型的F1分数或Fβ分数(以下截图来自周志华老师的西瓜书[1]):

    F1分数的公式是怎么来的呢?看下图:2.10的公式,其实是由下面的调和平均公式推导出来的。

    所谓调和平均数就是:所有数字的倒数求算术平均后,再取倒数。该值平均考虑了P和R的表现。
    为什么β>1时查全率有更大影响,而β<1时查准率有更大影响呢?看下图:2.11的公式,其实是由下面的加权调和平均公式推导出来的。

    β的平方相当于1/R的权重,当β大于1,相当于提高1/R的重要度,当β小于1,相当于降低了1/R的重要度,而R正是查全率。
    所以,当我们更倾向于查准率R的表现(即想查的更全,宁抓错不放过)时,可以将β设置为一个大于1的数字,具体设置多少,就要看倾向程度了,然后进行Fβ分数的比较。

  • ROC曲线
    ROC的全称是Receiver operating characteristic,翻译为受试者工作特征。先不用管这个名字有多难理解。我们先弄清楚ROC曲线是什么。ROC曲线如下图[2]:

    纵坐标是真正率(其实就是召回率/查全率)=TP/(TP+FN),横坐标是假正率(误检率FPR)=FP/(FP+TN)。
    该曲线是模型在不同阈值(与PR曲线中提到的阈值意思一样)下的查全率和误检率的表现。当阈值设为0时,相当于所有样本预测为正,查全率达到1,误检率当然也达到1;当阈值设为1时,相当于所有样本预测为负,查全率达到0(太严格了),误检率当然也达到0(因为严格嘛)。
    因为我们希望召回率高,误检率低,所以曲线上越接近左上角(0,1)的点表现越好。所以ROC曲线是干嘛的?就是通过查全率和误检率的综合表现来评价模型的好坏用的。
    你可以尝试大量增加测试样本的正样本或负样本的数量,让数据集变的不均衡,然后会发现ROC曲线可以几乎稳定不变,而PR曲线会发生巨大的变化。如下图:[5]。

    可以根据PR曲线中P(precision)的公式,R(recall)的公式,根据ROC曲线中R(recall)的公式,误检率(FPR)的公式来理解,这里不细说了。

    area under curve。定义为ROC曲线下的面积。然因为这个面积的计算比较麻烦。所以大牛们总结出了下面的等价的计算方法。
    假设一组数据集中,实际有M个正样本,N个负样本。那么正负样本对就有M*N种。
    AUC的值等同于在这M*N种组合中,正样本预测概率大于负样本预测概率的组合数所占的比例。

    其中I函数定义如下:
    P正>P负,输出1;
    P正=P负,输出0.5;
    P正<P负,输出0。
    上面的计算方法已经比计算面积要愉快多了,但是还有相对更好的计算思路:
    按照预测概率从小到大排序,得到排好序的M*N个组合,其中正样本的序号就表示比当前正样本概率小的样本个数,再从这些样本中减去正样本的个数,就得到了当前正样本概率大于负样本概率的组合数。
    为了计算方便,我们先把排好序的M*N个组合中所有正样本的序号累加,然后减去正样本的个数的累加,就得到了所有正样本概率大于负样本概率的组合数,然后除以M*N,就得到了在这M*N种组合中,正样本预测概率大于负样本预测概率的组合数所占的比例,这个比例等同于AUC。下面我们来看看具体的计算公式[4] :

    看上去挺复杂的,稍微解释一下你就明白了。
    分子左边的部分就是排好序的M*N个组合中所有正样本的序号累加,
    分子右边的部分其实就是正样本的个数的累加的公式,这个稍微解释一下:比如我们有5个正样本,那么正样本的个数累加就是1+2+3+4+5=15,带入公式就是5*(1+5)/2=15,而这个公式就是“高斯等差数列求和公式”: (首项+末项)x项数÷2。
    分母部分比较好理解了,就是所有的正负样本的组合数。
    如果在排序的时候遇到了概率值相同的情况,其实谁前谁后是没有关系的,只是在累加正样本的序号的时候,如果有正样本的概率值和其他样本(包括正和负)的概率值一样,那么序号是通过这些相同概率值的样本的序号的算术平均数来计算的。举例如下[3]:

    在累加正样本的序号的时候,正样本的rank(序号)值:
    对于正样本A,其rank值为7
    对于正样本B,其rank值为6
    对于正样本E,其rank值为(5+4+3+2)/4
    对于正样本F,其rank值为(5+4+3+2)/4
    最后正样本的序号累加计算就是:

    求出了各个模型的ROC曲线下的面积,也就是AUC,就可以比较模型之间的好坏啦。

    以上度量指标一般都是用于二元分类,如果是在多分类的场景下,可以拆成多个二分类问题来度量。而如果除了分类还有其他预测的任务,就需要针对性的度量指标来评估模型的好坏了。比如像目标检测,除了目标分类,还要预测目标的边界框位置,所以用的是mAP指标,具体可以参考下一篇文章《目标检测中为什么常提到IoU和mAP,它们究竟是什么?》

    [1]《西瓜书》周志华 著
    [2]《机器学习实战》Peter Harrington 著
    [3] https://blog.csdn.net/qq_22238533/article/details/78666436
    [4] https://blog.csdn.net/pzy20062141/article/details/48711355
    [5] https://www.cnblogs.com/dlml/p/4403482.html

    ok,本篇就这么多内容啦 ,感谢阅读O(∩_∩)O,88

    推荐阅读:
    还再@微信官方要国旗?这才是正确的打开方式~

  •