前沿
2017年,国务院印发《新一代人工智能发展规划》,“人工智能 ”写入2024年政府工作报告。在医学领域,人工智能已经在影像、内镜图像识别,电子病历逻辑判断等有着大量应用,也写入专家共识,例如《 人工智能在肺结节的应用专家共识(2022年)》。
近几年逐步提倡科研与转化相结合,科研要服务于应用。医学人工智能的研究就可以很好的实际应用于临床工作。《Nature》《Science》等学术期刊均有专题报道,课题方面也是热门的立项方向。
一、AI医学优势:
(一)适合非高校的医院的科研:
1、绝对大部分非高校直属的医院,少有独立的生物学实验室,生物学实验室的维护成本极高。而人工智能医学研究,算是一种轻资产,最为核心的研究环节就是算法的构建、算力的运用。固然,有专门的软件和公司提供服务,也可以采取医院自建的模式,投入最大的是智力和精力。在经费上投入不算多,因为是用于科学研究,对于信息安全等级要求不高,也没有多少维护费用。
2、跟蛋白组学、基因组学研究类似,人工智能医学的研究,其算法是对于临床各个科室是通用的。可应用于影像组学的核心算法也可以用于构建彩超图像的模型。随机森林、决策树不仅可应用于预测心肌梗死的预后,也可以应用于护理的跌倒风险评估,甚至可扩展到医院行政管理。
3、目前,大部分医院均实现电子病历,产生海量的数据。而人工智能医学的基础在于数据。研究的设计简单地归纳为两个部分,① 临床数据采集和需求、② 模型构建和运行。临床数据收集、临床需求的确定,这个对于绝对部分医院来说,是完全没有问题的。而其中问题最大的是模型构建和运行。而这块跟高校的计算机实验室恰恰相反,他们缺少的是临床数据和需求。
4、做好人工智能医学研究,可以有几个方式。与高校的计算机实验室合作、第三方集成平台。但经过实践,再加上绝大部分代码均可以在github上找到。以及论文的发表需要调参和提供原始代码,医院完全可以独立开发算法和模型。构建自己的人工智能医学实验室。
(二)软件编程技能培养:
目前人工智能的主流编程语言为python。近几年Python流行起来,除了在人工智能领域的应用,它在资料收集、数据分析方面实在强势。
只需要几行简短的代码,它就可以:
● 网络爬虫,一键爬取全网公开资料
● 对实验结果进行数据分析,让观点更科学严谨
● 批量处理上百个Excel、Word、PDF文件
● 生成可视化图表,成果展示更专业……
工欲善其事,必先利其器。大数据时代,科研人想要如鱼得水,学会Python应当提上日程。
当前,医院为了质控控制和流程改造。院内上线了各类系统,并且还在不断增加,医疗信息化建设是必然趋势。
对信息系统使用和优化,单纯依赖信息科会导致迭代周期变慢。熟悉和了解编程原理,这对使用院内信息系统有极大的帮助。更好服务于临床工作。
(三)研究方向:
医学人工智能从应用场景角度,可以有以下领域:
① 机器学习(深度学习)决策系统:
基于一些复杂数据的结果预测。例如,手术结局预测,死亡风险预测。
以手术成败,死亡作为target,临床诊疗过程中的所有因素做为Feature。流程为① 环境搭建 ② 数据预处理 ③ 选择算法 ④ 算法训练 ⑤ 生成模型 ⑥ 模型测试(结果输出)。这其中“选择算法”可以选择多种算法,对不同算法的结果进行比较;结果预测一般涉及机器学习(machine learning)。
“结果输出”的指标:precision,ROC,F1, recall。
② 视觉识别(图像识别):
属于无监督学习。对医疗图像进行标签,主要涉及深度学习(deep learning)。就发表论文的成功概率来说,图像识别更容易发表论文。
③ 自然语言处理:
可用于对病历文本的数据分析和处理。
④ 语音处理:
适用于临床问诊和沟通。
(四)可投稿期刊列表:
1、Ann Transl Med
2、Math Biosci Eng
3、 Sci Rep
4、artificial intelligence in medicine(IF=5.3)
5、Journal of Digital Health
二、零基础入门步骤:
(一)名词与关系:
1.名词解释:
人工智能:人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人工智能的理论、方法、技术及应用系统的一门新的技术科学。
人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能与人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
机器学习:机器学习(ML, Machine Learning)是一门多学科交叉专业,涵盖概率论知识,统计学知识,近似理论知识和复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式,并将现有内容进行知识结构划分来有效提高学习效率。
机器学习还有下面几种定义:
(1)机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。
(2)机器学习是对能通过经验自动改进的计算机算法的研究。
(3)机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。
深度学习:深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)。
深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。
Python:一种流行的计算机编程语言。
2. 名词关系:
人工智能是一个比较大的概念,更多是面向公众。机器学习是人工智能实现的一个具体方法,而深度学习是机器学习的一个分支,难度更高。而目前实现机器学习、深度学习的编程,主流还是应用python语言。有很多也使用R语言来做机器学习的研究。
(二)工作环境的搭建:
安装:目前主流推荐Anaconda。其具体步骤可以按照知乎的这个教程:
① Anaconda安装
https://zhuanlan.zhihu.com/p/339690068
② Anaconda安装
https://zhuanlan.zhihu.com/p/432043531
说的是Anaconda安装好后,就包含了python了。不过,我也没理清之间的关系,保险一点可以把Python也安装了。
Python的安装:
https://zhuanlan.zhihu.com/p/363708165
费用:以上软件商用是要收费的,不过,安装的时候选择个人使用是免费的。
(三)编辑器选择:
编辑器就是我们编写代码的地方,安装好Anaconda会有多种编辑器。具体哪一种更好,我也正在摸索。
(四)基础知识:
Python也是一种编程语言,编程语言都有一些规则。比如,什么是字符串,引号是什么意思,怎么输出结果。由于Python应用于各个领域,厉害的Python大神都是各大公司抢着要的,我们跨界过去也不可能那么多精力,就主要学习最基本的框架和主要用于医学领域的。这里推荐一个B站教学视频:
https://www.bilibili.com/video/BV1rg411G7mp\”>
此外,也可以看官方文档:
https://docs.python.org/3/tutorial/modules.html#importing-from-a-package
1、Python内部环境部署:
1.1 python库的安装:
python库的安装有四个方法,主要分为在线安装和离线安装。
在线安装:使用Anaconda prompt 界面 > pip install XXX
离线安装:
1)在Python Extension Packages for Windows – Christoph Gohlke (uci.edu) 下载轮子>使用Anaconda prompt 界面 > cd 工作目录 >pip install 轮子路径 轮子名称
2)github上下载源码,对于医学人工智能,最需要用到feature-selector的库, 而这个库只有github上有。
WillKoehrsen/feature-selector: Feature selector is a tool for dimensionality reduction of machine learning datasets (github.com)github.com/WillKoehrsen/feature-selector
我在这个问题上卡了很久。下好源码后,解压压缩包。使用Anaconda prompt 界面 > cd 工作目录 >python setup.py install
1.2 机器学习环境部署标准三联:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
常用语法和逻辑:
1)对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。【注:缩进是四个空格或一个Tab键】
2)注意大小写:name 'Fs' is not defined,Fs,没有被定义。最后发现是大小写错误。前后代码的大小写一定要一致,否则会报错。
3)使用jupter的时候,由于赋值的问题,需要重头开始运行。如果,在某个代码段运行报错,有可能出现赋值错误。
1.3 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的数据库格式,CSV可以直接从医院的HIS系统导出,如果对于海量数据还是要选择这种格式。用EXCEL比较适合大部分医疗从业者。
CSV格式:(代码如下)
import pandas as pd
import csv
with open('A.csv','r') as csvfile:
reader = csv.DictReader(csvfile)
column = [row['Age'] for row in reader]
Execl格式:(代码如下)
import numpy as npimport pandas as pdplt.rc('font',family='Times New Roman')a = 'C:/Users/46685/Desktop/科研数据//肾内科/DKD数据库给韬哥5.xlsx'dataset= pd.read_excel(a,sheet_name = 'Sheet1')dataset.head() #显示前几排数据x=dataset.iloc[:,0:49] # iloc 定位到列y=dataset.iloc[:,49]print(x)print(y)
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= [“bleed”]
# 定义模型的自变量名
train_x = ["Pclass", "Name", "Sex", "Age", "SibSp", "Parch","Fare","Embarked"]
也可以表述为自己提取对应的数据:
x=dataset.iloc[:,0:17]y=dataset.iloc[:,17]print(x)print(y)
使用feature_selector进行,feature筛选。累积权重不同,可以影响最后结果输出的效果。
##将训练集切分为训练集和验证集
from sklearn.model_selection import train_test_split #导入样本划分的库x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=0) # 样本进行划分
机器学习的数据要分为两个部分:训练集、验证集。这句代码就是把数据进行分割。不过,一般都是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
2)机器学习常用算法:
eXtreme Gradient Boosting (XGBoost),
Adaptive Boosting(AdaBoost),
Decision Tree (DT),
Support vector machines (SVM),
Random Forest (RF)
Gradient Boosting Decision Tree (GBDT)
LogisticRegression(LR)
四、未完待续:
除了预测类的机器学习,还有结合深度学习的影像组学,难度更高,但真实世界中的应用场景更多,更有利于转化,可以参考:
https://www.madao33.com/post/7/
该教程文档不断更新,版本号越高,就是最新版,上面很多代码在运行中还有很多bug,希望更多同行进行交流,互相提供代码和教程,目前跟朋友一起合作了一篇文章,相关代码分享在ganbingliangyi (taoliang梁韬) (github.com)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。