王浩瑞
(陜西省寶雞市寶雞中學,陜西寶雞,721000)
眾所周知,醫(yī)生誤診、醫(yī)院掛號排長隊、癌癥患者發(fā)現(xiàn)疾病過晚等現(xiàn)象屢見不鮮。究其原因,一是由于醫(yī)生的主觀判斷、醫(yī)療條件很容易影響決策結(jié)果,最終可能導致診斷結(jié)果出現(xiàn)誤差;二是由于生活節(jié)奏的加快致各類疾病患者數(shù)量顯著增加,這就需要醫(yī)生花費更多時間來處理分析增加的數(shù)據(jù),導致醫(yī)療效率低下;三是一些疾病無癥狀或癥狀較輕,病人不能及時進行篩查和發(fā)現(xiàn),從而可能導致病情進一步惡化。在此背景下,基于機器學習的醫(yī)療輔助診斷系統(tǒng)成為云霓之望,該系統(tǒng)可以在極短時間內(nèi)對海量病人數(shù)據(jù)進行分析,對疾病進行預測。這樣不僅能夠提高醫(yī)療診斷的精度,而且能加快醫(yī)療決策的速度,減輕醫(yī)護人員的負擔,是對誤診、排長隊、治療晚等問題的有效解決方案。因此,本研究對我國目前醫(yī)療矛盾的解決以及社會效率的提高都具有十分積極的意義。
隨著醫(yī)療領域快速發(fā)展,傳統(tǒng)醫(yī)療的弊端不斷顯現(xiàn)。如今,“人工智能+醫(yī)療”的理念普遍被人們接受,由于前景廣闊,包括IBM、微軟在內(nèi)的互聯(lián)網(wǎng)巨頭以及銀行、保險公司等金融機構(gòu)正紛紛布局架構(gòu)醫(yī)療人工智能。比如,IBM Watson能夠在極短時間內(nèi)總結(jié)病例的調(diào)研結(jié)果,有助于醫(yī)生為單個癌癥病患規(guī)劃最高效的治療方案;Google的子公司Verily對生命科學初創(chuàng)公司Freenome進行投資,開發(fā)早期癌癥檢測技術;在3E·2018北京國際人工智能大會上,Airdoc在現(xiàn)場就能夠?qū)崟r幫助觀眾檢查疾病。 由此可見,醫(yī)療領域的智能化正一步步地向人們的生活邁進。
本研究將機器學習與醫(yī)療領域相結(jié)合,以python語言為主要編程工具進行數(shù)據(jù)分析。借助醫(yī)療大數(shù)據(jù)技術,該系統(tǒng)通過k近鄰算法對已知心臟疾病數(shù)據(jù)集學習概率模型,再通過人機交互的方式,收集受測人的輸入數(shù)據(jù)即各項心臟相關特征指標,并由學習到的模型對該輸入數(shù)據(jù)進行分析,從而預測受測人有無心臟疾病。該系統(tǒng)既可以幫助受測人及時判斷自己有無疾病,又可以輔助醫(yī)院醫(yī)生進行治療,極大地提高了醫(yī)療診治的效率和準確度。同時,隨著社會的進步,國家也越來越重視醫(yī)學領域的發(fā)展,相關領域數(shù)據(jù)集增加,這更加有利于機器學習算法進行建模,從而使預測準確率不斷提高。
機器學習是計算機以數(shù)據(jù)為基礎構(gòu)建概率模型,并運用模型對數(shù)據(jù)進行預測與分析的學科,是人工智能的核心,是使計算機智能化的根本途徑。本文利用機器學習的方法,從心臟病數(shù)據(jù)集出發(fā),提取該數(shù)據(jù)集中受測人的身體特征,借助k近鄰算法從而得出醫(yī)療輔助診斷模型,再通過該模型分析和預測新的受測人是否患有心臟疾病,是一個監(jiān)督學習的二分類問題。
監(jiān)督學習是機器學習的一種,它要求訓練集數(shù)據(jù)既包含樣本的特征,又包含樣本的標簽。即該訓練集表示為:
T ={(x1,y1),( x2,y2), L(xn,yn)}式 中 x∈x?Rn為 實例 的 特 征 向 量, yi∈ y = {c1,c2,L,ck}為 實 例 的 類 別,i=1,2,…,N.
監(jiān)督學習利用該訓練集樣本建立一個概率模型,再用已建立的模型對新的輸入信息進行分析和預測。機器學習的目標是使最后的模型的預測效果更好,即模型的泛化能力更好。
本文選用的數(shù)據(jù)集來自UCI Machine Learning Repository網(wǎng)站,數(shù)據(jù)集名稱為“Statlog (Heart) Data Set” ,它是從Cleveland Clinic Foundation收集到的心臟數(shù)據(jù)。該數(shù)據(jù)集包含270個樣本實例和13個最主要身體醫(yī)學特征,目標是預測受測人有無心臟疾病,標簽1表示該樣本沒有心臟病,2表示有心臟病。該數(shù)據(jù)集特征名及其解釋如表1所示。
表1 特征名及特征解釋
一般來說,機器學習算法受益于數(shù)據(jù)集的預處理,即把原數(shù)據(jù)規(guī)范化和整齊化。由于在線提供的數(shù)據(jù)集通常都有缺項、噪聲等的問題,故只有通過數(shù)據(jù)預處理,才能使數(shù)據(jù)挖掘更有意義。標準化和歸一化就是數(shù)據(jù)預處理時常用的手段。
1.3.1 標準化
數(shù)據(jù)集的標準化是許多機器學習分類器的共同要求。如果所有訓練樣本的某一特征的數(shù)據(jù)不符合標準正態(tài)分布,它們的預測性能可能會很差。標準化公式為:
其中X’為標準化后的數(shù)據(jù),mean表示某一特征所有數(shù)據(jù)的平均值,std表示該特征所有數(shù)據(jù)的標準差。
標準化后的結(jié)果使每列數(shù)據(jù)均值為0,方差為1,符合標準正態(tài)分布。使用preprocessing模塊中的scale函數(shù),可以直接將給定數(shù)據(jù)進行標準化。
1.3.2 歸一化
歸一化是將樣本數(shù)據(jù)縮放到某個區(qū)間的過程,使數(shù)據(jù)整齊,更有利于機器學習方法建模。歸一化公式為:
式中Xnorm為歸一化后的數(shù)據(jù),X為原始數(shù)據(jù),Xmax、Xmin分別為原始數(shù)據(jù)集的最大值和最小值。結(jié)果是可以將屬性縮放到區(qū)間[0 ,1]內(nèi),對原始數(shù)據(jù)的等比例縮放。
由于格式化、模塊化后的數(shù)據(jù)更有利于計算機機器學習算法的識別,因此輸入的新數(shù)據(jù)需要用Excel表格進行封裝,之后利用python編程語言里的pandas模塊導入即可。
利用k近鄰算法和心臟訓練數(shù)據(jù)集構(gòu)建出來的概率模型可對新的格式化后的數(shù)據(jù)的特征進行分析預測,即可得出新輸入樣本的標簽。
本文利用k近鄰算法進行機器學習建模和預測。k近鄰算法是機器學習中一個基本的分類和回歸算法。它的原理為:給定一個訓練數(shù)據(jù)集,對新的輸入實例,在訓練數(shù)據(jù)集中找到與該實例最鄰近的k個訓練實例,這k個實例的多數(shù)屬于某個類,就把該輸入實例分為這個類。
由上文可見,k近鄰算法具有三個基本要素,分別是:k值的選擇,距離度量和分類決策規(guī)則。
其中,k值的選擇十分重要,會對k近鄰模型產(chǎn)生較大影響。若k值較小,即使用較小的訓練實例鄰域預測,使預測結(jié)果對近鄰的實例點非常依賴,容易發(fā)生過擬合;若k值較大,即使用較大的訓練實例鄰域預測,使與輸入實例較遠的實例點對預測結(jié)果產(chǎn)生影響,容易發(fā)生欠擬合。兩種情況都會使最后的測試誤差較大,應在實驗中避免出現(xiàn),本文利用交叉驗證的方法來選出針對該醫(yī)療數(shù)據(jù)集的最理想的k值。
距離度量的作用是衡量兩個實例點之間的距離,用于判斷兩個點的鄰近程度。本文以歐式距離作為距離度量的方法,即兩個樣本點之間距離為:
分類決策規(guī)則是判斷實例類別的關鍵,本文選用多數(shù)表決的方式,即:
其中i=1,2,...,N;j=1,2,...,K。 Nk(x)表示涵蓋這k個點的x的鄰域,I為指示函數(shù),當 yi=cj時i為1,否則為0。
k近鄰模型為一個包含訓練數(shù)據(jù)集中所有訓練數(shù)據(jù)樣本點的特征空間。在本研究中,訓練集共有13個特征,構(gòu)造k近鄰模型即把該心臟數(shù)據(jù)集中的所有樣本代入到該13維特征空間中。
本文首先計算受測人心臟數(shù)據(jù)點與所有已知標簽類別的訓練集實例點之間的距離,再按照距離大小升序排序,接著選取與當前心臟數(shù)據(jù)點的距離最小的k個訓練實例點,最后把在這k個實例點里出現(xiàn)頻率最高的類別作為新受測人心臟數(shù)據(jù)點的類別。
圖1
本文利用交叉驗證的方法來衡量取不同k值時的心臟模型的質(zhì)量,最后取測試誤差最小的k值作為最終模型的k值。交叉驗證首先把選取的心臟數(shù)據(jù)集分成訓練集和測試集,訓練集用來訓練心臟病預測模型,測試集用來測試該模型的質(zhì)量,測試集上的準確率為驗證集中分類正確的樣本數(shù)與驗證集總樣本數(shù)的比值,直接決定模型的好壞。本文將訓練集與測試集按心臟數(shù)據(jù)集的70%與30%的比例劃分。
本研究整體流程如圖1所示。
該輔助診斷系統(tǒng)是以已知心臟醫(yī)療數(shù)據(jù)集為中心 ,通過k近鄰機器學習算法構(gòu)建概率模型,即心臟疾病測試評估模型。被測人可以在線將自己的身體信息輸入到該平臺,系統(tǒng)可自動將該輸入的特征信息進行格式化,即用Excel表格把信息封裝起來。然后將格式化后的數(shù)據(jù)輸入到已建立的心臟疾病評估模型中,后臺會對該數(shù)據(jù)進行模型分析,最后對被測人的標簽進行預測,即得到被測人是否有心臟病的結(jié)果。
該系統(tǒng)可以讓被測人及時知道自己的身體狀況,也可以輔助醫(yī)療人員對被測人有無心臟病進行預測分析,極大提高了醫(yī)療診斷的效率和準確度。
Python是一種計算機程序設計語言,由荷蘭人Guido van Rossum于1989年發(fā)明,它具有語法簡潔的特點 ,并且可以導入功能非常強大的包。本程序所使用的機器學習Sklearn包,是 Python 語言中一個高效的數(shù)據(jù)挖掘與分析的工具。
代碼的2至6行是利用import函數(shù)導入本文所需編程包,7-11行是把格式化后的受測人的身體特征信息導入到程序中并利用numpy包里的array函數(shù)轉(zhuǎn)化為二維數(shù)組;12-14行是訓練數(shù)據(jù)的預處理,操作分別為標準化和歸一化;15行是利用train_test_split函數(shù)進行交叉驗證,將原數(shù)據(jù)集按70%和30%的比例劃分訓練集和測試集;18-20行是利用sklearn包中的neighbors模塊對模型進行訓練和預測;22-25行的作用是計算所有k值情況下的準確率并保存在rate列表中;26-28行是選出最好的準確率與該準確率下的k值,最后得出適用于該心臟醫(yī)療數(shù)據(jù)集的最好的k近鄰機器學習模型。
圖2
代碼執(zhí)行結(jié)果如圖2所示。
因為該心臟病數(shù)據(jù)集的數(shù)據(jù)僅有270個樣本,所以執(zhí)行時的各k值情況下的準確率相差不大,最好的準確率為86%,在當前情況下這是比較合理且比較滿意的結(jié)果。
隨著近些年來人們對醫(yī)療的需求提高,傳統(tǒng)醫(yī)療逐漸難以滿足人們的需要,因此“人工智能+醫(yī)療”的新型醫(yī)療研究逐漸被人們所重視。本文從智能醫(yī)療的重要性出發(fā),分析了智能醫(yī)療的現(xiàn)狀。接著對機器學習的概念、本文使用的心臟數(shù)據(jù)集進行了簡明的介紹,進而引出適合該數(shù)據(jù)集的機器學習算法:k近鄰算法。之后詳細闡述了該算法的原理以及如何利用心臟數(shù)據(jù)集訓練模型、如何利用多個維度的特征對被測人是否患有心臟病進行預測等問題。最后對本項目所使用的代碼以及預測結(jié)果進行了詳細的介紹和分析。
文中詳細闡述了基于機器學習的人工智能醫(yī)療的重要性和優(yōu)點,但其也具有一定的局限性:一是計算機技術尚處于初步發(fā)展階段,并且醫(yī)療領域十分注重病患的隱私,因此我們所能得到的醫(yī)療數(shù)據(jù)集是極其有限的;二是在線公開的醫(yī)學數(shù)據(jù)集中的數(shù)據(jù)不夠一致,格式不夠標準,不能被機器學習工作所直接使用。上述兩點都會導致通過機器學習建模的疾病預測出現(xiàn)誤差,因此人工智能醫(yī)療還處于初步發(fā)展時期,有很大的提升空間。針對這些問題,作者相信隨著社會的進步以及國家的大力支持,借助未來不斷擴充著的標準化數(shù)據(jù)集,人工智能醫(yī)療會一步步登上歷史的舞臺。