活体检测 根据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:真正类率,即所有正样本中被分类器预测为正样本的个数。

TPR=\frac{TP}{TP+FN}

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

FPR=\frac{FP}{FP+TN}

在最理想情况下,我们都希望模型能够将所有的正类均正确分类,即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值最大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值