实现功能:

根据患者的诊断结果以及某一个诊断指标数值,绘制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曲线寻找指标最佳诊断临界值相关推荐

  1. stata绘制roc曲线_两种诊断方法的ROC曲线比较,手把手教Medcalc软件操作

    上一次我们讲了用Medcalc软件绘制单个ROC曲线和找截断值,小咖给有需要的小伙伴发过去了Medcalc软件安装包,不知道你有没有感受到这个软件的便利性呢. 今天我们来看一下如何用Medcalc软件 ...

  2. R语言使用pROC包绘制ROC曲线、获取最优阈值(threshold)及最优阈值对应的置信区间

    R语言使用pROC包绘制ROC曲线并获取最佳阈值(threshold)及最佳阈值对应的置信区间 #ROC曲线 ROC(receiver operating characteristic curve)接 ...

  3. python:Sklearn SVM使用留一法时如何绘制ROC曲线与计算AUC

    在前面的一篇文章我们给出了使用Sklearn 中的SVM进行分类时如何使用留一法来进行分类. python基于sklearn的SVM和留一法(LOOCV)进行二分类 如何在使用留一法时绘制ROC曲线和 ...

  4. 基于python绘制ROC曲线

    基于python绘制ROC曲线,直接附代码: from sklearn.metrics import roc_curve, auc from sklearn.model_selection impor ...

  5. 通过交叉验证(Cross Validation)KFold绘制ROC曲线并选出最优模型进行模型评估、测试、包含分类指标、校准曲线、混淆矩阵等

    通过交叉验证(Cross Validation,CV)KFold绘制ROC曲线并选出最优模型进行模型评估.测试.包含分类指标.校准曲线.混淆矩阵等 Cross Validation cross val ...

  6. Python下使用sklearn绘制ROC曲线(超详细)

    什么是ROC曲线?可以参见(https://blog.csdn.net/hesongzefairy/article/details/104295431) 现在我们知道ROC曲线上的一组组(FPR,TP ...

  7. python画出roc曲线 auc计算逻辑_ROC及AUC计算方法及原理

    1.非均衡分类问题 在大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价是不能相提并论的.例如在垃圾邮件过滤中,我们希望重要的邮件永远不要被误判为垃圾邮件,还有在癌症检测中,宁愿误 ...

  8. 构造matlab决策树分类器,Matlab建立逻辑回归,决策树,SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线...

    ​ 尽管对于较高的阈值,SVM可以产生更好的ROC值,但逻辑回归通常更擅长区分不良雷达收益与良好雷达.朴素贝叶斯的ROC曲线通常低于其他两个ROC曲线,这表明样本内性能比其他两个分类器方法差. 比较所 ...

  9. matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

    原文链接:http://tecdat.cn/?p=15508 绘制ROC曲线通过Logistic回归进行分类 加载样本数据.load fisheriris通过使用与versicolor和virgini ...

最新文章

  1. Jvm常见面试题及答案汇总1000道(春招+秋招+社招)
  2. flex4.6 图表 在module中 x轴旋转正确的做法
  3. 软考-信息系统项目管理师-信息文档管理与配置管理
  4. SpringBoot 应用程序启动过程探秘
  5. python3.7.4安装(Windows10)
  6. mysql load data into_MySQL 之 LOAD DATA INFILE 快速导入数据
  7. java树形菜单_Java构建树形菜单
  8. 从Speedment 3.0.17或更高版本的事务轻松返回值
  9. java bean 验证_Java Bean验证基础
  10. 更改oracle背景,Oracle 11gR2修改用户后导致系统HANG住
  11. 利用VisualVm和JMX远程监控K8S里的Java进程
  12. 云计算的云数据安全与加密技术
  13. java除了框架还需要什么_除了框架,前端面试还问什么
  14. 信捷plc用c语言编程软件,XDPPro(信捷PLC编程软件) V3.1.0c 官方版
  15. Android系统模块编译Makefile编写规则
  16. 理解和应用共线平面束
  17. 房贷计算器移动端接口
  18. 业务流程再造和IT服务能力
  19. 嵌入式开发<串口调试工具>
  20. photoshop 裁剪_30种无需Photoshop即可在线裁剪和调整图像大小的工具

热门文章

  1. 改进型脉振高频注入源码 stm32工程 脉振高频注入是一种通过在d轴注入正弦电压
  2. 唯一ID生成算法剖析,看看这篇就够了
  3. 解决多元线性回归的多重共线性问题
  4. svn造成桌面图标显示问号的处理办法
  5. java 银联支付_java服务器端移动银联支付的流程
  6. 如何设置qq说说展示时间_qq说说点赞特效怎么设置
  7. 微信推文转发服务器,微信文章如何转载?(看好这4个方法,可转发任何内容)...
  8. Discuz被挂马的处理经验,Dz为什么会被挂马
  9. 好玩的微信互动小游戏有哪些?微信小程序游戏倾情推荐?
  10. unity转微信小程序小游戏