生物识别中评价标准:FAR、FRR、EER、FMR、FNMR、FNIR、FPIR、DET、ROC曲线的理解和实际应用(python实现)

做了一些补充,把各个标准的理解整理了一下,也把代码部分补充了。
Will Yip
2020.7.26


生物识别中评价标准

1. 对于FAR、FRR、EER、FMR、FNMR、FNIR、FPIR、DET曲线的理解
  • FAR(False Acceptance Rate):误识率
    注意,这里指的是类间的匹配结果,本该匹配错误但识别为正确的比例,计算公式如下:
    F A R = N F A N I R A × 100 % FAR=\frac{NFA}{NIRA}\times 100\% FAR=NIRANFA×100%
    式中,NIRA类间匹配的总次数,NFA指错误接受的次数
  • FRR(False Rejection Rate):拒识率
    这里 指的是类内的匹配结果,本该匹配正确但识别为错误的比例,计算公式如下:
    F R R = N F R N G R A × 100 % FRR=\frac{NFR}{NGRA}\times 100\% FRR=NGRANFR×100%
    式中,NGRA类内匹配的总次数,NFR指错误拒绝的次数
  • FMR(False Match Rate):错误匹配率
    其实很好理解,FMR就是识别错了(这个是前提),但是系统判定为正确的比例
    这个评价标准在国标里面,如果没有特别指明,默认跟FMR=FAR,这一点很关键。
  • FNMR(False Non-Match Rate):错误不匹配率
    FNMR是识别对了(这个是前提),但是系统判定为错误的比例。
    这个评价标准在国标里面,如果没有特别指明,默认跟FNMR=FRR,这一点很关键。
  • EER(Equal Error Rate):等错误率
    指的是FAR(FMR)和FRR(FNMR)两条曲线的交点,对应的那个阈值(threshold),取值范围0-1,但实际上很少会出现FAR(FMR)和FRR(FNMR)完全相等的情况,一般会在一个很小的误差范围内认为在这个阈值上FAR(FMR)和FRR(FNMR)相等。具体可以看稍后代码中的情况。
    在这里插入图片描述

具体可以参考部分中的英文ppt,更加具体,后面的两个标准FNIRFPIR大同小异,跟FARFRR差不多,下次用到再补充。

  • DET(Detection Error Tradeoff)曲线
    显示的是拒识率(FRR)误识率(FAR)随着阈值(threshold)变化时两者所产生的变化。 横轴为误识率(FAR),纵轴为拒识率(FRR),图像的弧线越靠近左下角说明分类的性能越好。
  • ROC(receiver operating characteristic curve)曲线
    这个曲线就很有历史了,二战就开始用了,用来分析雷达信号接收机(receiver)的信号检测性能。
    把DET 曲线上下翻转即可得到ROC曲线,因此横轴和纵轴刚好跟DET曲线相反。
    图像的弧线越靠近左上角说明分类的性能越好。
2. 实际应用(python实现)
  • FAR & FRR & DET & ROC 曲线 和计算 ERR
    数据保存的形式如下:
class_in [0.6835004, 0.901112, 0.7841303, ...]
class_each [0.2197524, 0.113668742, 0.4682101, ...]

第一行代表表示类内的匹配结果,第二行表示类间的匹配结果。
每个数字代表的是匹配的confidence,如果要调用的话,还是根据自己数据的保存形式来做读取部分的工作,下面的代码是根据上述的数据保存形式写的,请知悉。
代码如下:

# -*-coding:utf-8-*-
import numpy as np
import matplotlib.pyplot as plt


############################ 根据实际情况修改 ####################################
###############################################################################
f=open('/home/will/In_N_each_log20200723.txt','r')
s = f.read()
s1 = s.split('\n')
s1.pop(2)
class_in = s1[0].split('class_in ')
class_in.pop(0)
class_in = class_in[0][1:-1].split(', ') #去掉一头一尾的中括号,然后分割
class_in = [float(i) for i in class_in]

class_each = s1[1].split('class_each ')
class_each.pop(0)
class_each = list(class_each[0][1:-1].split(', '))
class_each = [float(i) for i in class_each]

###############################################################################
FRR = [] #FNMR
FAR = [] #FMR
thresld = np.arange(0.1, 0.9, 0.01)  # 生成模型阈值的等差列表
eer = 1
for i in range(len(thresld)):
    frr = np.sum(class_in < thresld[i]) / len(class_in)
    FRR.append(frr)

    far = np.sum(class_each > thresld[i]) / len(class_each)
    FAR.append(far)

    if (abs(frr - far) < 0.02):  # frr和far值相差很小时认为相等
        eer = abs(frr + far) / 2
# DET曲线
plt.plot(FAR, FRR, 'b-', linewidth=3, label='Global')

# ROC曲线
plt.plot(FRR,FAR, 'b-', linewidth=3, label='Global')

# FRR和FAR随阈值的变化曲线
#plt.plot(thresld, FRR, 'r-', label='FRR')
#plt.plot(thresld, FAR, 'b-', label='FAR')

plt.grid(True)
plt.legend(loc=1, fontsize = '10')
plt.ylabel('False Rejection (in %)', fontsize = 10) # 横坐标轴的标题
plt.xlabel('False Acceptance (in %)', fontsize = 10) # 纵坐标轴的标题
plt.xticks(fontsize=10)
plt.yticks(fontsize=10)
plt.show()
print('EER: ', eer)

效果图:
稍后补充,结果还在跑

  • FMR & FNMR 曲线
    如果没有特别指明FMR和FNMR,则:
    • FMR = FAR
    • FNMR = FRR
参考:

http://www.doc88.com/p-906281893467.html
https://blog.csdn.net/colourful_sky/article/details/72830640
https://blog.csdn.net/huashui2009120/article/details/78483051
https://blog.csdn.net/u011501388/article/details/78334996
https://zhuanlan.zhihu.com/p/99085220

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
fNIR脑成像系统介绍: fNIR近红外光学脑成像系统通过测量人体的前额脑皮层氧水平变化从而评估人的大脑活动情况。fNIR是一个独立功能的脑成像系统,包括一个控制单元和连续的近红外光谱传感器(NIRS技术)。系统通过4个光源和10个探测器,提供16个信息通道。fNIR系统软件显示实时数据,同时保存数据用于分析。 fNIR是近红外光学成像技术,它测量前额叶皮层的神经活动和血流动力学反应。被试者前额佩戴一个安装了传感器的绑带,包括四个红外光源和10个探测器。FNIR传感器检测前额 叶皮层的氧含量,实时提供氧血红蛋白(oxy- hemoglobin)和脱氧血红蛋白(deoxygenated hemoglobin)的数值。在被试者执行不同的任务时,系统提供了连续和实时的氧变化显示。 fNIR给用户提供了一种认知功能评估。它消除了很多功能磁共振成像的缺点。被试者可以坐在电脑前面进行测试或者执行移动的任务。它可以整合SUPERLAB刺激呈现系统和BIOPAC虚拟现实产品。 fNIR数据可以结合其他的生理信号,例如心电、呼吸、血压、皮肤电活动等。 fNIR提供了血红蛋白水平的相对变化,16通道传感器:4个光源,10个探测器,2个波长 。 具体测试参加如下: fNIR系统有3个配置:FNIR100,FNIR200,FNIR300 fNIR100适用于以下应用: 人力绩效评估 麻醉深度监测 脑机接口 虚拟现实 神经康复学 自闭症 可靠性评价(测谎)fNIR提供了血红蛋白水平的相对变化,计算采用了modified Beer-Lambert law定律 合氧血红蛋白变化: delta O2Hb (mol/L) 脱氧血红蛋白变化: delta HHb (mol/L) 总血红蛋白变化: delta cHb (mol/L) 16通道传感器:4个光源,10个探测器,2个波长 COBI Studio数据采集软件:可配置通道数量 fNIR可用在麻醉深度监测,脑机接口,虚拟现实,可靠性评价(测谎)等领域。 材料清单: 1 × Atmega16U2 10 × Photodiode 4 × 730nm LED 4 × 850nm LED 1 × LTC2494 附件内容包括: 基于该设计主板原理图和PCB源文件,用Eagle软件打开(或者查看转换好的PDF档格式); 固件源码,包括配置代码; 相关的设计资料;
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值