日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

错误接受率 (FAR), 错误拒绝率(FRR), 等错误率(EER)代码简易实现

發布時間:2024/1/18 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 错误接受率 (FAR), 错误拒绝率(FRR), 等错误率(EER)代码简易实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、FAR FRR

計算方式一:

1、錯誤接受率 (FAR-False Acceptance Rate)
? ? ? FAR = nontarget_is_target / ( target_is_target + nontarget_is_target )
2、錯誤拒絕率 (FRR-False Rejection Rate)
? ? ? FRR = target_is_nontarget / ( target_is_nontarget + nontarget_is_nontarget )

計算方式二:?

1、錯誤接受率 (FAR)
? ? ? FAR = NFA / NIRA? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? NFA:錯誤接受次數。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NIRA:類間測試次數,既不同類別間的測試次數。? ? ? ? 假定已有1000個模型,有1000人需識別,且每人只有一個識別素材,則?NIRA=1000*(1000-1) 。
2、錯誤拒絕率 (FRR)
? ? ? FRR = NFR / NGRA? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NFR:錯誤拒絕次數。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NGRA:類內測試次數,既同類別內的測試次數。? ? ? ?假定已有1000個模型,有1000人需識別,且每人只有一個識別素材,則NGRA=1000,如果每人有N個素材,則NGRA=N*1000 。

二、等錯誤率 (EER-Equal Error Rate)?

EER為錯誤接受率、錯誤拒絕率相等時的值。
取一組0到1之間的等差數列,分別作為識別模型的閾值,即坐標x軸,畫出FFR和FAR的坐標圖,交點為EER值。

三、簡易程序實現

假定可以得到用戶與不同模型間的相似度,每個用戶訓練一個模型,提供兩個素材用于驗證,如下圖:

??按計算方式1代碼:

import numpy as np import matplotlib.pyplot as plt import pandas as pd import sysdata = pd.read_csv('score.csv',header=None) # 隨機數據寫入csv文件 user_id_length = len(data.values[0, 1:]) # 用戶模型數 test_id_length = len(data.values[1:, 0]) # 待識別素材數 print(data.values)#錯誤接受率,錯誤接受的除以所有接受的 def get_far(nontarget_is_target,target_is_target):far = nontarget_is_target/(nontarget_is_target+target_is_target)return(far)#錯誤拒絕率,錯誤拒絕的除以所有拒絕的 def get_frr(target_is_nontarget,nontarget_is_nontarget):frr = target_is_nontarget/(target_is_nontarget+nontarget_is_nontarget)return(frr)thresholds= np.arange(0.1, 0.9, 0.01) print('thresholds:',thresholds)scores = [] EER = 0 for t in thresholds:t_t = 0t_nt = 0nt_t = 0nt_nt = 0lt_pt = lf_pt = lt_pf = lt_pt = 0for i in range(test_id_length):for j in range(user_id_length):#if data.values[i + 1][0].split('_')[1] == data.values[0][j + 1].split('_')[-1]:#print(data.values[i + 1][0], data.values[0][j + 1],data.values[i+1][j+1])pre = float(data.values[i+1][j+1])test_id = data.values[i+1][0].split('_')[1]user_id = data.values[0][j+1].split('_')[-1]print(test_id,user_id,pre)if test_id == user_id:if pre > t:t_t +=1 else:t_nt +=1else:if pre > t:nt_t +=1else:nt_nt +=1print(t_t,t_nt,nt_t,nt_nt)##### 效果一 far = get_far(nt_t,t_t)frr = get_frr(t_nt,nt_nt)##### 效果二# far = get_far(nt_t, nt_nt)# frr = get_frr(t_nt, t_t)scores.append([t,far,frr,abs(far-frr)])if abs(far-frr) < 0.02:EER = abs(far+frr)/2 scores = np.array(scores) print(scores,'\n----------------') print('EER is: ', EER)plt.plot(scores[:,0],scores[:,1],label='FAR') plt.plot(scores[:,0],scores[:,2],label='FRR') # plt.plot(scores[:,0],scores[:,3]) plt.grid(True) plt.legend(bbox_to_anchor=(1.0, 1), loc=1, borderaxespad=0.) plt.show()

?運行效果一:????

運行效果二:

按計算方式2代碼:

import pandas as pd import numpy as np import matplotlib.pyplot as plt import sys from scipy.interpolate import make_interp_splineclass_in = [] # 類內相似度列表 class_each = [] # 類間相似度列表data = pd.read_csv('score.csv',header=None) # 隨機數據寫入csv文件 user_id_length = len(data.values[0, 1:]) # 用戶模型數量 test_id_length = len(data.values[1:, 0]) # 待識別素材數量for i in range(test_id_length):for j in range(user_id_length):# print(data.values[i + 1][0], data.values[0][j + 1],data.values[i+1][j+1])# 類內測試if data.values[i + 1][0].split('_')[1] == data.values[0][j + 1].split('_')[-1]:class_in.append(float(data.values[i + 1][j + 1]))# 類間測試else:class_each.append(float(data.values[i + 1][j + 1])) print(class_in) print(class_each)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##### 平滑曲線圖 # x_smooth = np.linspace(thresld.min(),thresld.max(),1000) # FRR_smooth = make_interp_spline(thresld,FRR)(x_smooth) # FAR_smooth = make_interp_spline(thresld,FAR)(x_smooth) # plt.plot(x_smooth, FRR_smooth, '-', label='FRR') # plt.plot(x_smooth, FAR_smooth, '-.', label='FAR') print('EER is: ', eer) plt.plot(thresld, FRR, '-', label='FRR') plt.plot(thresld, FAR, '-.', label='FAR') plt.grid(True) #指定圖例在軸的位置 圖例所有figure位置 軸與圖例邊框之間的距離 plt.legend(bbox_to_anchor=(1.0, 1), loc=1, borderaxespad=0.) plt.show()

運行效果:?

五、迷思

按計算方式一中公式計算所得eer顯然有誤,改變計算方式一中far、frr計算方式(效果二)所得結果看起來正常,為何如此還在思索中。。。。。。。。。。。。。。


————————————————
參考文章(感謝以下文章作者之分享):

https://blog.csdn.net/huashui2009120/article/details/78483051

https://cloud.tencent.com/developer/article/1451457

總結

以上是生活随笔為你收集整理的错误接受率 (FAR), 错误拒绝率(FRR), 等错误率(EER)代码简易实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。