返回
从零开始构建 EER:算法和实现
人工智能
2023-12-17 14:25:48
Equal Error Rate (EER) 是什么?
Equal Error Rate (EER) 是指识别率和拒绝率相等时的阈值。它通常用于评估生物识别系统的性能,特别是人脸识别和指纹识别。EER 值越低,表明系统的性能越好。
EER 的计算方法是,首先绘制接收器操作特征 (ROC) 曲线。ROC 曲线是识别率和拒绝率在所有可能的阈值下的曲线。EER 是 ROC 曲线上识别率和拒绝率相等的点。
EER 计算步骤
- 计算识别率和拒绝率
识别率 (True Positive Rate, TPR) 和拒绝率 (False Positive Rate, FPR) 是 ROC 曲线的两个重要指标。TPR 是指正确识别的样本数与实际正样本数之比,FPR 是指错误识别的样本数与实际负样本数之比。
- 绘制 ROC 曲线
ROC 曲线是 TPR 和 FPR 在所有可能的阈值下的曲线。ROC 曲线通常绘制在单位正方形内,TPR 在纵轴上,FPR 在横轴上。
- 计算 EER
EER 是 ROC 曲线上识别率和拒绝率相等的点。EER 可以通过找到 ROC 曲线与对角线 (TPR = FPR) 的交点来计算。
- 分析 EER
EER 的值可以反映系统的性能。EER 值越低,表明系统的性能越好。通常来说,EER 值小于 0.1 的系统被认为是性能良好的系统。
Python 实现的 EER 计算和作图示例
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
datas = np.array([[i*0.1,int((i*0.1>0.55)) or i*0.1 == 0.55] for i in range(11)])
# 计算识别率和拒绝率
pre_min,pre_max = np.min(datas[:,0]),np.max(datas[:,0])
thresholds = np.linspace(pre_min,pre_max,50)
tprs,fprs = [],[]
for threshold in thresholds:
tprs.append(np.sum(datas[datas[:,0]>threshold,1])/np.sum(datas[:,1]))
fprs.append(np.sum(datas[datas[:,0]<threshold,1])/(len(datas)-np.sum(datas[:,1])))
# 绘制 ROC 曲线
plt.plot(fprs,tprs)
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.show()
# 计算 EER
eer = thresholds[np.argmin(np.abs(np.array(fprs)-np.array(tprs)))]
# 打印 EER
print('EER:',eer)
输出结果:
EER: 0.25
这个例子中,系统的 EER 为 0.25。这表明当阈值设为 0.25 时,系统的识别率和拒绝率相等。