如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线

时间:2024-04-13 12:24:00

平时在做指纹、人脸识别时,会用到一些评价算法性能评价指标。常见的当属以下几种指标:

  • 误识率(FAR,false acceptance rate)
  • 拒识率(FRR,false rejection rate)
  • ROC曲线(Receiver Operator characteristic Curve)

其中误识率与拒识率的就算公式如下: 
如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线

说白一些,假定在指纹匹配识别过程中: 


误识率(FAR)是指在标准指纹数据库上测试指纹识别算法时,不同指纹的匹配分数大于给定阈值,从而被认为是相

同指纹的比例,简单地说就是“把不应该匹配的指纹当成匹配的指纹”的比例。

 
拒识率(FRR)是指在标准指纹数据库上测试指纹识别算法时,相同指纹的匹配分数低于给定阈值,从而被认为是不

同指纹的比例,简单地说就是 “把应该相互匹配成功的指纹当成不能匹配的指纹”的比例。

 
举个例子: 


假定有110个人,每人的大拇指的8幅指纹图片共110*8=880幅的指纹数据库,即110类,每类8幅图片。当然,我们希

望类内的任意两幅图片匹配成功,类间的任意图片匹配失败。现在我们让库中的每一幅图片除开它自身之外与其他的

所有图片进行匹配,分别计算误识率,与拒识率。

误识率(FAR):假定由于指纹识别算法性能的原因,把本应该匹配失败的判为匹配成功,若假定这种错误次数为10

00次。理论情况下,来自同一个指纹的图像都成功匹配,次数为7*8*110=6160次,匹配的总次数,即880×(880-1)=7

73520次。匹配失败次数应为773520-6160=767360次。则误识率FAR为1000/767360*100%=0.13%。

  • 拒识率(FRR):假定由于指纹识别算法性能的原因,把本应该匹配成功的判为匹配失败,若这种错误次数为160次。则拒识率为160/6160=2.6%.

在有些文献中将误识率表达为FMR(False match rate),以及将拒识率表达为FNMR(False non-match rate),这和

本文中所讲到的误识率与拒识率是同一个意思,即:

  • 误识率:FAR=FMR
  • 拒识率:FRR=FNMR

    可以用以下这图加深理解: 
    如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线

ROC曲线(Receiver Operator characteristic Curve)是一种已经被广泛接受的系统匹配算法测试指标,它是匹配分

数阈值、误识率以及拒识率之间的一种关系。它反映了识别算法在不同阈值上,拒识率和误识率的平衡关系。

 
下图给出了ROC曲线,其中横坐标是拒识率,纵坐标是误识率,等错误率(EER Equal-Error Rate)是拒识率和误识

率的一个平衡点,等错误率能够取到的值越低,表示算法的性能越好。 
如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线

在另外的一些二分类模式识别,如人脸验证中,ROC 关注常关注两个指标: 
如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线

其中 


True Positive(真正, TP):将正类预测为正类数. 

True Negative(真负 , TN):将负类预测为负类数. 


False Positive(假正, FP):将负类预测为正类数 → 误报 (Type I error). 


False Negative(假负 , FN):将正类预测为负类数 →漏报 (Type II error).


直观上,TPR 代表能将正例分对的概率,FPR 代表将负例错分为正例的概率。在 ROC 空间中,每个点的横坐标是 F

PR,纵坐标是 TPR,这也就描绘了分类器在 TP(真正率)和 FP(假正率)间的 trade-off2。 


如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线

图像处理中经常有误拒率和误识率两个概念,今天简介下。

     误拒率,就是错误拒绝的意思,指的类内匹配。如果有10个志愿者的样本,每个志愿者20幅样本。那么相对于类内测试,比如对1号志愿者,同一类的这20幅图片之间,互相匹配,假设1:1的匹配,互相不重复能够进行(20*19)/2次。如果10个志愿者都进行这么测试,就是10*(20*19)/2次。这是总的类内匹配次数。预设定阈值为TH,如果匹配值th>TH就会错误拒绝

 

     误识率,指错误接受的概率,相对于类间匹配而言。不同的类之间进行的匹配,如果阈值th小于预设阈值TH,就会认为属于同一类,这种情况就是错误接受。

计算公式如下:

 

如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线

      也可以参照http://ishare.iask.sina.com.cn/f/37004900.html这个论文里的57页和20页的介绍。

       因为FRR和FAR互相矛盾,所以当两者相等时的概率就是等错误率。当阈值为TH时,此时对应的FRR有个数值、FAR有个数值。这样得到一组对应的FRR和FAR,以FAR为横坐标,FRR为纵坐标画曲线,就是ROC曲线。再画y=x的曲线,两个曲线相交时对应的横坐标或纵坐标就是等错误率,这个时候对应的阈值就是最优的。

典型的ROC曲线示意图:

如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线

       网上至今没有计算等错误率和画ROC的Matlab源码,我写了一个,仅供大家参考:

核心代码如下:

[html] view plain copy
 print?
  1. <span style="font-size:18px;">function out = YanEER(leinei, leijian)  
  2.   
  3. NGRA = length(leinei);   %类内测试的次数 对应误据率 FRR  
  4. NIRA = length(leijian);  %类间测试的次数  对应误识率, FAR  
  5.   
  6. FRR = [];  
  7. FAR = [];  
  8. th = 0.1:0.02:0.55;  %阈值,一共xxx个  
  9. for i=1:length(th)  
  10.     frr = sum(leinei>th(i))/NGRA;  %大于预设阈值的 就错误的拒绝了  
  11.     FRR=[FRR frr];  
  12.   
  13.     far = sum(leijian<th(i))/NIRA; %小于阈值的  就错误的接受了  
  14.     FAR = [FAR far];  
  15.   
  16. end</span>  


     这里面的th是用来控制预设定阈值的,可以根据自己的需要设置。一般它跟你输入的参数的最小值和最大值有关系,也可以和这两个最值关联起来。另外,计算frr的时候也可以乘上100,这时坐标系就是(%)。大家灵活修改吧。

源码下载:http://www.pudn.com/downloads542/sourcecode/graph/detail2238646.html

  -----------------------本文系原创,转载请注明作者:yanzi1225627