python实现绘制ROC曲线寻找指标最佳诊断临界值
实现功能:
根据患者的诊断结果以及某一个诊断指标数值,绘制ROC曲线,寻找出这个指标的最佳诊断临界值,并在曲线中标记出此时的坐标。
实现代码:
import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import roc_curve, auc import xlrd import seaborn as snsdef Find_Optimal_Cutoff(TPR, FPR, threshold):y = TPR - FPRYouden_index = np.argmax(y)optimal_threshold = threshold[Youden_index]print(optimal_threshold)point = [FPR[Youden_index], TPR[Youden_index]]return optimal_threshold, pointdef acu_curve(index_name,y,prob):font = {'family': 'Times New Roman','size': 12,}sns.set(font_scale=1.2)plt.rc('font', family='Times New Roman')fpr, tpr, thresholds = roc_curve(y,prob)roc_auc = auc(fpr,tpr) ###计算auc的值lw = 2plt.plot(fpr, tpr, color='darkorange',lw=lw, label='ROC curve (area = %0.3f)' % roc_auc)plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')optimal_th, optimal_point = Find_Optimal_Cutoff(TPR=tpr, FPR=fpr, threshold=thresholds)print(optimal_point)plt.plot(optimal_point[0], optimal_point[1], marker='o', color='r')plt.text(optimal_point[0], optimal_point[1], (float('%.2f'% optimal_point[0]),float('%.2f'% optimal_point[1])),ha='right', va='top', fontsize=12)plt.text(optimal_point[0], optimal_point[1], f'Threshold:{optimal_th:.2f}', fontsize=12)plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.0])plt.xlabel('False Positive Rate',fontsize = 14)plt.ylabel('True Positive Rate',fontsize = 14)plt.title('ROC analysis of '+ index_name,fontsize = 14)plt.legend(loc="lower right",fontsize = 12)plt.show()def extract(inpath,sheet_index,label_index,col_index):data = xlrd.open_workbook(inpath, encoding_override='utf-8')table = data.sheets()[sheet_index] # 选定表nrows = table.nrows # 获取行号ncols = table.ncols # 获取列号label = []prb = []for i in range(1, nrows): # 第0行为表头alldata = table.row_values(i) # 循环输出excel表中每一行,即所有数据label_value=alldata[label_index]label.append(label_value)result = alldata[col_index] # 取出表中第二列数据prb.append(result)return label,prbif __name__=="__main__":inpath = 'F:\医学大数据课题\RA预测\RA预测\指标分析.xls'(label,prb) = extract(inpath,0,0,1)print(label)print(prb)acu_curve(index_name='CCP',y=label,prob=prb)(label,prb) = extract(inpath,1,0,1)print(label)print(prb)acu_curve(index_name='MCV',y=label,prob=prb)(label,prb) =extract(inpath,2,0,1)print(label)print(prb)acu_curve(index_name='RF',y=label,prob=prb)(label,prb) =extract(inpath,3,0,1)print(label)print(prb)acu_curve(index_name='CRP',y=label,prob=prb)
实现效果:
CCP指标:
MCV指标:
RF指标:
CRP指标:
控制台输出:
喜欢记得点赞,在看,收藏,
关注V订阅号:数据杂坛,获取完整代码和效果,将持续更新!
python实现绘制ROC曲线寻找指标最佳诊断临界值相关推荐
- stata绘制roc曲线_两种诊断方法的ROC曲线比较,手把手教Medcalc软件操作
上一次我们讲了用Medcalc软件绘制单个ROC曲线和找截断值,小咖给有需要的小伙伴发过去了Medcalc软件安装包,不知道你有没有感受到这个软件的便利性呢. 今天我们来看一下如何用Medcalc软件 ...
- R语言使用pROC包绘制ROC曲线、获取最优阈值(threshold)及最优阈值对应的置信区间
R语言使用pROC包绘制ROC曲线并获取最佳阈值(threshold)及最佳阈值对应的置信区间 #ROC曲线 ROC(receiver operating characteristic curve)接 ...
- python:Sklearn SVM使用留一法时如何绘制ROC曲线与计算AUC
在前面的一篇文章我们给出了使用Sklearn 中的SVM进行分类时如何使用留一法来进行分类. python基于sklearn的SVM和留一法(LOOCV)进行二分类 如何在使用留一法时绘制ROC曲线和 ...
- 基于python绘制ROC曲线
基于python绘制ROC曲线,直接附代码: from sklearn.metrics import roc_curve, auc from sklearn.model_selection impor ...
- 通过交叉验证(Cross Validation)KFold绘制ROC曲线并选出最优模型进行模型评估、测试、包含分类指标、校准曲线、混淆矩阵等
通过交叉验证(Cross Validation,CV)KFold绘制ROC曲线并选出最优模型进行模型评估.测试.包含分类指标.校准曲线.混淆矩阵等 Cross Validation cross val ...
- Python下使用sklearn绘制ROC曲线(超详细)
什么是ROC曲线?可以参见(https://blog.csdn.net/hesongzefairy/article/details/104295431) 现在我们知道ROC曲线上的一组组(FPR,TP ...
- python画出roc曲线 auc计算逻辑_ROC及AUC计算方法及原理
1.非均衡分类问题 在大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价是不能相提并论的.例如在垃圾邮件过滤中,我们希望重要的邮件永远不要被误判为垃圾邮件,还有在癌症检测中,宁愿误 ...
- 构造matlab决策树分类器,Matlab建立逻辑回归,决策树,SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线...
尽管对于较高的阈值,SVM可以产生更好的ROC值,但逻辑回归通常更擅长区分不良雷达收益与良好雷达.朴素贝叶斯的ROC曲线通常低于其他两个ROC曲线,这表明样本内性能比其他两个分类器方法差. 比较所 ...
- matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线
原文链接:http://tecdat.cn/?p=15508 绘制ROC曲线通过Logistic回归进行分类 加载样本数据.load fisheriris通过使用与versicolor和virgini ...
最新文章
- Jvm常见面试题及答案汇总1000道(春招+秋招+社招)
- flex4.6 图表 在module中 x轴旋转正确的做法
- 软考-信息系统项目管理师-信息文档管理与配置管理
- SpringBoot 应用程序启动过程探秘
- python3.7.4安装(Windows10)
- mysql load data into_MySQL 之 LOAD DATA INFILE 快速导入数据
- java树形菜单_Java构建树形菜单
- 从Speedment 3.0.17或更高版本的事务轻松返回值
- java bean 验证_Java Bean验证基础
- 更改oracle背景,Oracle 11gR2修改用户后导致系统HANG住
- 利用VisualVm和JMX远程监控K8S里的Java进程
- 云计算的云数据安全与加密技术
- java除了框架还需要什么_除了框架,前端面试还问什么
- 信捷plc用c语言编程软件,XDPPro(信捷PLC编程软件) V3.1.0c 官方版
- Android系统模块编译Makefile编写规则
- 理解和应用共线平面束
- 房贷计算器移动端接口
- 业务流程再造和IT服务能力
- 嵌入式开发<串口调试工具>
- photoshop 裁剪_30种无需Photoshop即可在线裁剪和调整图像大小的工具