前沿
2017年,國(guó)務(wù)院印發(fā)《新一代人工智能發(fā)展規(guī)劃》,“人工智能 ”寫(xiě)入2024年政府工作報(bào)告。在醫(yī)學(xué)領(lǐng)域,人工智能已經(jīng)在影像、內(nèi)鏡圖像識(shí)別,電子病歷邏輯判斷等有著大量應(yīng)用,也寫(xiě)入專(zhuān)家共識(shí),例如《 人工智能在肺結(jié)節(jié)的應(yīng)用專(zhuān)家共識(shí)(2022年)》。
近幾年逐步提倡科研與轉(zhuǎn)化相結(jié)合,科研要服務(wù)于應(yīng)用。醫(yī)學(xué)人工智能的研究就可以很好的實(shí)際應(yīng)用于臨床工作。《Nature》《Science》等學(xué)術(shù)期刊均有專(zhuān)題報(bào)道,課題方面也是熱門(mén)的立項(xiàng)方向。
一、AI醫(yī)學(xué)優(yōu)勢(shì):
(一)適合非高校的醫(yī)院的科研:
1、絕對(duì)大部分非高校直屬的醫(yī)院,少有獨(dú)立的生物學(xué)實(shí)驗(yàn)室,生物學(xué)實(shí)驗(yàn)室的維護(hù)成本極高。而人工智能醫(yī)學(xué)研究,算是一種輕資產(chǎn),最為核心的研究環(huán)節(jié)就是算法的構(gòu)建、算力的運(yùn)用。固然,有專(zhuān)門(mén)的軟件和公司提供服務(wù),也可以采取醫(yī)院自建的模式,投入最大的是智力和精力。在經(jīng)費(fèi)上投入不算多,因?yàn)槭怯糜诳茖W(xué)研究,對(duì)于信息安全等級(jí)要求不高,也沒(méi)有多少維護(hù)費(fèi)用。
2、跟蛋白組學(xué)、基因組學(xué)研究類(lèi)似,人工智能醫(yī)學(xué)的研究,其算法是對(duì)于臨床各個(gè)科室是通用的??蓱?yīng)用于影像組學(xué)的核心算法也可以用于構(gòu)建彩超圖像的模型。隨機(jī)森林、決策樹(shù)不僅可應(yīng)用于預(yù)測(cè)心肌梗死的預(yù)后,也可以應(yīng)用于護(hù)理的跌倒風(fēng)險(xiǎn)評(píng)估,甚至可擴(kuò)展到醫(yī)院行政管理。
3、目前,大部分醫(yī)院均實(shí)現(xiàn)電子病歷,產(chǎn)生海量的數(shù)據(jù)。而人工智能醫(yī)學(xué)的基礎(chǔ)在于數(shù)據(jù)。研究的設(shè)計(jì)簡(jiǎn)單地歸納為兩個(gè)部分,① 臨床數(shù)據(jù)采集和需求、② 模型構(gòu)建和運(yùn)行。臨床數(shù)據(jù)收集、臨床需求的確定,這個(gè)對(duì)于絕對(duì)部分醫(yī)院來(lái)說(shuō),是完全沒(méi)有問(wèn)題的。而其中問(wèn)題最大的是模型構(gòu)建和運(yùn)行。而這塊跟高校的計(jì)算機(jī)實(shí)驗(yàn)室恰恰相反,他們?nèi)鄙俚氖桥R床數(shù)據(jù)和需求。
4、做好人工智能醫(yī)學(xué)研究,可以有幾個(gè)方式。與高校的計(jì)算機(jī)實(shí)驗(yàn)室合作、第三方集成平臺(tái)。但經(jīng)過(guò)實(shí)踐,再加上絕大部分代碼均可以在github上找到。以及論文的發(fā)表需要調(diào)參和提供原始代碼,醫(yī)院完全可以獨(dú)立開(kāi)發(fā)算法和模型。構(gòu)建自己的人工智能醫(yī)學(xué)實(shí)驗(yàn)室。
(二)軟件編程技能培養(yǎng):
目前人工智能的主流編程語(yǔ)言為python。近幾年P(guān)ython流行起來(lái),除了在人工智能領(lǐng)域的應(yīng)用,它在資料收集、數(shù)據(jù)分析方面實(shí)在強(qiáng)勢(shì)。
只需要幾行簡(jiǎn)短的代碼,它就可以:
● 網(wǎng)絡(luò)爬蟲(chóng),一鍵爬取全網(wǎng)公開(kāi)資料
● 對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行數(shù)據(jù)分析,讓觀點(diǎn)更科學(xué)嚴(yán)謹(jǐn)
● 批量處理上百個(gè)Excel、Word、PDF文件
● 生成可視化圖表,成果展示更專(zhuān)業(yè)……
工欲善其事,必先利其器。大數(shù)據(jù)時(shí)代,科研人想要如魚(yú)得水,學(xué)會(huì)Python應(yīng)當(dāng)提上日程。
當(dāng)前,醫(yī)院為了質(zhì)控控制和流程改造。院內(nèi)上線了各類(lèi)系統(tǒng),并且還在不斷增加,醫(yī)療信息化建設(shè)是必然趨勢(shì)。
對(duì)信息系統(tǒng)使用和優(yōu)化,單純依賴信息科會(huì)導(dǎo)致迭代周期變慢。熟悉和了解編程原理,這對(duì)使用院內(nèi)信息系統(tǒng)有極大的幫助。更好服務(wù)于臨床工作。
(三)研究方向:
醫(yī)學(xué)人工智能從應(yīng)用場(chǎng)景角度,可以有以下領(lǐng)域:
① 機(jī)器學(xué)習(xí)(深度學(xué)習(xí))決策系統(tǒng):
基于一些復(fù)雜數(shù)據(jù)的結(jié)果預(yù)測(cè)。例如,手術(shù)結(jié)局預(yù)測(cè),死亡風(fēng)險(xiǎn)預(yù)測(cè)。
以手術(shù)成敗,死亡作為target,臨床診療過(guò)程中的所有因素做為Feature。流程為① 環(huán)境搭建 ② 數(shù)據(jù)預(yù)處理 ③ 選擇算法 ④ 算法訓(xùn)練 ⑤ 生成模型 ⑥ 模型測(cè)試(結(jié)果輸出)。這其中“選擇算法”可以選擇多種算法,對(duì)不同算法的結(jié)果進(jìn)行比較;結(jié)果預(yù)測(cè)一般涉及機(jī)器學(xué)習(xí)(machine learning)。
“結(jié)果輸出”的指標(biāo):precision,ROC,F(xiàn)1, recall。
② 視覺(jué)識(shí)別(圖像識(shí)別):
屬于無(wú)監(jiān)督學(xué)習(xí)。對(duì)醫(yī)療圖像進(jìn)行標(biāo)簽,主要涉及深度學(xué)習(xí)(deep learning)。就發(fā)表論文的成功概率來(lái)說(shuō),圖像識(shí)別更容易發(fā)表論文。
③ 自然語(yǔ)言處理:
可用于對(duì)病歷文本的數(shù)據(jù)分析和處理。
④ 語(yǔ)音處理:
適用于臨床問(wèn)診和溝通。
(四)可投稿期刊列表:
1、Ann Transl Med
2、Math Biosci Eng
3、 Sci Rep
4、artificial intelligence in medicine(IF=5.3)
5、Journal of Digital Health
二、零基礎(chǔ)入門(mén)步驟:
(一)名詞與關(guān)系:
1.名詞解釋?zhuān)?/span>
人工智能:人工智能(Artificial Intelligence),英文縮寫(xiě)為AI。它是研究、開(kāi)發(fā)用于模擬、延伸和擴(kuò)展人工智能的理論、方法、技術(shù)及應(yīng)用系統(tǒng)的一門(mén)新的技術(shù)科學(xué)。
人工智能是計(jì)算機(jī)科學(xué)的一個(gè)分支,它企圖了解智能的實(shí)質(zhì),并生產(chǎn)出一種新的能與人類(lèi)智能相似的方式做出反應(yīng)的智能機(jī)器,該領(lǐng)域的研究包括機(jī)器人、語(yǔ)言識(shí)別、圖像識(shí)別、自然語(yǔ)言處理和專(zhuān)家系統(tǒng)等。
機(jī)器學(xué)習(xí):機(jī)器學(xué)習(xí)(ML, Machine Learning)是一門(mén)多學(xué)科交叉專(zhuān)業(yè),涵蓋概率論知識(shí),統(tǒng)計(jì)學(xué)知識(shí),近似理論知識(shí)和復(fù)雜算法知識(shí),使用計(jì)算機(jī)作為工具并致力于真實(shí)實(shí)時(shí)的模擬人類(lèi)學(xué)習(xí)方式,并將現(xiàn)有內(nèi)容進(jìn)行知識(shí)結(jié)構(gòu)劃分來(lái)有效提高學(xué)習(xí)效率。
機(jī)器學(xué)習(xí)還有下面幾種定義:
(1)機(jī)器學(xué)習(xí)是一門(mén)人工智能的科學(xué),該領(lǐng)域的主要研究對(duì)象是人工智能,特別是如何在經(jīng)驗(yàn)學(xué)習(xí)中改善具體算法的性能。
(2)機(jī)器學(xué)習(xí)是對(duì)能通過(guò)經(jīng)驗(yàn)自動(dòng)改進(jìn)的計(jì)算機(jī)算法的研究。
(3)機(jī)器學(xué)習(xí)是用數(shù)據(jù)或以往的經(jīng)驗(yàn),以此優(yōu)化計(jì)算機(jī)程序的性能標(biāo)準(zhǔn)。
深度學(xué)習(xí):深度學(xué)習(xí)(DL, Deep Learning)是機(jī)器學(xué)習(xí)(ML, Machine Learning)領(lǐng)域中一個(gè)新的研究方向,它被引入機(jī)器學(xué)習(xí)使其更接近于最初的目標(biāo)——人工智能(AI, Artificial Intelligence)。
深度學(xué)習(xí)是學(xué)習(xí)樣本數(shù)據(jù)的內(nèi)在規(guī)律和表示層次,這些學(xué)習(xí)過(guò)程中獲得的信息對(duì)諸如文字,圖像和聲音等數(shù)據(jù)的解釋有很大的幫助。它的最終目標(biāo)是讓機(jī)器能夠像人一樣具有分析學(xué)習(xí)能力,能夠識(shí)別文字、圖像和聲音等數(shù)據(jù)。深度學(xué)習(xí)是一個(gè)復(fù)雜的機(jī)器學(xué)習(xí)算法,在語(yǔ)音和圖像識(shí)別方面取得的效果,遠(yuǎn)遠(yuǎn)超過(guò)先前相關(guān)技術(shù)。
Python:一種流行的計(jì)算機(jī)編程語(yǔ)言。
2. 名詞關(guān)系:
人工智能是一個(gè)比較大的概念,更多是面向公眾。機(jī)器學(xué)習(xí)是人工智能實(shí)現(xiàn)的一個(gè)具體方法,而深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)分支,難度更高。而目前實(shí)現(xiàn)機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的編程,主流還是應(yīng)用python語(yǔ)言。有很多也使用R語(yǔ)言來(lái)做機(jī)器學(xué)習(xí)的研究。
(二)工作環(huán)境的搭建:
安裝:目前主流推薦Anaconda。其具體步驟可以按照知乎的這個(gè)教程:
① Anaconda安裝
https://zhuanlan.zhihu.com/p/339690068
② Anaconda安裝
https://zhuanlan.zhihu.com/p/432043531
說(shuō)的是Anaconda安裝好后,就包含了python了。不過(guò),我也沒(méi)理清之間的關(guān)系,保險(xiǎn)一點(diǎn)可以把Python也安裝了。
Python的安裝:
https://zhuanlan.zhihu.com/p/363708165
費(fèi)用:以上軟件商用是要收費(fèi)的,不過(guò),安裝的時(shí)候選擇個(gè)人使用是免費(fèi)的。
(三)編輯器選擇:
編輯器就是我們編寫(xiě)代碼的地方,安裝好Anaconda會(huì)有多種編輯器。具體哪一種更好,我也正在摸索。
(四)基礎(chǔ)知識(shí):
Python也是一種編程語(yǔ)言,編程語(yǔ)言都有一些規(guī)則。比如,什么是字符串,引號(hào)是什么意思,怎么輸出結(jié)果。由于Python應(yīng)用于各個(gè)領(lǐng)域,厲害的Python大神都是各大公司搶著要的,我們跨界過(guò)去也不可能那么多精力,就主要學(xué)習(xí)最基本的框架和主要用于醫(yī)學(xué)領(lǐng)域的。這里推薦一個(gè)B站教學(xué)視頻:
https://www.bilibili.com/video/BV1rg411G7mp\”>
此外,也可以看官方文檔:
https://docs.python.org/3/tutorial/modules.html#importing-from-a-package
1、Python內(nèi)部環(huán)境部署:
1.1 python庫(kù)的安裝:
python庫(kù)的安裝有四個(gè)方法,主要分為在線安裝和離線安裝。
在線安裝:使用Anaconda prompt 界面 > pip install XXX
離線安裝:
1)在Python Extension Packages for Windows – Christoph Gohlke (uci.edu) 下載輪子>使用Anaconda prompt 界面 > cd 工作目錄 >pip install 輪子路徑 輪子名稱(chēng)
2)github上下載源碼,對(duì)于醫(yī)學(xué)人工智能,最需要用到feature-selector的庫(kù), 而這個(gè)庫(kù)只有g(shù)ithub上有。
WillKoehrsen/feature-selector: Feature selector is a tool for dimensionality reduction of machine learning datasets (github.com)github.com/WillKoehrsen/feature-selector
我在這個(gè)問(wèn)題上卡了很久。下好源碼后,解壓壓縮包。使用Anaconda prompt 界面 > cd 工作目錄 >python setup.py install
1.2 機(jī)器學(xué)習(xí)環(huán)境部署標(biāo)準(zhǔn)三聯(lián):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
常用語(yǔ)法和邏輯:
1)對(duì)于Python而言,冒號(hào)和縮進(jìn)是一種語(yǔ)法。它會(huì)幫助Python區(qū)分代碼之間的層次,理解條件執(zhí)行的邏輯及先后順序?!咀ⅲ嚎s進(jìn)是四個(gè)空格或一個(gè)Tab鍵】
2)注意大小寫(xiě):name 'Fs' is not defined,F(xiàn)s,沒(méi)有被定義。最后發(fā)現(xiàn)是大小寫(xiě)錯(cuò)誤。前后代碼的大小寫(xiě)一定要一致,否則會(huì)報(bào)錯(cuò)。
3)使用jupter的時(shí)候,由于賦值的問(wèn)題,需要重頭開(kāi)始運(yùn)行。如果,在某個(gè)代碼段運(yùn)行報(bào)錯(cuò),有可能出現(xiàn)賦值錯(cuò)誤。
1.3 ROC曲線的制作:
ROC曲線的全稱(chēng)是“受試者工作特性”曲線(Receiver Operating Characteristic),源于二戰(zhàn)中用于敵機(jī)檢測(cè)的雷達(dá)信號(hào)分析技術(shù)。是反映敏感性和特異性的綜合指標(biāo)。它通過(guò)將連續(xù)變量設(shè)定出多個(gè)不同的臨界值,從而計(jì)算出一系列敏感性和特異性,再以敏感性為縱坐標(biāo)、(1-特異性)為橫坐標(biāo)繪制成曲線,曲線下面積越大,判別的準(zhǔn)確性越高。在ROC曲線上,最靠近坐標(biāo)圖左上方的點(diǎn)為敏感性和特異性均較高的臨界值。
## 輸出高清圖像
%config InlineBackend.figure_format = 'retina'
%matplotlib inline
ROC曲線做出來(lái)是一個(gè)圖像,所以,需要matplotlib這個(gè)庫(kù),這個(gè)庫(kù)是python里面非常有用的庫(kù)。還可以做直方圖、散點(diǎn)圖、折線圖。也就不必另外用統(tǒng)計(jì)圖軟件了。
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 就是我們用來(lái)數(shù)據(jù)歸回/分類(lèi)評(píng)估的核心庫(kù)。這個(gè)import*,后面這個(gè)*要注意,是包含所有模塊,但是使用有爭(zhēng)議,暫時(shí)也沒(méi)有找到其他代碼,先用著吧。
2、數(shù)據(jù)處理:
2.1、數(shù)據(jù)格式與提?。?/span>
我們就可以數(shù)據(jù)預(yù)處理。Python是可以支持CSV、Excel的數(shù)據(jù)庫(kù)格式,CSV可以直接從醫(yī)院的HIS系統(tǒng)導(dǎo)出,如果對(duì)于海量數(shù)據(jù)還是要選擇這種格式。用EXCEL比較適合大部分醫(yī)療從業(yè)者。
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/科研數(shù)據(jù)//腎內(nèi)科/DKD數(shù)據(jù)庫(kù)給韜哥5.xlsx'dataset= pd.read_excel(a,sheet_name = 'Sheet1')dataset.head() #顯示前幾排數(shù)據(jù)x=dataset.iloc[:,0:49] # iloc 定位到列y=dataset.iloc[:,49]print(x)print(y)
2.2數(shù)據(jù)結(jié)構(gòu):
數(shù)組(Array)是由相同類(lèi)型的元素(element)集合組成的固定長(zhǎng)度(Size)的一種數(shù)據(jù)結(jié)構(gòu)。
2.3 數(shù)據(jù)處理:
這里用了泰坦尼克號(hào)的數(shù)據(jù)案例:
train = pd.read_csv("data/Titanic處理后數(shù)據(jù).csv")
# 將字符串類(lèi)型的分類(lèi)變量進(jìn)行重新編碼
label = LabelEncoder()
train["Name"] = label.fit_transform(train["Name"])
train["Embarked"] = label.fit_transform(train["Embarked"])
train["Sex"] = label.fit_transform(train["Sex"])
Python的符號(hào)格式有三種:字符串、整數(shù)、浮點(diǎn)數(shù),那么,像臨床常用的基線數(shù)據(jù),“姓名”“性別”就需要轉(zhuǎn)換為Python可識(shí)別的數(shù)據(jù)。以上代碼就是轉(zhuǎn)換用。
3、模型構(gòu)建:
# 確定目標(biāo)變量和自變量,目標(biāo)變量:我們要研究的目標(biāo)。例如,我如果想研究息肉切除后出現(xiàn)風(fēng)險(xiǎn),就可以定義為:
Target= [“bleed”]
# 定義模型的自變量名
train_x = ["Pclass", "Name", "Sex", "Age", "SibSp", "Parch","Fare","Embarked"]
也可以表述為自己提取對(duì)應(yīng)的數(shù)據(jù):
x=dataset.iloc[:,0:17]y=dataset.iloc[:,17]print(x)print(y)
使用feature_selector進(jìn)行,feature篩選。累積權(quán)重不同,可以影響最后結(jié)果輸出的效果。
##將訓(xùn)練集切分為訓(xùn)練集和驗(yàn)證集
from sklearn.model_selection import train_test_split #導(dǎo)入樣本劃分的庫(kù)x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=0) # 樣本進(jìn)行劃分
機(jī)器學(xué)習(xí)的數(shù)據(jù)要分為兩個(gè)部分:訓(xùn)練集、驗(yàn)證集。這句代碼就是把數(shù)據(jù)進(jìn)行分割。不過(guò),一般都是2:8分。20%用來(lái)驗(yàn)證。
下面的程序中使用RandomForestClassifier()函數(shù)建立了包含100個(gè)決策樹(shù),最大深度為5的隨機(jī)森林模型,針對(duì)訓(xùn)練好的模型并計(jì)算出其它訓(xùn)練集和驗(yàn)證集上的預(yù)測(cè)精度。
## 使用隨機(jī)森林對(duì)泰坦尼克數(shù)據(jù)進(jìn)行分類(lèi)
rfc1 = RandomForestClassifier(n_estimators = 100, # 樹(shù)的數(shù)量
max_depth= 5, # 子樹(shù)最大深度
oob_score=True,
class_weight = "balanced",
random_state=1)
rfc1.fit(X_train,y_train)
4、結(jié)果輸出:
## 輸出其在訓(xùn)練數(shù)據(jù)和驗(yàn)證數(shù)據(jù)集上的預(yù)測(cè)精度
rfc1_lab = rfc1.predict(X_train)
rfc1_pre = rfc1.predict(X_val)
print("隨機(jī)森林的OOB score:",rfc1.oob_score_)
print("訓(xùn)練數(shù)據(jù)集上的精度:",accuracy_score(y_train,rfc1_lab))
print("驗(yàn)證數(shù)據(jù)集上的精度:",accuracy_score(y_val,rfc1_pre))
但是,為了讓論文更好發(fā)表,最好有圖片。
## 可視化在驗(yàn)證集上的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) # 計(jì)算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("隨機(jī)森林ROC曲線")
plt.text(0.15,0.9,"AUC = " str(round(aucval,4)))
plt.show()
最后得出這么一個(gè)ROC結(jié)果。
三、常用python算法庫(kù):
1)Scikitlearn:是一個(gè)常用的算法庫(kù):相關(guān)代碼可參考:
https://mp.weixin.qq.com/s/c-Sl7n_ceawz6AHm5Mtw0w
2)機(jī)器學(xué)習(xí)常用算法:
eXtreme Gradient Boosting (XGBoost),
Adaptive Boosting(AdaBoost),
Decision Tree (DT),
Support vector machines (SVM),
Random Forest (RF)
Gradient Boosting Decision Tree (GBDT)
LogisticRegression(LR)
四、未完待續(xù):
除了預(yù)測(cè)類(lèi)的機(jī)器學(xué)習(xí),還有結(jié)合深度學(xué)習(xí)的影像組學(xué),難度更高,但真實(shí)世界中的應(yīng)用場(chǎng)景更多,更有利于轉(zhuǎn)化,可以參考:
https://www.madao33.com/post/7/
該教程文檔不斷更新,版本號(hào)越高,就是最新版,上面很多代碼在運(yùn)行中還有很多bug,希望更多同行進(jìn)行交流,互相提供代碼和教程,目前跟朋友一起合作了一篇文章,相關(guān)代碼分享在ganbingliangyi (taoliang梁韜) (github.com)
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。