黃 旭, 賀 松, 席歡歡, 張 碩, 張 慧
(1 貴州大學 大數據與信息工程學院, 貴陽 550025; 2 貴州大學 醫學院, 貴陽 550025)
隨著計算機技術廣泛應用于醫療領域,醫院信息化建設得到快速發展。醫院信息系統中存儲了大量的數據資源,運用數據挖掘技術可以有效的分析、整合和利用這些數據,以達到輔助診療的目的。利用數據挖掘技術對疾病風險預測,對疾病的管理、預防、干預等有著重要意義。
慢性病非傳染性疾病通常具有發病潛伏期長、病因復雜、反復發作、難以徹底治愈的特點,導致的負擔占總疾病負擔的70%以上,成為制約健康預期,壽命提高的重要因素[1]。因此,在慢性病還沒有顯現時,就應當做好疾病的預測,提前發現,及時處理,將疾病的影響降到最低。利用數據挖掘技術,找出慢性病發生直接或者間接的危險因素,就能夠通過監測這些因素,及時采取預防措施,從而降低發病率。
集成學習本質上是通過學習并結合多個弱分類器來獲得比單一分類器優越的泛化性能[2]。RF、GBDT和Xgboost的弱學習器都是樹模型,利用多棵決策樹對樣本數據訓練、分類和預測。在對數據分類時,給出各特征的重要性得分,評價各特征在分類中的作用。
隨機森林(Ramdom Forest,RF)是一種基于Bagging算法改進的模型,做分類時,各弱分類器之間無強依賴關系,相互獨立,每一個弱分類器都有一個分類結果,最后根據森林內決策樹投票,按照少數服從多數的原則,對最終結果進行判定。隨機森林具有二個特點:數據隨機和特征隨機。數據隨機指的是對訓練集有放回的采樣,這樣不同的樹用到的訓練集就會有所差異;特征隨機指的是每次從所有特征中隨機選擇特征子集進行劃分,可以增強數據的適應能力,優化高維特征的訓練速度。
梯度提升決策樹(Gradient Boosting Decision TREE,GBDT)是一種將弱學習器限定為分類回歸樹(CART)模型的前向分布算法,是boosting算法中的一種,由多棵決策樹組成,每一棵決策樹模型的建立是為了不斷學習之前樹的結果,擬合殘差,最后將所有決策樹的預測值結合起來得到最終答案。GBDT可處理離散或連續型數據,進行少量參數調優,可以達到很好的預測效果,具有較快的運算速度和較強的泛化能力。
Xgboost(eXtreme Gradient Boosting)也稱為極端梯度提升算法,是在GBDT基礎上的改進,其特點是模型能自動利用 CPU 進行多線程并行計算,提高運算速度,并且對損失函數進行泰勒公式二階展開,使得預測精度更高。在損失函數后面增加正則項,可以約束損失函數的下降和模型整體的復雜度[3]。Xgboost的目標函數Obj為式(1):
(1)

網格搜索參數尋優法是一種最基本的參數優化算法。其核心思想是利用窮舉搜索,遍歷設定參數范圍內所有的值,并以驗證系統中的評分結果作為指標,得到最優參數。該算法是對參數的每一組情況進行試算,因此,當網格劃分的比較密集時,每多一個參數,計算量就會呈幾何倍增張,網格搜索尋優法就會非常耗時。
隨機搜索區別于網格搜索的暴力搜索方式,采用隨機在參數空間中采樣的方式,只要隨機次數夠多,總能找到最優或者近優參數,盡管每次隨機結果不一致,但大大提高了高維參數的尋優速度。
神經網絡由輸入層、隱藏層和輸出層構成,如圖1所示。隱藏層的層數是任意的,夾在輸入層和輸出層之間,每層由神經元組成,輸入層由訓練集的實例特征向量傳入,數據集有幾個特征輸入層就有幾個神經元,本文對3種疾病進行二分類,所以輸出層是3個神經元。對于每一個神經元模型,當前神經元的輸出yj都與上一層神經元xi有式(2)的關系:
(2)
其中,Wij為神經元j與上一層神經元i的權重;θj為神經元的偏向;f為激活函數,引入激活函數增強了神經網絡的表達能力。
Keras是一個高層神經網絡API,能夠使用Tensorflow和Theano任一平臺作為后端,快速完成深度學習的開發。用戶的體驗始終是Keras考慮的首要內容,具有易使用、可抽象、兼容性和靈活性的特點[4]。Keras具有許多模塊,網絡層、損失函數、優化器、參數初始化、激活函數、正則化方法都是獨立的模塊,可以使用這些模塊來構建自己的模型,大大加快了建模速度[5]。

圖1 神經網絡
本文基于訓練模型分類性能為標準,以特征重要性排序為主的包裹式選取[6]。
使用前面介紹的3種分類算法(參數為默認值)對幾種慢性病建模,對比得到一個準確率較高的算法,重新對幾種慢性病建模(使用隨機搜索進行參數調優),最后將每種慢性病排名前10的特征選擇出來。
本研究采用的是UCI機器學習存儲庫:Chronic_Kidney_Disease數據集,選擇其中高血壓Htn、糖尿病Dm和冠狀動脈疾病Cad三條屬性做分類研究,將“?”做空值處理,將二分類屬性做0和1處理,每條屬性的均值填入空值處,刪掉3種疾病屬性中原含有空值的樣本,得到一個397×25的數據集。
采用Python語言建模,將數據集按照7:3的比例劃分, 70%作為訓練數據來訓練模型;30%作為測試數據,用來檢測模型的性能。使用機器學習庫sklearn中的RF、GBDT和Xgboost3種分類算法,不對各算法調參下建模。
使用準確率、精確率(查準率)、召回率(查全率)、F1值作為評價標準對分類器模型進行性能評價,由表1~表3可知,Xgboost在3種疾病上的預測準確率最高,并降低了誤診率和漏診率。
GridSearchCV(網格搜索)和Random-izedSearchCV(隨機搜索)都是sklearn包中自動調參的方法,系統地遍歷多種參數組合,通過交叉驗證確定最佳效果參數。這里選擇尋優速度更好的隨機搜索法。
Xgboost中有6項主要參數,不同參數有不同的功能,這些參數設定是否合理,對于模型的好壞有重要影響[7]。選擇的6項參數以及搜索范圍如表4所示,以“F1”為準確度評價標準,隨機搜索次數n_iter設為1000。由于隨機搜索的特性,記錄10次調參結果,取最優的結果,見表4、表5。

表1 Htn各分類器性能比較

表2 Dm各分類器性能比較

表3 Cad各分類器性能比較

表4 Xgboost最佳參數及調參范圍

表5 Xgboost調參性能
使用xgboost模塊中plot_importance函數對特征進行重要性排序,使用特征在所有樹中被用作分割樣本的特征的次數“weight”作為特征重要程度的判斷指標,留下排名前10的特征。得到3種慢性疾病的主要危險因素,如圖2~圖4所示。

圖2 Htn特征重要性

圖3 Dm特征重要性

圖4 Dm特征重要性
對3種慢性疾病的主要危險因素做并集處理,得到Bu血液尿素、Bgr血糖、Age年齡、Pcv紅細胞壓積、Sc血清肌酐、Bp血壓、Rbcc紅細胞計數、Sod鈉、Hemo血紅蛋白、Wbcc白細胞計數、Su糖、Pot鉀、Appet胃口,共13種主要危險因素,其中6項3種疾病共同擁有;5項2種疾病共同擁有,只有兩項是單獨擁有,因此慢性病在預測時不好判斷,將醫生多年的診斷經驗模型化,利用限特征進行疾病預測。
一種疾病危險因素可能是多種疾病的判斷標準。因此,采用相同危險因素對多種疾病同時進行風險預測,用問題轉化的方法將多疾病風險預測問題轉化為多標簽分類問題。
問題轉化方法中Binary Relevance(BR)和Label-Powerset(LP)是兩種具有代表性的方法[8]。BR方法是將多標簽轉化為多個相互獨立的單標簽二分類問題;LP方法是將多個標簽轉化為多分類單標簽問題,3個標簽就有23個類。本文選擇神經網絡作為基礎算法,利用深度學習框架Keras建立神經網絡模型,選擇損失函數binary cross entropy和categorical cross entropy分別對應問題轉化中的BR和LP方法。
神經網絡采用序貫模型。輸入層有13個神經元;經過多次試驗,隱藏層設置為4,神經元都為10,后面3層引入Dropout和L2正則化來防止模型過擬合,激活函數選擇使用非線性函數ReLU函數。ReLU函數是分段線性函數,在梯度下降算法運算中擁有較好的性能;輸出層,BR方法神經元設置為3,配合使用sigmoid函數作為激活函數,LP方法神經元設置為8,配合使用softmax函數作為激活函數。對于已有數據集標簽,BR方法可直接使用;對于LP方法,需要對3個標簽組合,再將二進制數轉化為10進制數,最后進行onehot編碼。
將數據按8:2劃分,80%用于網絡訓練,20%用于精度測試,將數據歸一化處理,避免數值量級差異引起權值過大或過小,并提升了運算速度。優化方法選擇了一種自適應梯度下降方法Adam,與其他優化算法相比,其收斂速度較快,學習效果更為有效;二種方法都以acc作為度量標準。經過多次實驗,模型訓練的輪數epochs設置為100,指定權重更新的每個批次所使用實例的個數為3。
使用evaluation函數來評估模型的準確率,由訓練返回值history作acc-loss曲線,如圖5所示。得到LP方法的acc為67.50%,loss為0.93;BR方法的acc為86.25%,loss為0.33,可以看出BR方法的準確度更高,損失值更趨近于0,預測效果更好。但是這種方法不考慮疾病間的關聯性,模型簡單,需要進一步優化增加標簽之間關聯性才能用于多疾病預測;LP方法考慮了標簽與標簽之間的關聯,增加了復雜度,使得準確率降低,使用此方法對某一樣本預測時,輸出端8個值的和為1,其中最大值對應索引即為預測結果,最大值就是預測概率。

圖5 acc-loss曲線
本文闡述了隨機森林、GBDT和Xgboost3種集成學習算法的原理及特點,基于3種慢性病,使用尋優速度較好的隨機搜索法對其中分類效果最好的Xgboost進行超參數優化,分別得到3種慢性病特征重要性排名前10的危險因素。使用keras框架構建神經網絡模型,對這些危險因素進行多疾病風險預測,對比分析了BR和LP兩種問題轉化方式得到的結果。在今后的研究中,要進一步豐富數據,采用更好的數據處理方法,構建更為復雜的神經網絡;對損失函數進行研究,在BR方法的基礎上考慮標簽之間的關聯性。