python影像组学_【影像组学预测模型-Radiomics】实操教学
影像组学(Radiomics)是一个新兴的概念,2012 年由荷兰学者 Philippe Lambin 首次提出,其定义是借助计算机软件,从医学影像图像中挖掘海量的定量影像特征,使用统计学和/或机器学习的方法, 筛选最有价值的影像组学特征,用以解析临床信息,用于疾病的定性、肿瘤分级分期、疗效评估和预后预测等.
流程概述
第一步:勾画ROI(三维ROI)
这一步很多软件都能做到 (工具见第二部分)。请留意使用的工具应能勾画三维的ROI,并且体素大小、层间距等几何信息能计算准确,否则跟形态/轮廓相关的特征会计算错误。
第二步:计算ROI内影像信号(也就是把ROI内的影像抠出来)的特征集。特征集包括:灰度特征:即常见的直方图信息譬如均值,均方偏差,偏度之类;
形状特征:根据ROI轮廓计算的,如体积、表面积、最大径之类的;
纹理特征:通过灰度共生矩阵计算出来的高阶特征。这些纹理特征其实往往都有显示意义,举例:SizeZone特征用于评估ROI内影像的块状程度,下列两个瓷砖图的Small Area Emphasis / Large Area Emphasis就不同。
这一步需要特别留意的是:应该用信号真实值而不是灰度值进行计算。单纯把0~4095的灰度值放进去计算,难以把不同被试的图归一化。所以作者不推荐用通用的图像纹理计算软件。应使用专业的医学影像处理软件,准确读入DICOM信息得到真实值。
第三步:数据挖掘,预测模型建立与检验。
目前最常见的套路是利用Lasso回归筛选相关变量,然后绘制nomogram,对nomogram性能进行评价。如果再深入一点,那就是基于nomogram做亚组划分与分析。
重点:本文小编将此软件按照,ROIs 绘制,Lasso教程,再到nomogram建立,全流程手把手传授,并结合案例给大家分析讲解。
1. 软件要求和准备工作
1.1 软件安装
Radiomics最主要就是靶区规划(ROIs),有很多软件都可以实现,市面上大部分软件都是基于python开发和运行的,需要安装照Python和设置环境。那么,有没有更省事一步到位的解决办法?答案是,有。这个一步到位的解决方法就是本文要介绍的3D Slicer。3D slicer (https://download.slicer.org/),支持MAC 和Window, 免费!免费!免费!重要的事情说三遍!
1.2 软件简介
假定大家已经从网站下载最新的4.8.1版本,完成了安装。软件启动后,将显示下面的界面:
注意到红色箭头指向的右上方按钮图标了吗?这不就是Python的代表性Logo吗?没错,只要安装好3D Slicer,内部就会直接准备好了Python 2.7的开发环境。点击这个按钮,就会在软件的下方启动Python的交互式开发环境。
1.3 操作示范:
大家可以参考下面这个网站(https://www.slicercn.com),网站里有很多教大家使用的中文视频,我就不重复讲了。
2. 演示如何使用3D Slicer 获取radiomics
2.1 绘制ROIs
这里推荐AI绘制(Nvidia Clara )
PS: 安装NvidiaAIAssistedAnnotation扩展(在“分割”类别中),等待安装完成,然后单击“重新启动”
以肝脏为例
CT对肝脏的基于边界点的分割:转到 示例数据 模块并加载“ CTACardio”数据集
转到 Segment Editor
创建一个新的细分
双击segment名称并输入“ liver”以指定细分内容
单击“ Nvidia AIAA”效果,“从边界点分割”部分
可选:单击“过滤器”图标以仅列出名称中包含“肝脏”的那些型号
选择“ annotation_ct_liver”(训练为在门静脉期CT图像中分割肝脏的模型)
单击“放置标记点”按钮,然后在切片视图中的所有6个侧面的肝脏边缘附近单击,然后单击“开始”
在大约30秒内,自动分割结果将出现在切片视图中。要以3D形式显示结果,请点击Segment Editor列表上方的“显示3D”按钮。
要在分割完成后调整先前放置的边界点,请单击“开始”按钮旁边的“编辑”图标。
在CT上对肝脏和肿瘤进行全自动分割:从http://medicaldecathlon.com/下载Task03_Liver \ imagesTr \ liver_102.nii.gz数据集并将其加载到3D Slicer中
转到 Segment Editor
点击“ Nvidia AIAA”效果
在“自动分割”部分中,选择“ segmentation_ct_liver_and_tumor”模型,然后单击“开始”
自动分割结果应在3-5分钟内显示
可选:转到 Segments 模块以编辑显示设置
label: liver / tumor
2.2 提取radiomics
主要使用pyradiomics组件,引用某大神一个完整的视频给大家介绍下提取,可以只参考视频的最后一部分就可以了,前面的规划,可以参考上述内容。
https://www.bilibili.com/video/BV15V411Z73o?from=search&seid=5989594993256922790
3. lasso回归,确定潜在变量
第一步呢,永远是读入数据和核查数据。
然后,进入到我们此次教程的一个关键环节,分割数据。我们这个数据集当中共有699例样本,我们需要将其随机分割为训练集和测试集,一般的样本比例是2:1,也就是2/3的病人用来做训练,训练出一个准确的模型,剩下1/3病人用来做测试,验证我们的这个模型是否可靠。分割数据的代码如下,整个过程都是随机的:# 分割数据set.seed(123)ind
样本(也就是数据的行)分配好了之后呢,下一步就是把采集到的信息(也就是数据列)进行分配,在我们的这个测试数据中前面V1-V9是采集到的样本信息,最后一列是我们的诊断,也就是肿瘤的良恶性,下面我们把样本信息和样本诊断分割开来:# Convert data to generate input matrices and labels:# x相当于临床信息x
首先,我们尝试做K-fold交叉验证。在glmnet包中使用cv.glmnet()估计λ值,glmnet默认使用10倍交叉验证。所谓K-fold交叉验证,就是将数据分成k个相同的子集(折叠子集),每次用k-1个子集拟合模型,然后将剩余的子集作为测试集,最后将k个结果合并(一般采用平均值)来确定最终的参数。在此方法中,每个子集仅用作测试集一次。在glmnet包中使用K-折交叉验证非常容易。结果包括每个相应的MSE值和相应的λ。在这里,我们将训练集k值定为5,做5-fold cross validation,这也是比较常用的。# 5-fold交叉验证,找出最佳lambda值fitCV
上面的图叫做CV统计图,CV统计图与glmnet中的其他图表有很大的不同,它表示了λ的对数与均方差以及模型中变量数量之间的关系。图表中的两条垂直虚线表示最小均方误差的对数λ(左侧虚线)和最小距离的标准误差的对数λ(右侧虚线)。如果存在过拟合问题,那么从最小值到标准误差位置的距离是解决问题的一个很好的起点。可以看到,我们可以选择的lambda值有两个,具体lambda选值要根据自己实验设计而定。lambda.min是最佳值,lambda.1se则是一倍SE内的更简洁的模型。这也涉及到临床模型一个很重要的考量标准,到底是选择精度高但是复杂的模型,还是放弃部分精度,选择变量更少更有可能有应用价值的模型呢?本例中我们选择最佳lambda值。然后我们来看一下,随着lambda值的变化,每个观察值对应的系数的变化趋势。# check the coeffit
此图显示,随着λ的减少,压缩参数减少,系数的绝对值增加。这个模型应该如何在文章中描述呢?我们来输出系数:# get the coefcoef.min = coef(fitCV, s = 'lambda.min')coef.min
然后就会生成每个变量所对应的系数,我们也可以通过这个系数来对模型进行描述。
……
4. nomogram建立和验证
python影像组学_【影像组学预测模型-Radiomics】实操教学相关推荐
- python赋值运算符难理解_零基础学 Python(8)运算符 — 算术、比较、赋值、逻辑...
Python 的运算符有:算术运算符.比较运算符.赋值运算符.逻辑运算符.成员运算符.位运算符.身份运算符.本章主要讲解 Python 的算术运算符.比较运算符.赋值运算符.逻辑运算符. 算术运算符 ...
- tcp 组播_华为组播理论知识详解(二)
二.IGMP协议简介 IGMP是Internet Group Management Protocol的简称,又被称为互联网组管理协议,是TCP/IP协议族中负责IPv4组播成员管理的协议. IGMP用 ...
- 渗透学python的哪方面_渗组词_渗字组词
渗透:(拼音:渗:shèn,透:tòu) 渗人:(拼音:渗:shèn,人:rén) 渗入:(拼音:渗:shèn,入:rù) 渗流:(拼音:渗:shèn,流:liú) 渗沥:(拼音:渗:shèn,沥:l ...
- python画画零基础_[零基础学python]画圈还不简单吗?
画圈?换一个说法就是循环.循环,是高级语言编程中重要的工作.现实生活中,很多事情都是在循环,日月更迭,斗转星移,无不是循环:王朝更迭,寻常百姓,也都是循环. 在python中,循环有一个语句:for语 ...
- python字符串换行连接_零基础学python_03_字符串(拼接+换行+制表符)
字符串拼接 在编码的过程很多时候都会用到字符串的拼接,例如,你可能想将姓和名存储在不同的变量中,等要显示姓名时再将它们合而为一: first_name = "li" last_na ...
- python response重头开始_你必须学写 Python 装饰器的五个理由
你必须学写Python装饰器的五个理由 ----装饰器能对你所写的代码产生极大的正面作用 作者:Aaron Maxwell,2016年5月5日 Python装饰器是很容易使用的.任何一个会写Pytho ...
- python嵌入shell代码_大家一起学python-Python基础1
本节内容 Python简介 Python的发展史 选择Python 2 还是python 3? Python安装 第一个Python程序 Python变量 学习怎么输入 数据类型 数据运算基础 表达式 ...
- python培训一般多久_零基础学python需要多久
一:明确自己的学习目标.不管我们学习什么样的知识,都要对自己的学习目标有一个明确的认识.只有这样才能朝着目标持续的前进,少走弯路,从而在学习的过程中得到提升,享受整个学习的乐趣. 二:基础的Pytho ...
- python vb 哪个好学_最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...
原标题:最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几 在很多人眼里程序员的标配就是黑框眼镜+格子衫+双肩包+牛仔裤+运动鞋,拥有了这些可能就被判定为一个程序员. 而如何判定一个程 ...
最新文章
- transmission Linux(debian)下的BT下载客户端安装
- 题解 guP2421 【[NOI2002]荒岛野人】
- 第五章-分布式并行编程框架MapReduce
- 全球及中国甲苯甲酸行业投资决策与运营前景状况分析报告2022版
- 灰色简约三级CSS下拉菜单代码
- 记录 之 一个小bug:Unsupported syntax ‘Starred‘
- [BZOJ3203][SDOI2013]保护出题人(凸包+三分)
- unixbench类似_UnixBench的实现介绍-阿里云开发者社区
- 深度学习自学(二十五):目标跟踪
- 手机android flash,安卓手机flash插件最新版
- 计算机接口图形,图形设备接口
- http://www.jb51.net/softjc/33896.html(vs2010破解)
- ruoyi增加导入导出
- 8090后一年有多少存款才算正常?存款五个等级,你在第几个等级?
- VS Code保存文件时自动删除行尾空格
- CSS样式:如何让背景图片占满整个屏幕
- 嘎吱作响Creaks for mac(解谜游戏)中文版支持m1
- 基于XC2V1000型FPGA的FIR抽取滤波器的设计
- 29. Compose实现瀑布流 StaggeredGrid
- Vue的项目开发,你应该知道什么
热门文章
- 新来的CTO禁止前后端分离,而且还说了一大堆优缺点!
- 27岁自学python找工作_27岁0基础自学Python,多久可以找到工作?
- 电大考试计算机应用基础考试试题,最新电大统考计算机应用基础试题知识点
- 怎么在html中加代码,如何在HTML中使用代码块
- AToken小课堂----什么是私钥?什么是助记词?
- 论文笔记 Inference in Deep Gaussian Processes using Stochastic Gradient Hamiltonia使用随机梯度哈密顿量蒙特卡罗推理深度高斯过程
- 【软考 系统架构设计师】企业信息化战略与实施② 信息系统战略规范方法
- centos下cx_oraclel连接报错dpi1047错误唯一正解
- 爱好-文化-冢:象冢
- 先电Openstack云平台搭建【超级详细】【附带镜像】