栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

活体检测 根据TPR、FPR绘制图像计算最优模型阈值

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

活体检测 根据TPR、FPR绘制图像计算最优模型阈值

在活体检测中经常使用roc_curve来绘制ROC曲线,通过返回的TPR、FPR和对应的阈值来计算最优阈值

sklearn.metrics.roc_curve的返回值为三个list,分别为TPR、FPR和对应的阈值,即:

sklearn.metrics.roc_curve根据样本原本的标注和模式预测的成绩,使用不同的阈值去计算TPR和FPR,每一个阈值对应一个TPR和FPR,他们被存储在函数返回列表的对应位置:

fpr, tpr, threshold = roc_curve(target_labels, scorce, pos_label=1)

from sklearn.metrics import roc_curve


def get_err_threhold(fpr, tpr, threshold):
    differ_tpr_fpr_1=tpr+fpr-1.0
    right_index = np.argmin(np.abs(differ_tpr_fpr_1))
    best_th = threshold[right_index]
    err = fpr[right_index]    
    return err, best_th, right_index

target_labels = []  # 分类样本的真实标签
scorce = []  # 分类模型预测出的样本成绩

#  pos_lable=1 表示正样本是用1标注的
fpr, tpr, threshold = roc_curve(target_labels, scorce, pos_label=1) 

# best_threshold就是最好的阈值,err为错误率,index为最优阈值的坐标
err, best_threshold, index = get_err_threhold(fpr, tpr, threshold)

TPR:真正类率,即所有正样本中被分类器预测为正样本的个数。

FPR:假正类率,即所有负样本中被分类器预测为正样本的个数。

在最理想情况下,我们都希望模型能够将所有的正类均正确分类,即TPR=1。所有的负类也正确分类对应FPR=0。

因此,理想情况下ROC曲线越靠拢图像中(0,1)点,表示模型在此阈值对应的模型效果最好。

 如何根据返回的fpr, tpr, threshold = roc_curve(target_labels, scorce, pos_label=1)找到最佳阈值?

首先计算:differ_tpr_fpr_1= tpr + fpr -1.0

在最理想的点(1,0)结果为0,其他情况下differ_tpr_fpr_1的值在-1~1之间,我们可以对differ_tpr_fpr求绝对值,来表示该点与理想点的距离,从而距离越小,此点越优

right_index = np.argmin(np.abs(differ_tpr_fpr_1))

right_index为最优点的下表

因此我们可以得到最优阈值,使得AUC值最大

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878764.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号