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

文摘   科技   2024-10-20 03:00   四川  

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

一、医学人工智能优势:

1、硬件:计算机、数据存储设备,资金投入相对可控,普通医院即可负担。若涉及大量数据的运算,会涉及算力目前显卡费用偏高,但仍可配置,应对一般研究尚可。也可以购买云服务。

2、数据大部分医院均实现电子病历,产生海量的数据。而人工智能医学的基于数据。研究的设计简单地归纳为两个部分,① 临床数据采集和需求、② 模型构建和运行。临床数据收集、临床需求的确定,这个对于绝对部分医院来说,是完全没有问题的。而其中问题最大的是模型构建和运行。而这块跟高校的计算机实验室恰恰相反,他们缺少的是临床数据和需求。

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

二、研究方向:

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

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

例如,手术结局预测,死亡风险预测。

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

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

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

例如,影像、消化内镜、病理图像的诊断。

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

三、诊断效能指标:

主要采用AUCF1

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

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

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

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

四、专业名词:
人工智能:人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人工智能的理论、方法、技术及应用系统的一门新的技术科学。
人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能与人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
机器学习:机器学习(ML, Machine Learning)是一门多学科交叉专业,涵盖概率论知识,统计学知识,近似理论知识和复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式,并将现有内容进行知识结构划分来有效提高学习效率。
机器学习还有下面几种定义:
(1)机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。
(2)机器学习是对能通过经验自动改进的计算机算法的研究。
(3)机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。
深度学习:深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)。
深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。

(二)工作环境的搭建:

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

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

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

(三)编辑器选择:

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

(四)编程语言:

  1. R语言,目前大部分论文采用R语言,R语言的优势在于统计、另外,机器学习的各类包也比较完善。但劣势在于扩展性不如python,R语言目前也无法开展深度学习、图像识别的算法。

  2. Python语言:Python也可以开展统计、机器学习、深度学习,虽然目前相关论文少于R语言,但随着后期论文的不断发表,会逐步的增多。

具体可以看其官方文档:https://docs.python.org/3/tutorial/modules.html#importing-from-a-package

1、Python内部环境部署:

1.1 机器学习环境部署标准三联:

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt


常用语法和逻辑:

对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。【注:缩进是四个空格或一个Tab键】

1.2 ROC曲线的制作:

ROC曲线的全称是“受试者工作特性”曲线(Receiver Operating Characteristic),源于二战中用于敌机检测的雷达信号分析技术。是反映敏感性和特异性的综合指标。它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性,再以敏感性为纵坐标、(1-特异性)为横坐标绘制成曲线,曲线下面积越大,判别的准确性越高。在ROC曲线上,最靠近坐标图左上方的点为敏感性和特异性均较高的临界值。

## 输出高清图像

%config InlineBackend.figure_format = 'retina'
%matplotlib inline

ROC曲线做出来是一个图像,所以,需要matplotlib这个库,这个库是python里面非常有用的库。还可以做直方图、散点图、折线图。也就不必另外用统计图软件了。

matplotlib.rcParams['axes.unicode_minus']=False
import seaborn as sns
sns.set(font= "Kaiti",style="ticks",font_scale=1.4)
import pandas as pd
pd.set_option("max_colwidth", 200)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder,label_binarize
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import *

这其中,sklearn.metrics 就是我们用来数据归回/分类评估的核心库。这个import*,后面这个*要注意,是包含所有模块,但是使用有争议,暂时也没有找到其他代码,先用着吧。

2、数据预处理:

2.1、数据导入:

Python是可以支持CSV、Excel的数据库格式,这种格式可以直接从医院的HIS系统导出,不过,Excel比较适用于我们。

CSV格式:

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

Execl格式:

import pandas as pdfilePath_01 = 'D:/我的文件/使用python读取Excel的路径/表格1.xlsx'  ## python的路径是/,不是\df1 = pd.read_excel(filePath_01,sheet_name = 'Sheet1')

2.2数据结构:

数组(Array)是由相同类型的元素(element)集合组成的固定长度(Size)的一种数据结构。

2.3 数据处理:

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

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

3、模型构建:

Target = ["Survived"]   ## 定于预测目标变量名

目标变量:我们要研究的目标。

例如,我们如果想把肠息肉切除后出血风险做为研究目标,就可以把survived自行定义为bleed。

train_x = ["Pclass", "Name", "Sex", "Age","Embarked"]  ## 定义模型的自变量名

自变量:我们要研究各项指标。这一句也非常重要,是我们临床研究基线特征。

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

X_train,X_val,y_train,y_val = train_test_split(train[train_x], train[Target],
test_size = 0.25,random_state = 1)

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

下面的程序中使用RandomForestClassifier()函数建立了包含100个决策树,最大深度为5的随机森林模型,针对训练好的模型并计算出其它训练集和验证集上的预测精度。

## 使用随机森林对泰坦尼克数据进行分类

rfc1 = RandomForestClassifier(n_estimators = 100, # 树的数量max_depth= 5, # 子树最大深度oob_score=True,class_weight = "balanced",random_state=1)rfc1.fit(X_train,y_train)

4、结果输出:

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

rfc1_lab = rfc1.predict(X_train)rfc1_pre = rfc1.predict(X_val)print("随机森林的OOB score:",rfc1.oob_score_)print("训练数据集上的精度:",accuracy_score(y_train,rfc1_lab))print("验证数据集上的精度:",accuracy_score(y_val,rfc1_pre))

但是,为了让论文更好发表,最好有图片。

## 可视化在验证集上的Roc曲线

pre_y = rfc1.predict_proba(X_val)[:, 1]fpr_Nb, tpr_Nb, _ = roc_curve(y_val, pre_y)aucval = auc(fpr_Nb, tpr_Nb) # 计算auc的取值plt.figure(figsize=(10,8))plt.plot([0, 1], [0, 1], 'k--')plt.plot(fpr_Nb, tpr_Nb,"r",linewidth = 3)plt.grid()plt.xlabel("假正率")plt.ylabel("真正率")plt.xlim(0, 1)plt.ylim(0, 1)plt.title("随机森林ROC曲线")plt.text(0.15,0.9,"AUC = "+str(round(aucval,4)))plt.show()

后得出这么一个ROC结果。

三、常用python算法库:

1)Scikitlearn:是一个常用的算法库:相关代码可参考:https://mp.weixin.qq.com/s/c-Sl7n_ceawz6AHm5Mtw0w

四、可投稿期刊列表:

1、Ann Transl Med

2、Math Biosci Eng

3、 Sci Rep

4、artificial intelligence in medicine

5、Journal of Digital Health

五、未完待续:

上面例子的(随机森林)机器学习是人工智能应用领域比较简单的模块,后续更新各类算法。若有临床同学有数据,可以远程论文合作,联系方式如下:

咨询、服务内容、联系方式(5.0版)


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