错误接受率 (FAR), 错误拒绝率(FRR), 等错误率(EER)

不管是声纹识别和图像识别,以及指纹识别,在评价模型时总要用到这三个指标。下边说下这三个指标的含义。
1、错误接受率 (FAR-False Acceptance Rate)
FAR = nontarget_is_target / ( target_is_target + nontarget_is_target )
另一种比较容易理解的表示方式:
FAR = NFA / NIRA
式中 NIRA 代表的是类间测试次数,既不同类别间的测试次数,打比方如果有1000个识别 模型,有1000个人要识别,而且每人只提供一个待识别的素材,那 NIRA=1000*(1000-1) 。NFA是错误接受次数。
2、错误拒绝率 (FRR-False Rejection Rate)
FRR = target_is_nontarget / ( target_is_nontarget + nontarget_is_nontarget )
比较容易理解的表示方式:
FRR = NFR / NGRA
上式中NGRA是类内测试次数,既同类别内的测试次数,打比方如果有1000个识别模型, 有1000个人要识别, 而且每人只提供一个待识别的素 材,那 NGRA=1000,如果每个人提供N张图片,那么 NGRA=N*1000 。NFR是错误拒绝次数。
3、等错误率 (EER-Equal Error Rate)
取一组0到1之间的等差数列,分别作为识别模型的判别界限,既坐标x轴,画出FFR和FAR的坐标图,交点就是EER值。
4、简单的程序实现
假如我们可以得到用户与不同模型之间的相似度,每个用户训练一个模型,提供两个素材 用于识别验证,如下图:
相似度

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

class_in=[] #定义类内相似度列表
class_each=[] #定义类间相似度列表

data = pd.read_csv('filepath.csv') #这里以结果在csv文件为例
user_id_length = len(data.values[0,1:]) #要识别的数量
model_id_length = len(data.values[1:,0])#计算出模型ID数量

for i in range(user_id_length):
    for j in range(model_id_length):
        #需要识别的用户id和模型id一样,就认为是类内测试,否则是类间测试
        if data.values[i+1][0]==data.values[0][j+1]:
            class_in.append(np.float(data.values[i+1][j+1]))
        else:
            class_each.append(np.float(data.values[i+1][j+1]))
FRR = []
FAR = []
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
        
plt.plot(thresld,FRR,'x-',label='FRR')
plt.plot(thresld,FAR,'+-',label='FAR')
plt.grid(True)
plt.legend(bbox_to_anchor=(1.0,1),loc=1,borderaxespad=0.)
plt.show()
print ('EER is: ',eer)

这里我随机生成了一些数据,跑出的效果图如下:

这里写图片描述

因为是随机生成的数据,所以EER的值在0.5左右。

  • 8
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
EER是Equal Error Rate(相等错误率)的缩写,是指在二分类问题中,当误识和漏识相等时所对应的错误率。 在MATLAB中,可以通过以下步骤计算生物识别系统的EER: 1.首先,获取测试数据的得分和标签。得分是一个向量,其中元素表示每个测试样本的得分;标签是一个向量,其中元素表示每个测试样本的标签,1表示正样本,0表示负样本。 2.使用`sort`函数将得分向量按从小到大的顺序排序,并将排序后的标签向量相应地排序。 3.计算误识和漏识。误识是指将负样本误判为正样本的比,漏识是指将正样本误判为负样本的比。可以通过以下公式计算: ```matlab FPR = cumsum(sorted_labels == 0) / sum(sorted_labels == 0); TPR = cumsum(sorted_labels == 1) / sum(sorted_labels == 1); ``` 其中,`cumsum`函数返回一个向量,其中元素是输入向量的累积和。`sorted_labels == 0`返回一个逻辑向量,其中元素为1表示对应的元素等于0,为0表示对应的元素不等于0。同理,`sorted_labels == 1`返回一个逻辑向量,其中元素为1表示对应的元素等于1,为0表示对应的元素不等于1。 4.计算EEREER是误识和漏识相等时的错误率,可以通过以下公式计算: ```matlab diff = TPR - FPR; [min_diff, min_index] = min(abs(diff)); EER = (FPR(min_index) + TPR(min_index)) / 2; ``` 其中,`diff`是TPR和FPR之差的向量,`min_diff`是`diff`中的最小值,`min_index`是`diff`中最小值的索引,即TPR和FPR之差最小的点的索引。EER是误识和漏识相等时的错误率,等于TPR和FPR之差最小的点的FPR和TPR的平均值。 以上是计算生物识别系统的EER的步骤。计算错误接受错误拒绝的方法也类似,只需要将标签向量中的1和0互换即可。具体代码实现可以参考以下示例: ```matlab % 获取测试数据的得分和标签 scores = randn(1000, 1); labels = randi([0 1], 1000, 1); % 将得分向量按从小到大的顺序排序,并将排序后的标签向量相应地排序 [sorted_scores, sort_index] = sort(scores); sorted_labels = labels(sort_index); % 计算误识和漏识 FPR = cumsum(sorted_labels == 0) / sum(sorted_labels == 0); TPR = cumsum(sorted_labels == 1) / sum(sorted_labels == 1); % 计算EER diff = TPR - FPR; [min_diff, min_index] = min(abs(diff)); EER = (FPR(min_index) + TPR(min_index)) / 2; % 计算错误接受错误拒绝 FAR = 1 - FPR; % 错误接受等于1减误识 FRR = 1 - TPR; % 错误拒绝等于1减漏识 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值