医学人工智能科研入门(10.7版)

文摘   科技   2024-10-26 02:00   四川  

     人工智能(Artificial Intelligence),英文缩写为AI。2017年,国务院印发《新一代人工智能发展规划》,2024年,“人工智能+”写入政府工作报告。在医学领域,人工智能已经在影像、内镜、病理、病历质控方面有实际应用。《 人工智能在肺结节的应用专家共识(2022年)》是针对医学人工智能的专家共识代表。在科研方面,人工智能在学术期刊、课题数量爆发式增加。

一、医学人工智能优势:

1、硬件:计算机、数据存储设备,资金投入相对可控。除了特别大的算力需求,基本的计算机配置即可应用。

2、数据医院内部有海量数据。而人工智能医学的基于数据。研究的设计简单地归纳为两个部分,① 临床数据采集和需求、② 模型构建和运行。临床数据收集、临床需求的确定,这个对于绝对部分医院来说,是完全没有问题的。

3、方法:人工智能医学的研究,核心是基于数据的决策分析,其研究方法、算法,均可在临床各个科室是通用的。可应用于影像组学的核心算法也可以用于构建彩超图像的模型。随机森林、决策树不仅可应用于预测心肌梗死的预后,也可以应用于护理的跌倒风险评估,甚至可扩展到卫生管理科研。

4、效率:对于一般体量的数据,算法明确情况下,可数分钟内完成结果运算。

二、研究方向:

     根据目前课题申报和论文发表来看,目前医学人工智能主要有两个研究方向:

(一)基于机器学习对临床结果的预测:

手术结局、临床风险预测等,例如:

基于机器学习的心脏大血管手术后谵妄预测模型研究;术前预测肝内胆管癌患者神经侵犯状态机器学习模型的构建和验证

以手术成败,死亡作为target,临床诊疗过程中的所有因素做为Feature。流程为① 环境搭建 ② 数据预处理 ③ 选择算法 ④ 算法训练 ⑤ 生成模型 ⑥ 模型测试(结果输出)。这其中“选择算法”可以选择多种算法,对不同算法的结果进行比较;结果预测一般涉及机器学习(machine learning)。

“结果输出”的指标:precision,ROC,F1, recall。

(二)基于深度学习对图像的辅助诊断:

影像、消化内镜、病理图像的辅助诊断。

其研究方法大概为,对图片进行标签、基于深度学习的训练,再用训练好的模型,去对新的图片进行判断。

1、影像组学的基本步骤:

1)数据获取:收集医学影像数据,如彩超、CT、MRI、PET等。

2)图像分割:对影像进行分割,将感兴趣的区域(如肿瘤)从周围的组织中分离出来。

3)特征提取:从分割后的影像中提取大量的数学、几何和统计特征,包括形状、纹理、灰度等。这些特征可以反映组织的形态、结构和组织特性。

4)特征选择:根据特征的相关性、重要性和预测能力等进行筛选和选择最具有代表性的特征。
5)建模和分析:利用选定的特征进行建模和分析,可以使用机器学习、统计学方法等来构建预测模型,发现生物学模式、进行疾病诊断、预后评估等。

影像组学主要采用pyradiomics数据包。

三、诊断效能指标:

AUC全称为Area Under Curve,即曲线下面积,是用于评估二分类模型性能的一个重要指标。它通过计算ROC(Receiver Operating Characteristic)曲线下的面积来衡量模型的整体分类能力。ROC曲线是一个性能度量模型,它以真阳性率(TPR)为纵坐标,假阳性率(FPR)为横坐标,展示了模型在不同阈值下的分类性能。

AUC的取值范围在0到1之间,AUC值越大,表示模型的分类性能越好。当AUC为1时,表示模型是完美分类器,能够将所有正例和负例完全正确地分类。当AUC为0.5时,表示模型的分类性能与随机猜测相当,没有实际应用价值。

AUC的优点包括直观性、鲁棒性和全面性。直观性体现在ROC曲线和AUC提供了直观的图形和数值表示,方便理解和比较不同模型的性能。鲁棒性体现在ROC曲线和AUC对类别不平衡问题不敏感,能够在不同类别的样本比例差异较大的情况下准确评估模型性能。全面性体现在ROC曲线展示了模型在不同阈值下的性能表现,而AUC则提供了一个整体评价。

在医学诊断中,AUC被用于评估诊断测试的性能,如肿瘤检测、疾病预测等。

F1:在机器学习中,F1 值是一种用于衡量分类模型性能的指标。

F1 值是精确率(Precision)和召回率(Recall)的调和平均数。精确率是指被分类器判定为正类的样本中实际为正类的比例;召回率是指实际为正类的样本中被分类器判定为正类的比例。

F1 值的计算公式为:F1 = 2 * (精确率 * 召回率) / (精确率 + 召回率)。

F1 值综合考虑了精确率和召回率,它的值越高,说明分类模型在精确性和全面性上的表现越好。在实际应用中,根据不同的任务需求,可以通过调整分类器的参数来优化 F1 值。

三、工作环境

编程语言:

R语言,目前大部分论文采用R语言,R语言的优势在于统计、另外,机器学习的各类包也比较完善。但劣势在于扩展性不如python,R语言目前也无法开展深度学习、图像识别的算法。
Python语言:Python也可以开展统计、机器学习、深度学习,虽然目前相关论文少于R语言,但随着后期论文的不断发表,会逐步的增多。并且,若要进一步研究影像组学、消化内镜图像识别等,最好直接选用Python语言。

安装:目前主流推荐Anaconda。其具体步骤可网上搜索教程:

说的是Anaconda安装好后,就包含了python了。不过,我也没理清之间的关系,保险一点可以把Python也安装了,网上也可以找到相应教程

费用:以上软件商用是要收费的,不过,安装的时候选择个人使用是免费的。

编辑器选择:编辑代码、运行代码的工具,常用编辑器:jupyterspyder

1、环境部署:

import numpy as np  # 创建一个一维数组import pandas as pd   #数据处理的常用库import matplotlib.pyplot as plt #图像绘制

2、数据预处理:

2.1、数据导入:

Python是可以支持CSV、Excel的数据库格式。

CSV格式:

import csvwith open('A.csv','r') as csvfile:reader = csv.DictReader(csvfile)column = [row['Age'] for row in reader]

Execl格式:

filePath_01 = 'D:/我的文件/表格1.xlsx'  ## python的路径是/,不是\df1 = pd.read_excel(filePath_01,sheet_name = 'Sheet1')

2.2 数据处理:

train = pd.read_csv("data/Titanic处理后数据.csv")label = LabelEncoder()   ## 将字符串类型的分类变量进行重新编码train["Name"] = label.fit_transform(train["Name"])train["Sex"] = label.fit_transform(train["Sex"])

Python的符号格式有三种:字符串、整数、浮点数,那么,像临床常用的基线数据,“姓名”“性别”就需要转换为Python可识别的数据。以上代码就是转换用。

3、确定研究目标与变量:

x=dataset.iloc[:,0:22]  #研究变量y=dataset.iloc[:,22]   #研究目标print(x)print(y)  #打印结果

例如,我们如果想把肠息肉切除后出血风险做为研究目标,可以把术后出血定义为y。而息肉大小、切除时间、血常规、凝血功能等定义为x。

4、划分训练集和验证集:

from sklearn.model_selection import train_test_split  #导入样本划分的库x_trainRF,x_testRF,y_trainRF,y_testRF=train_test_split(x,y,test_size=0.2,random_state=0) #划分训练与验证集

数据划分为两个部分:训练集、验证集。这句代码就是把数据进行分割。不过,一般都是2:8分。20%用来验证。

5、模型训练:

from sklearn.ensemble import RandomForestClassifierRF = RandomForestClassifier(n_estimators = 100, # 树的数量                              max_depth= 5,       # 子树最大深度                              oob_score=True,                              class_weight = "balanced",                              random_state=1)

这里采用随机森林模型。此外,常见的机器学习算法还有:

逻辑回归:

from sklearn.linear_model import LogisticRegression #逻辑回归LR = LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,          verbose=0, warm_start=False)

高斯朴素贝叶斯:

from sklearn.naive_bayes import GaussianNB# 创建高斯朴素贝叶斯模型NB = GaussianNB()

决策树:

from sklearn.tree import DecisionTreeClassifierdtree = DecisionTreeClassifier(criterion='entropy',max_depth=5)

AdaBoostClassifier:

from sklearn.ensemble import AdaBoostClassifierdtc_cv = AdaBoostClassifier(learning_rate=0.0001,n_estimators=500,random_state=0)

4、结果输出:

4.1 输出其在训练数据和验证数据集上的预测精度

RF.fit(x_trainRF,y_trainRF) #这里采用随机森林## 输出其在训练数据和验证数据集上的预测精度y_predictRF = RF.predict(x_testRF)print(classification_report(y_testRF,y_predictRF))

4.2 绘制ROC曲线及其AUC数值:

import matplotlib.pyplot as pltfrom sklearn.metrics import roc_curve, auc #导入库from sklearn.metrics import roc_auc_scoreimport numpy as np
fprRF,tprRF,thresholdRF = roc_curve(y_predictRF,y_testRF) ###计算真正率和假正率roc_aucRF = auc(fprRF,tprRF) ###计算auc的值print(fprRF.shape, tprRF.shape, thresholdRF.shape)
plt.figure()lw = 2plt.figure (figsize=(5,5),dpi=1000)plt.plot(fprRF, tprRF, color='red',         lw=lw,label='RandomForestClassifier (area = %0.2f)' % roc_aucRF) ###假正率为横坐标,真正率为纵坐标做曲线plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--') #中间的虚线plt.rc('font',family='Times New Roman')##字体plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver operating characteristic example')plt.legend(loc="lower right")plt.show()

四、可投稿期刊列表:

1、Ann Transl Med

2、Math Biosci Eng

3、 Sci Rep

4、artificial intelligence in medicine

5、Journal of Digital Health

五、科研合作:

目前已可开展机器学习的数据结果输出,若有需要课题、论文合作,可联系。

咨询内容、联系方式(5.4版)


肝病梁韬
健康博主;丁香园最具影响力医生;丁香问答专家;四川消化微创学会委员;全网粉丝80+万;五星好评8千+;肝病、幽门螺杆菌、抗衰老、胃肠、人工智能。合作V: ganbingliangyi
 最新文章