文
前沿
随着人工智能阿尔法狗的新闻,人工智能进入大众视野,并在各个领域的研究呈现井喷趋势。
人工智能研究核心在计算机科学,但是,应用层面还是分布于各个行业。人工智能医学研究,在》发表。近几年的国家级基金,在该领域立项课题也是翻倍增加。究其原因,中yang曾发文发展人工智能;
一、为什么选择AI医学:
(一)适合非高校的医院的科研:
1、绝对大部分非高校直属的医院,少有独立的生物学实验室,生物学实验室的维护成本极高。而人工智能医学研究,算是一种轻资产,最为核心的研究环节就是算法的构建、算力的运用。固然,有专门的软件和公司提供服务,也可以采取医院自建的模式,投入最大的是智力和精力。在经费上投入不算多,因为是用于科学研究,对于信息安全等级要求不高,也没有多少维护费用。
2、跟蛋白组学、基因组学研究类似,人工智能医学的研究,其算法是对于临床各个科室是通用的。可应用于影像组学的核心算法也可以用于构建彩超图像的模型。随机森林、决策树不仅可应用于预测心肌梗死的预后,也可以应用于护理的跌倒风险评估,甚至可扩展到医院行政管理。
(二)研究方向:
1、人工智能医学科研,也是一个较大的范围,其研究的设计简单的归纳为两个部分,
2、临床和计算机实验室合作是最完美的方式,但是,合作也存在利益协商等多方面问题。所以,最简单还是选择自己构建模型。
3、构建模型有使用集成平台(腾讯云AI),利用python构建。腾讯云AI,操作简单,集成了多种算法,仅需要提供数据即可。但是,在操作过程中发现。由于平台单一,缺乏更为详细的教程。而python由于应用于各个领域,网上已经公开各种教程和解决方案。
4、利用python构建机器学习算法平台:目前可用于临床科研的机器学习(人工智能),主要有多个方向,而这其中对于医院最常用的研究方向是① 疾病预测,② 图像识别,图像识别这块需要用到无监督学习,而且,图像预处理方面门槛较高。对于,没有编程基础的医院医生(护士),比较亲民一点还是疾病预测。

二、零基础入门步骤:
(一)工作环境的搭建:
安装:目前主流推荐
① 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?from=search&seid=4851026855846953069&spm_id_from=333.337.0.0
此外,也可以看官方文档:
https://docs.python.org/3/tutorial/modules.html#importing-from-a-package
(四)疾病预测:
机器学习的疾病预测的模型构建:受试者工作特征曲线
1、Python内部环境部署:
机器学习环境部署标准三联:
importas
importas
importas
1.2 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 *
这其中,
2、数据预处理:
我们就可以数据预处理。Python是可以支持CSV的数据库格式,这种格式可以直接从医院的HIS系统导出,如果对于海量数据还是要选择这种格式。此外,Python是支持Excel的。用EXCEL可以自己在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 pandas as pd
filePath_01 = 'D:\我的文件\桌面内容\使用python读取Excel的路径\表格1.xlsx'
df1 = pd.read_excel(filePath_01,sheet_name = 'Sheet1')
这里用了泰坦尼克号的数据案例:
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"]
目标变量:我们要研究的目标。例如,我如果想研究息肉切除后出现风险
Target= [“bleed”]
## 定义模型的自变量名
train_x = ["Pclass", "Name", "Sex", "Age", "SibSp", "Parch","Fare","Embarked"]
这一句也非常重要,是我们临床研究基线特征。
##将训练集切分为训练集和验证集
X_train,X_val,y_train,y_val = train_test_split(train[train_x], train[Target],
test_size = 0.25,random_state = 1)
机器学习的数据要分为两个部分:训练集、验证集。这句代码就是把数据进行分割。不过,一般都是
下面的程序中使用
## 使用随机森林对泰坦尼克数据进行分类
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()
最后就应该得出这么一个
常用
1)Scikitlearn:是一个常用的算法库:相关代码可参考:
四、未完待续:
上面例子的(随机森林)机器学习是人工智能应用领域比较简单的模块,要发更高因子的文章和中课题,还是要去深度学习,无监督学习、影像(超声)组学。不过这块难度要高很多,可以参考:https://www.madao33.com/post/7/
这块国外也起步不久,很多高质量文章都是国内外互相引用。但是,万事开头难,只有走第一步,才有第二步。该教程文档不断更新,版本号越高,就是最新版,上面很多代码在运行中还有很多