【ML学习笔记】11:Accuracy/FAR/FRR/Precision/Recall/ROC/AUC

来源:互联网 发布:java线程状态 编辑:程序博客网 时间:2024/06/10 12:24

accuracy准确率

准确率(accuracy)≠精确率(precision)
准确率=正确率

准确率是最传统、最符合我们日常思维的评估方式。在分类问题中,对于一个实例,在学习机器上跑过以后,如果预测到的标签和其真实标签一样,我们就认为这次预测是准确(accuracy)的。所以准确率即是:

P()=num(=)

这里写图片描述
即上图中红的块内实例数除以绿的块内实例数。可惜我们对标签不同值的关注往往不同,这样的综合标签的各种取值去考察的指标,即便很高也不见得能符合我们的需求。

错误率估计

有监督学习拿到的清洗后的有标签的样本集是很宝贵的,错误率估计只是对用全部样本作训练得到的学习机器的性能的评估,而不是在生成学习机器时也只拿一部分作训练集。

①训练错误率

训练错误率=视在错误率=重代入错误率

训练错误率是在有监督学习中,用训练集训练好的学习机器,拿训练集本身作测试,其中分类错误的样本占总样本数的比例。

因为overfitting的存在,训练错误率再小也不能认为学习机器很优秀。

②测试错误率

测试集=检验集=考试集

有监督学习拿到的样本集都是有标签的,从中划分出一部分来作为测试集,拿另外那部分做训练,训练好后的学习机器拿测试集作测试,其中分类错误的样本占总样本数的比例。

显然测试错误率能在一定程度上表征学习机器的推广能力。

③交叉验证错误率

如果像前面说的那样,把本来就宝贵的有标签的样本集划分出一部分来作为测试集,一方面会因为训练样本变少而使学习机器性能变差,另一方面测试集较小使对测试错误率的估计方差变大,两者都是不好的现象,交叉验证缓解了它们。

交叉验证的做法之前大致了解过了,就是把样本集每次划分为临时训练集临时测试集,每次用临时训练集作训练得到学习机器对临时测试集测试,得到一个测试错误率。如此反复最终把所有测试错误率求平均值,作为交叉验证错误率

一般让临时训练集大一些,这样得到的错误率估计就更接近用全部样本做训练得到的学习机器的情况;测试集小会导致估计的测试错误率的方差大,但最后求了平均可以缓解。

n倍交叉验证

就是之前学习决策树时了解的那种交叉验证方式。

留一法交叉验证

是n倍交叉验证的极端情况,若样本集中有N个样本,即作N-fold交叉验证(临时测试集只留1个样本)。

FAR误识率和FRR拒识率

在分类问题中,对于某一个实例,在学习机器上跑过以后,如果预测到的标签A和其真实的标签B不一致。对于标签A来说,这件事是误识(本该和A匹配失败的反倒匹配成功);对于标签B来说,这件事是拒识(本该和B匹配成功的反倒匹配失败)。

①FAR误识率

这个学习机器针对标签A的误识率为:

P(A|A)

可以用频率估计,即针对A类的:

这里写图片描述
即上图中红的块内实例数除以绿的块内实例数。

②FRR拒识率

这个学习机器针对标签B的拒识率为:

P(B|B)

可以用频率估计,即针对B类的:

这里写图片描述
即上图中红的块内实例数除以绿的块内实例数。

precision精确率和recall召回率

精确率(precision)≠准确率(accuracy)
精确率=查准率
召回率=查全率

在分类问题中,对于一种标签A,当一堆实例(往往说的是测试集)在学习机器上跑过后,对于预测到的标签是A的实例,如果其真实的标签就是A,那么称这次预测是精确(precision)的;还是用标签A来讲,当一堆实例(往往说的是测试集)在学习机器上跑过后,对于真实标签是A的实例,如果预测后的标签就是A,那么称这次预测把这个实例召回(recall)了,即召回到了自己该在的类别。

[精确]是从[找得对]的角度来看的,[召回]是从[找得全]的角度来看的。

①precision精确率

这个学习机器针对标签A的精确率为:

P(A|A)

可以用频率估计,即针对A类的:

这里写图片描述
即上图中红的块内实例数除以绿的块内实例数。

②recall召回率

这个学习机器针对标签A的召回率为:

P(A|A)

可以用频率估计,即针对A类的:

这里写图片描述
即上图中红的块内实例数除以绿的块内实例数。

从正类负类角度去看这四个指标

对于刚刚说的FAR、FRR、precision、recall四个指标,都是针对某一个确定的标签值的,我们并不关心剩下的所有标签具体有哪些是什么样子的,所以完全可以把剩下的标签全放在一起来看这四个指标。也就是说,当我们关心任何一个确定的标签值时,都相当于在从二分类的角度看问题。那么可以把这个所关心的标签值A看成正类,剩下的所有标签值合成负类,则问题可以这样看待:
这里写图片描述
那么上面的四个指标的计算也就是(后面写的是我总结的一句话短评):

FAR=FPFP+TN[]

FRR=FNTP+FN[]

precision=TPTP+FP[]

recall=TPTP+FN[]

EER相等错误率

训练来的学习机器往往不能正正好好符合我们的要求,对于里面的某些阈值的设定,会改变FAR和FRR。

关于性能正常的学习机器受阈值的影响,可以想象如果误识的多了,那么拒识的就少了(男生都识别成女生了,女生还不容易被识别成女生吗?);而如果误识的少了,那么拒识的就多了(穿女装的男生都没被错误识别成女生,春哥怕是也要被识别成男生了!)。

这是一对矛盾,在其它条件都不能再改善的情况下,对于不同的问题,或者分类器的实际应用场合的不同,我们也要从中考虑向哪边倾斜。比如秘密机关如果要做人脸识别进入,那么宁可识错也不想把错的识别成对的,也就是更要去降低FAR误识率;而对于普通手机解锁的指纹识别,出于用户体验考虑可能就要解锁的舒适一些,也就是更要去降低FRR拒识率。
这里写图片描述
而不去考虑这个阈值到底取多少的时候,FAR和FRR具体是多少其实都没法确定,这种时候就可以用相等错误率来评估这个未定阈值的学习机器的性能了。平均错误率ERR也就是上图中FAR和FRR相等之处:
这里写图片描述

ROC接收者操作特征

很显然EER的值可以用来描述学习机器的性能,但它毕竟是一个值,没法反应在不同阈值下性能的具体倾向和整体水平。而且对于不同的FAR和FRR曲线,仍可能得到相同的EER值,这显然不好。

一个想法是就用前面的FAR和FRR曲线,不过由于两者之间存在你大我小的关系,完全可以描绘这种关系而仅使用一条曲线来描述学习机器的性能。

①扁平的ROC曲线

在这篇博文中博主讲的ROC曲线就是扁平的ROC曲线。即直接使用FAR作为横坐标,FRR作为纵坐标,两者你大我小,并且可以直接构造y=x的EER直线,其交点的任一方向坐标值就是EER相等错误率:
这里写图片描述

②臃肿的ROC曲线

在前面的讨论中其实可以注意到,FRR拒识率和recall召回率加起来始终是1:

FRR=FNTP+FNrecall=TPTP+FN

那么可以用1减去上面的扁平的ROC曲线的纵坐标FRR,得到臃肿的ROC曲线(如这篇):
这里写图片描述
相当于是,在这条曲线上,我们把精力更多地放在”降低误识率”和”提高召回率”上,曲线越靠近(0,1)则学习机器的性能就越好。

AUC值

AUC本意就是Area under Curve,即臃肿的ROC曲线下的区域,AUC值就是这个区域的面积,显然越大越好,也是反映学习机器性能的一个指标:
这里写图片描述

阅读全文
0 0