最近在画交叉验证的ROC曲线。由于我采用的是留一法来做10折交叉,这就导致我每一折的样本数量是不固定的,但我又想画一个平均的校验验证性能曲线,并且把置信区间也画出来,找了很久资料,我画了一个这样的。先看效果图,如下图:
中间蓝色的是平均的ROC,周围蓝色的带是所有的交叉验证触及的最大范围。因为交叉验证需要多次抽样,但我用的是深度学习,很难做到抽样,所以就用最大范围代替置信区间。具体做法如下:

from my_utils.utils import *
from sklearn.metrics import auc, plot_roc_curve, roc_curve
import my_utils.file_util as fu
import matplotlib.pyplot as plt
class_type = '1p19q'
#图表的保存路径
save_path = ''
#存放所有交叉验证的预测结果和label的文件路径
record_dir  = ''
#find_file是我自己写的寻找路径下所有best-auc.csv文件的函数,用的时候可以替换成自己的
#返回的是所有csv文件的绝对路径。文件格式是第一和第二列是预测值,第三列label。
#因为我用的是one hot做二分类,所以有两个值
flods_dir = find_file(record_dir, 2,1, suffix='best_auc.csv')
pre_record = []
#获取所有交叉验证的预测值和label
for record_file in flods_dir:temp = fu.csv_reader(record_file)temp_fold_record = []#因为是二分类,所有只取第一个预测值,第二个不要temp_fold_record.append([i[0] for i in temp])#取label值temp_fold_record.append([i[2] for i in temp])pre_record.append(temp_fold_record)roc_record, value, fpr, tpr = [], [], [], []for record in pre_record:label = np.array([int(i) for i in record[1]]).squeeze()pred = np.array([float(i) for i in record[0]]).squeeze()#计算roc曲线t_fpr, t_tpr, thre = roc_curve(label, 1-pred)#计算AUCauc_score = auc(t_fpr, t_tpr)fpr.append([float(i) for i in t_fpr])value.extend([float(i) for i in t_fpr])tpr.append([float(i) for i in t_tpr])mean_fpr, min_fpr, max_fpr = [],[],[]
mean_tpr, min_tpr, max_tpr= [],[],[]
#这个是为了对曲线进行插值,因为每个曲线的样本不一样,所以获取到的fpr和tpr也不一样长度,
#所以需要进行插值
#插值的原理是,获取所有fpr的值,然后将每个交叉验证的roc都插值成和fpr的值一样多的长度。
#插值并不会改变每个roc曲线的形状,这个可以放心使用
unique = np.unique(np.array(value).flatten())
#对fpr和tpr进行插值
for l in range(len(fpr)):tpr[l] = np.interp(unique, fpr[l], tpr[l], 0, 1)fpr[l] = np.interp(unique, fpr[l], fpr[l], 0, 1)#将每个交叉验证的ROC都画出来plt.plot(fpr[l], tpr[l])fpr = np.array(fpr)
tpr = np.array(tpr)
#求fpr和tpr的极大极小,获取每个实验所能触及的最大指标范围
min_fpr = np.min(fpr, axis=0)
max_fpr = np.max(fpr, axis=0)
min_tpr = np.min(tpr, axis=0)
max_tpr = np.max(tpr, axis=0)
#获取均值,为了得到交叉验证的平均曲线
mean_tpr = np.mean(tpr, axis=0)
mean_fpr = np.mean(fpr, axis=0)
mean_tpr[0] = 0plt.figure(dpi=300)
plt.title(class_type)
plt.style.use('seaborn')
plt.xlabel('1-Specificity')
plt.ylabel('Sencitivity')
#画平均曲线
p1 = plt.plot(mean_fpr, mean_tpr, marker='.', linestyle='--',c='b', linewidth=1,alpha=0.65, label='20X')#markeredgecolor='b',plt.legend(loc='lower right')
#将极大极小值的范围填充淡蓝色
p2 = plt.fill_between(min_fpr,max_tpr, min_tpr,color='blue', alpha=0.08)
#展示图象
plt.show()

下面附上每个交叉验证的图像来验证范围画的对不对。

再对比我们画的
可以看到啊,我们画的范围与所有ROC的曲线的范围是吻合的,平均曲线也像模像样。

画交叉验证的ROC曲线,多个样本不同的ROC重叠。相关推荐

  1. ROC曲线是什么?ROC曲线是怎么绘制的?ROC曲线的横纵坐标是什么?如何用Python绘制?AUC又是什么?

    ROC曲线是什么?ROC曲线是怎么绘制的?ROC曲线的横纵坐标是什么?AUC又是什么? metrics.roc_auc_score metrics.roc_curve ROC= Receiver Op ...

  2. reportROC 一行代码输出ROC曲线的各项统计数值及ROC曲线

    今天来学习一个新R包--reportROC,这个R包可以一行代码输出ROC曲线的各项统计数值及ROC曲线,比如截断值.AUC及置信区间.灵敏度及置信区间.特异度及置信区间.阳性似然比.阴性似然比.阴性 ...

  3. roc曲线spss怎么做_SPSS单因素ROC曲线及多因素联合诊断ROC曲线绘制(原创手把手) - 医学统计和生物统计讨论版 -丁香园论坛...

    最近被好几个师弟师妹问到ROC曲线的绘制,尤其是多因素联合诊断ROC曲线的绘制(如下图这样的怎么做),所以干脆好好总结一下: 一.单因素ROC曲线 其实这个最简单,估计很多人也会,我知道的有两种办法, ...

  4. python的roc曲线与阈值_浅谈ROC曲线的最佳阈值如何选取

    为了获取ROC曲线的最佳阈值,需要使用一个指标--约登指数,也称正确指数. 借助于matlab的roc函数可以得出计算. % 1-specificity = fpr % Sensitivity = t ...

  5. Lasso交叉验证构建模型并计算各样本评分

    Lasso交叉验证 library(glmnet) library(survival) library(survminer)x = exp[,gene] #gene为纳入的基因集 y = Surv(t ...

  6. 分类算法如何绘制roc曲线,如何绘制knn模型的ROC曲线

    I am using ROCR package and i was wondering how can one plot a ROC curve for knn model in R? Is ther ...

  7. 交叉验证分析每一折(fold of Kfold)验证数据的评估指标并绘制综合ROC曲线

    交叉验证分析每一折(fold of Kfold)验证数据的评估指标并绘制综合ROC曲线 Receiver Operating Characteristic (ROC) with cross valid ...

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

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

  9. 分类器MNIST交叉验证准确率、混淆矩阵、精度和召回率(PR曲线)、ROC曲线、多类别分类器、多标签分类、多输出分类

    本博客是在Jupyter Notebook下进行的编译. 目录 MNIST 训练一个二分类器 使用交叉验证测量精度 混淆矩阵 精度和召回率 精度/召回率权衡 ROC曲线 多类别分类器 错误分析 多标签 ...

最新文章

  1. 超星未来发布新一代高级别自动驾驶车载计算平台
  2. 肠道菌群机制研究及国自然课题设计专题会议
  3. 《微信公众平台开发最佳实践》——第3章 基 础 接 口 3.1 接收用户消息
  4. c语言中逗号自加,计算机二级自加、自减运算符和逗号运算符
  5. foxmail、outlook发送邮件,进度条很慢
  6. Windows Mobile 开发系列文章收藏 - Windows Mobile 6.x
  7. 【SpringBoot】自动装配原理
  8. Visual Studio Code 1.44 发布
  9. java数字高低呼唤_记录某电话交换台 5 分钟内接到的呼唤次数,则样本空间 S={0,1,2, … ,n, … }_Java答案_学小易找答案...
  10. 《LabVIEW 虚拟仪器程序设计从入门到精通(第二版)》一导读
  11. 单片机内存及内存映射(本地地址,逻辑地址,全局地址)
  12. 桌面美化 Python tkinter倒计时工具
  13. WebService调用第三方服务(中英文翻译)
  14. linux的vi编辑器中如何查找内容(关键字)
  15. HDU - 6287 口算训练
  16. Android字体的适配问题
  17. 借助Hugo和Academic主题在github.io建立个人网站
  18. SQLServer的top 100 percent用法
  19. 想学硬件,该学什么啊?
  20. 天空灰蒙蒙的,心情有点像这天气

热门文章

  1. WakeData完成数千万人民币A轮融资,由红杉资本中国基金领投
  2. 困难——循环控制结构
  3. #mipush #解决mipush延时 #mipush假死 #解决mipush收不到信息(已注册)crond,安卓crond
  4. 碧桂园博智林机器人总部大楼_碧桂园佛肇区域工程管理部参观博智林机器人创研中心总部大楼项目...
  5. android 免root调用系统工具,免root自动化助手
  6. 科学计算机上如何输arc,卡西欧5800计算器怎么输入arctan函数
  7. 2021语音识别领域最具商业合作价值企业盘点
  8. windows平台上部署gitblit注意事项
  9. 数字赋能 | 陕建数科与益企联科技签署合作伙伴协议
  10. 讯客分类信息php,讯客分类信息互动版 v1.3