关于评价指标的理解(TPR,FPR,TAR,FAR,FRR,ERR)

    近期,一直在做人脸识别方面的研究,在阅读paper的时候,发现对一些指标认识不足,因此,从新学习认识算法的评价指标,非常感谢https://blog.csdn.net/liuweiyuxiang/article/details/81259492,学习到了很多。

由于在做人脸之前,做的是工业上的检测,对于工业上检测,常用指标为TPR(True Positive Rate),FPR(False Positive Rate),TPR以及FRP是在做分类、检测常用的指标分析,TPR为真正率,FPR为假正率,他们均是基于混淆矩阵的度量标准。

混淆矩阵

真阳性(True Positive Rate):分类器正确分类且本身为正例,为图上的15

真阴性(True Negative Rate):分类器正确分类且本身为负例,为图上的118

假阳性(False Positive Rate):分类器错误分类本身为负例,为图上的12

假阴性(False Negative Rate):分类器错误分类本身为正例,为图上的47

因此,由上述所知,TPR=TP/(TP+FN),即正确识别的正例数据占据总的正例数据的比例,为召回率;FPR=FP/(FP+TN),即实际值为负例数据,将负例数据预测为正例的百分比;

 

在了解了TPR、FPR以及混淆矩阵后,需要了解ROC曲线,即能直观的描述分类器的优劣,根据TPR以及FPR来绘制ROC曲线,如图所示,横坐标为FPR,纵坐标为TPR:

曲线离(0,1)越近的点分类器的效果越好,同样AUC(area under thecurve)即ROC曲线的下部面积,越大分类器越好。

 

在了解了TPR、FPR、ROC以及AUC的相关信息后,对于人脸识别的TAR、FAR、FRR以及ERR较更容易理解。

TAR(True Accept Rate)表示正确接受比例,FAR(False Accept Rate)表示错误接受比例,所谓的接受比例即在人脸验证过程中,两张图像被认为是同一个人

FAR:即在做人脸验证过程中,通常是将两张人脸映射到高维空间的高维向量,然后计算两个高维向量的相似度以及距离。一般认为两张人脸是同一人,那么相似度较高,不是同一个人相似度较低。通过给定一个阈值T,如果两张的人脸的相似度大于T,则被认为同一人脸,反之则为不同人。无论将T设置为任何值,均会出现FAR一定的错误接受比例,FAR即在比对不同人的图像时,把其中的图像当作为同一人的比例,FAR的比例越小越好。FAR=非同人相似度>T/非同人比较的次数。

TAR:在比对相同人图像的时候,把相同人图像识别正确的比例,即正确接受比例。TAR=同人相似度>T/同人比较的次数,相比于FAR相比,TAR越高意味着模型的鲁棒性越好。

FRR:错误拒绝率,FRR=同人相似度<T/同人相似度,FRR=1-TAR

EER:即等误率,即在某一值时,FRR=FAR

 

在阅读论文中,经常常见的指标为:TAR @ FAR=0.00100,之所以采用这样的指标是由于如上所示,不同的阈值对应着不同的FAR以及TAR。假如增大阈值,那么FAR的比例变小,同样TAR的比例也变小,FRR的比例增大。因此在做报告的时候,需要指定FAR的比例,即在相同错误接受比例下的TAR越大,即识别鲁棒性越强。

 

使用python绘制ROC曲线

常用的绘制ROC曲线是通过使用sklearn.metrics,包括计算召回率,精确率等,在绘制ROC曲线时,先求得评估得指标即调用metrics下的roc_curve,auc再去绘制,代码如下所示,

from sklearn.metrics import roc_curve, auc
###得到roc数据
# 数据准备
>>> import numpy as np
>>> from sklearn import metrics
>>> y = np.array([1, 1, 2, 2])
>>> scores = np.array([0.1, 0.4, 0.35, 0.8])

# roc_curve的输入为
# y: 样本标签
# scores: 模型对样本属于正例的概率输出
# pos_label: 标记为正例的标签,本例中标记为2的即为正例
>>> fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
# 假阳性率
>>> fpr
array([ 0. ,  0.5,  0.5,  1. ])
# 真阳性率
>>> tpr
array([ 0.5,  0.5,  1. ,  1. ])
# 阈值
>>> thresholds
array([ 0.8 ,  0.4 ,  0.35,  0.1 ])

# auc的输入为很简单,就是fpr, tpr值
>>> auc = metrics.auc(fpr, tpr)
>>> auc
0.75


###绘制ROC曲线
import matplotlib.pyplot as plt
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange',
         lw=lw, label='ROC curve (area = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

参考博客:

https://blog.csdn.net/liuweiyuxiang/article/details/81259492

  • 11
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值