使用约登指数寻找最佳ROC曲线阈值
预备知识
对于二元分类结果评价,ROC曲线是常用标准,其使用TPR与FPR绘制而成。(相关知识推荐博文:一文让你彻底理解准确率,精准率,召回率,真正率,假正率,ROC/AUC) 而TPR与FPR的计算是根据选定的一系列阈值(Threshold)得到的,本文的目的便是寻找最优阈值,在假正率FPR与真正率TPR之间做折中。ROC用以判断分类模型好坏,是否足以区分两类对象,而寻找最佳阈值可以使分类效果达到最优,符合实际应用要求。
计算方法
Youden Index
参考链接:全面了解ROC曲线
如图所示,该方法的思想是找到横坐标 1 − S p e c i f i c i t y 1-Specificity1−Specificity 与 纵坐标 S e n s i t i v i t y SensitivitySensitivity 差异最大的点所对应的阈值。在本文中描述为:
i n d e x = a r g m a x ( T P R − F P R ) , index= argmax (TPR-FPR),index=argmax(TPR−FPR),
最终可以得到最优阈值及其ROC曲线坐标:
t h o p t i m a l = t h r e s h o l d s [ i n d e x ] th_{optimal}=thresholds[index]thoptimal=thresholds[index]
p o i n t o p t i m a l = ( F P R [ i n d e x ] , T P R [ i n d e x ] ) point_{optimal}=(FPR[index], TPR[index])pointoptimal=(FPR[index],TPR[index])
很简单吧!
def Find_Optimal_Cutoff(TPR, FPR, threshold):y = TPR - FPRYouden_index = np.argmax(y) # Only the first occurrence is returned.optimal_threshold = threshold[Youden_index]point = [FPR[Youden_index], TPR[Youden_index]]return optimal_threshold, point
ROC的计算及绘制也放一下:
def ROC(label, y_prob):"""Receiver_Operating_Characteristic, ROC:param label: (n, ):param y_prob: (n, ):return: fpr, tpr, roc_auc, optimal_th, optimal_point"""fpr, tpr, thresholds = metrics.roc_curve(label, y_prob)roc_auc = metrics.auc(fpr, tpr)optimal_th, optimal_point = Find_Optimal_Cutoff(TPR=tpr, FPR=fpr, threshold=thresholds)return fpr, tpr, roc_auc, optimal_th, optimal_point
fpr, tpr, roc_auc, optimal_th, optimal_point = ROC(y_labels, y_preds)plt.figure(1)
plt.plot(fpr, tpr, label=f"AUC = {roc_auc:.3f}")
plt.plot([0, 1], [0, 1], linestyle="--")
plt.plot(optimal_point[0], optimal_point[1], marker='o', color='r')
plt.text(optimal_point[0], optimal_point[1], f'Threshold:{optimal_th:.2f}')
plt.title("ROC-AUC")
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.legend()
plt.show()
结果
红色的点即为最佳阈值啦,完结撒花。
参考网址:
- https://blog.csdn.net/weixin_43543177/article/details/107565947
使用约登指数寻找最佳ROC曲线阈值相关推荐
- 【机器学习系列】【模型评价】【ROC曲线、约登指数最佳阈值】一个函数中实现约登指数计算并集成到ROC图中,给出默认阈值及最佳阈值下的混淆矩阵
输入实际标签.预测的概率值.预测标签,计算最佳阈值,输出ROC曲线,输出默认阈值下的混淆矩阵和最佳阈值下的混淆矩阵 目录 使用约登指数计算最佳阈值 result_evaluation()函数实现约登指 ...
- ROC/AUC 简易试验 最佳截断点 混淆矩阵 敏感度 特异度 约登指数 各个指标置信区间
ROC/AUC 简易试验 最佳截断点 敏感度 特异度 约登 召回率 混淆矩阵 学习链接, 鼠标放这里 常规学习下面这个矩阵 金标准 + - 模型 + True Positives(TP) False ...
- python编写自定义函数计算约登值(约登指数、Youden Index)、寻找最佳阈值(threshold、cutoff)、可视化ROC曲线并在曲线中标记最佳阈值及其数值标签
python编写自定义函数计算约登值(约登指数.Youden Index).寻找最佳阈值(threshold.cutoff).可视化ROC曲线并在曲线中标记最佳阈值及其数值标签 目录
- ROC曲线-阈值评价标准
ROC曲线指受试者工作特征曲线 / 接收器操作特性曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性 ...
- python的roc曲线与阈值_浅谈ROC曲线的最佳阈值如何选取
为了获取ROC曲线的最佳阈值,需要使用一个指标--约登指数,也称正确指数. 借助于matlab的roc函数可以得出计算. % 1-specificity = fpr % Sensitivity = t ...
- Sklearn机器学习——ROC曲线、ROC曲线的绘制和AUC面积、运用ROC曲线找到最佳阈值
目录 1 ROC曲线 2 ROC曲线的绘制 2.1 Sklearn中的ROC曲线和AUC面积 2.2 利用ROC曲线找到最佳阈值 1 ROC曲线 上篇博客介绍了ROC曲线的概率和阈值还有SVM实现概率 ...
- ROC 曲线/准确率、覆盖率(召回)、命中率、Specificity(负例的覆盖率)
欢迎关注博主主页,学习python视频资源 sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.ht ...
- SVC模型评估指标与ROC曲线
目录 1.解决二分类SVC中的样本不均衡问题 1.1 概述 1.2 SVC参数class_weight 1.3 参数class_weight的使用 2.SVC模型评估指标 2.1 混淆矩阵(Confu ...
- (8) 支持向量机(下)(模型评估指标、ROC曲线)
文章目录 1 二分类SVC的进阶 1.1 参数C的理解进阶 1.2 二分类SVC中的样本不均衡问题:重要参数class_weight 2 SVC的模型评估指标 2.1 混淆矩阵 2.1.1 模型整体效 ...
最新文章
- Java游戏编程前篇 修改eclipse背景颜色
- 1986年讲MDCT的基础性论文
- SAP ITS mobile 简介
- 轻轻松松明白什么是反射,反射有什么用,简单上手反射以及反射的优缺点
- Redis 入门笔记
- Fanout交换器-编写生产者
- antlr java_使用ANTLR和Java创建外部DSL
- Spring Boot笔记-使用RestTemplate优雅的调用百度ORC接口
- 改变select组件的option选中状态的快捷方法
- python课堂_python课堂整理6---字典
- php如何判断是ajax,php如何判断是ajax
- 通过官网下载KITTI数据集失败解决方法
- java socket保活_gb28181简单实现sip信令服务器(java版基于springboot):四、sip摄像头心跳保活、推流(tcp/udp)和结束推流...
- Linux 安装谷歌浏览器
- 摘要认证 java_摘要认证及实现HTTP digest authentication
- 第1周练习 货币转换 I
- 微信小程序(游戏)----五子棋(AI篇)
- Linux+Apache+MySQL+PHP+FrontPage完全安装手册(转)
- 什么软件可以测试吃鸡帧数,RTX 3080 有多大升级必要?绝地求生帧数实测
- 计算物理作业python代码_使用 Python 解决计算物理问题