李 儀,林建君,朱習軍
(青島科技大學 信息科學技術學院,山東 青島 266061)
近年來,許多研究者對糖尿病醫療數據進行了大量的研究,對于醫療結構化數據,使用了許多機器學習算法來構建預測模型[1,2]。傳統的機器學習算法如K均值、決策樹、SVM、貝葉斯算法等,都對糖尿病結構化數據進行了分析并構造了糖尿病預測模型,取得了較好的效果[3-5]。除了傳統的算法外,研究者提出將深度學習應用于結構化醫療數據中,該研究者利用深度神經網絡模型,構建了糖尿病分類模型,也取得了良好的分類效果[6-8],這表明深度學習技術在處理結構化醫療數據來預測疾病時的有效性。同時機器學習和深度學習的混合模型也逐漸得到應用。機器學習和深度學習的混合,結合了其技能和優勢,可以有效輔助醫生進行糖尿病預測診斷[9]。
利用深度學習進行結構化醫療數據研究的方法不多,CNN、RNN等深度學習模型適用于非結構化數據,本文采用深度神經網絡(deep neural networks,DNN)對結構化數據進行研究,提出將深度神經網絡與批歸一化(batch normalization,BN)層相結合,利用改進的DNN模型結合機器學習技術,對結構化糖尿病數據進行分析,并對該模型進行評估。
本文使用UCI公開提供的皮馬印第安人糖尿病數據集(PIMA indians diabetes data set,PIDD)進行實驗,該數據集由美國國立糖尿病、消化和腎臟疾病研究所提供。PIDD數據集包含768個樣本,有8個特征屬性和1個標簽屬性,所有屬性都是數值型數據,其中8個特征屬性見表1。

表1 數據集特征屬性
標簽屬性值為0和1,其中0代表未患有糖尿病,1代表患有糖尿病。通過統計分析,標簽值為0的樣本個數為500個,標簽值為1的樣本個數為268個,分布情況如圖1所示。

圖1 數據集標簽分布
本文對數據進行預處理主要包括兩個方面:缺失值處理、數據標準化。
(1)缺失值處理常用方法包含刪除法、插補法。刪除法主要用于刪除缺失數據,適用于樣本數據量大的情況。插補法利用缺失值變量的均值、中位數或眾數來填充變量中的缺失值。
PIDD數據集包含大量為零的數值,如舒張壓為零、胰島素含量為零、體重指數為零等,這些零值是沒有意義的,需要進行缺失值處理。因為該數據集數據量不大,本文采用均值插補方法進行缺失值填充。將原始數據集分為糖尿病組和非糖尿病組,計算每組各屬性的平均值,然后用各屬性平均值代替其缺失值,同時對于異常值,也用平均值代替。將處理后的數據集合成一個新的數據集用于后續建模。
(2)數據標準化是將原始數據按比例縮放,使之落入特定區間,去除數據的單位限制,對其進行無量綱化處理,本文采用區間縮放法進行標準化,將不同屬性列的數據轉換為同一量綱,將數據映射到[0,1]區間上,常見的有min-max方法,可利用python sklearn模塊中的StandardScaler()、MinMaxScaler()等函數進行計算,計算公式如下
(1)
其中,max是樣本屬性最大值,min是樣本屬性最小值。
對數據集的特征進行處理,分析特征之間的關聯程度,使用python pandas包中的corr函數計算特征之間的皮爾遜相關系數,相關系數趨向于1時,表明兩者關聯程度大;相關系數為0時,表明兩者相互獨立。通過熱力圖的形式展示各特征的關聯情況,如圖2所示。圖中橫軸和縱軸特征之間的顏色越淺表明特征之間相關系數越小,其關聯程度越??;顏色越深表明特征之間相關系數越大,其關聯程度越大。對圖1進行分析可以得出,該數據集中大部分特征之間的相關程度較弱,說明大部分數據之間冗余較小。但是個別特征之間的顏色較深,如Age(年齡)和Pregnancies(懷孕次數),代表這兩個特征之間相關程度較大,存在冗余。對于關聯程度較強的特征需要進一步判斷其對預測結果的貢獻程度,再進行處理。

圖2 特征關聯性分析
根據特征關聯性分析,得到個別特征之間存在一定的冗余,說明數據集中有的特征對實驗的實現沒有作用,需要篩選出有用的特征。特征選擇就是從數據集所有特征中除去冗余的特征,選擇最優特征的過程。特征選擇可以把高維數的特征轉化為低維數的特征,經過處理后的特征作為模型的輸入,可以提高模型的穩定性和準確率。
XGBoost算法是GBDT(gradient boosting decision tree)算法的改進,以CART樹為組合,負梯度為學習策略的一種基于boost的集成學習算法。具有高效率、高準確率、高并發的優點,在分類、回歸、特征選擇等方面得到廣泛應用。在特征選擇方面,XGBoost算法可以通過計算特征的重要性對特征進行選擇,特征重要性表示特征在構建提升樹起的作用。如果一個特征在所有樹中作為劃分屬性的次數越多,表明該特征越重要,由算法中評判特征重要程度指標weight表示。通過計算特征和預測結果之間的關聯性,得到每個特征對預測結果的影響權重,以此得到每個特征的重要性,并對特征重要性進行排序[10,11]。
本文運用XGBoost算法對PIDD數據集中8個屬性進行特征選擇,輸出每個特征對預測結果的影響程度,并輸出影響程度的排名即特征重要性排名。實驗結果如圖3所示,通過圖示可得Glucose(血糖值)、DiabetesPedigreeFunction(糖尿病譜系功能)、BMI(體重)、Age(年齡)、BloodPressure(舒張壓)、SkinThickness(皮脂厚度)、Pregnancies(懷孕次數)、Insulin(胰島素含量)對預測結果影響程度依次減小。本文實驗選擇得分最多的前五名,Glucose(血糖值)、DiabetesPedigreeFunction(糖尿病譜系功能)、BMI(體重)、Age(年齡)、BloodPressure(舒張壓)為重要特征,組成特征子集用于模型的訓練。

圖3 特征影響程度排名
本文模型體系結構主要包括數據預處理、特征選擇,搭建改進的DNN模型-BNDNN模型,并進行訓練,將測試數據集輸入訓練好的模型用于預測,最后進行模型性能評估,模型體系結構如圖4所示。

圖4 模型體系結構
深度神經網絡(deep neural networks,DNN)為包含多個隱藏層的神經網絡,有時也叫多層感知機。感知機模型由若干個輸入和一個輸出組成,輸入和輸出之間為線性關系,如圖5所示。

圖5 感知機模型
計算得到中間輸出結果
(2)
中間輸出通過神經元激活函數,得到分類結果。感知機模型只能進行二元分類,無法用于復雜的非線性模型,因此神經網絡在感知機模型基礎上進行了擴展。增加隱藏層,增強了模型的計算能力,提高了模型的復雜度;增加輸出層神經元個數,以此增加輸出,可以應用于多分類、回歸等問題;增加激活函數,如Sigmoid、tanx、softmax、ReLU函數等,不同的激活函數可以增強神經網絡的表達能力。
DNN神經網絡結構如圖6所示,包含1個輸入層、1個輸出層和n個隱藏層,層與層之間神經元為全連接。DNN分為前向傳播和反向傳播。對數據進行預處理后,進行前向傳播,將數據從輸入層輸入經過n個隱藏層得到計算結果最后傳入輸出層,利用輸出層得到的結果與期望結果進行比較得到誤差,反向傳播通過梯度下降將誤差從輸出層經過隱藏層傳入輸入層,這一過程為一輪神經網絡的訓練[12]。

圖6 DNN網絡結構
DNN的輸入在進行非線性變換前,隨著網絡層數的增加,在訓練過程中其分布會逐漸往非線性函數取值區間的上下限靠近,會導致梯度消失,優化函數越來越容易陷入局部最優解,這些問題的出現使得模型訓練速度變慢,準確率降低。批歸一化BN層在神經網絡層中進行預處理操作,將每個神經網絡層的輸出結果進行歸一化處理后再進入下一層,將每層神經網絡的輸入值分布重新拉回標準正態分布,使其落在激活函數的敏感區間。同時降低了對神經網絡參數初始化的要求,增強了網絡層之間的獨立性,增大反向傳播的梯度,因此可以有效地避免梯度消失等現象,與Dropout相同可以防止過擬合現象,加快了網絡訓練,提高模型的準確度[13]。BN算法流程如下所述:
輸入:數據x1…xm
輸出:(1)計算每一個訓練批次數據的均值μβ
(3)
(4)

(5)

(6)
(5)數據完成批歸一化操作后進入下一個網絡層。

z=g(wx+b)
(7)
DNN引入BN層時,其作用于非線性激活函數之前,如式(8)所示
z=g(BN(wx+b))
(8)
Adam(adaptive moment estimation)算法通過計算梯度的一階矩估計和二階矩估計對不同參數學習率的取值進行調整,Adam算法是一種替代隨機梯度下降的優化算法[14]。Adam的每一次迭代,學習率都被限制在一個大致的范圍,使得參數平穩,解決學習率消失、稀疏梯度、噪聲等問題。Adam算法更新公式如下
(9)

(10)
(11)
β1和β2為常數,mt為對梯度的一階矩估計,vt為對梯度的二階矩估計。mt、vt的更新如下,其中gt為一階導
mt=β1×mt-1+(1-β1)×gt
(12)
(13)
若數據量較少、網絡參數權重過大時,在網絡訓練過程中會存在訓練過度產生過擬合現象,可以通過正則化方法對網絡模型參數設定先驗,防止模型過擬合。L2正則化方法為在損失函數中增加一個正則化項,對權重參數進行影響,如以下公式所示
(14)

為解決DNN網絡模型易出現的局部最優解、梯度消失等現象,本文對普通DNN網絡結構進行了改進,增加了BN層構建BNDNN模型,BNDNN網絡結構如圖7所示。該模型構造了5個全連接層,包含3個隱藏層,1個輸入層,1個輸出層。從輸入層到輸出層神經元個數分別為70、20、20、5、1,在輸入層后和輸出層前增加了BN層。本文采用的糖尿病數據集中每個特征均為數值型數據,經過數據預處理和特征選擇后,形成6維的標準化數據集,將數據輸入到BNDNN模型,其中輸入數據為5維,代表數據集中的5個特征。數據從輸入層經過全連接層進入BN層時,BN層經過計算使得數據重新分布在[0,1]之間,對數據進行變換重構,再傳入下一層,提高了模型的準確率。

圖7 BNDNN網絡結構
訓練網絡模型,配置多個參數并進行優化:
(1)采用Adam優化算法,設置參數學習率為0.001。
(2)經過多次實驗進行準確率對比,設置迭代次數參數Epoch為100次。
(3)隱藏層激活函數選擇ReLU函數,輸出層激活函數選擇Sigmoid函數。
(4)增加Dropout層,使神經網絡每次訓練時隨機忽略一部分神經元,這樣會使神經網絡對某個神經元的權重變化不敏感,增加了泛化能力,減少過擬合。Dropout參數默認值設為0.2。
(5)在dense層中添加正則項,L2參數設置為0.01。
本文對PIDD數據集進行缺失值處理,數據標準化等一系列數據預處理操作后,利用XGBoost算法進行特征選擇,篩選出重要性比較高的5個特征屬性,即Glucose(血糖值)、DiabetesPedigreeFunction(糖尿病譜系功能)、BMI(體重)、Age(年齡)、BloodPressure(舒張壓),將其作為新的輸入數據。采用Keras框架搭建BNDNN模型用于進行糖尿病預測。將數據集按照8∶2的比例分為訓練集和測試集,訓練集樣本數為615,測試集樣本數為153。通過對訓練集進行交叉驗證,并根據模型評價指標調整網絡參數來訓練網絡模型,在測試集上評估訓練好的模型準確率。
使用交叉驗證評估模型的泛化能力。K-fold交叉驗證是將數據集分成K組,將K-1組子集作為訓練集,剩下的子集作為測試集,進行K次訓練和測試,將K次測試結果的平均值作為最終結果。
在醫學診斷中,通常利用以下常用指標評估模型:
準確率(Accuracy):表示分類器做出正確預測的樣本個數與樣本總數的比率[15]
(15)
其中,TP為真陽性、TN為真陰性、FP為假陽性、FN為假陰性。如果數據集中樣本標簽為正,并且分類器預測這個樣本標簽也為正時,稱其為真陽性;如果數據集中樣本標簽為負,預測也為負時,稱其為真陰性;如果數據集中樣本標簽為正,但分類器預測為負,稱其為假陰性;如果數據集中樣本標簽為負,分類器預測為正時,稱其為假陽性。
靈敏度(Sensitivity)即召回率(recall):表示陽性病例正確分類為陽性與所有陽性病例的比率
(16)
特異度(Specificity):表示陰性病例正確分類為陰性與所有陰性病例的比率
(17)
精準率(Precision):表示陽性病例正確分類為陽性與所有預測為陽性病例的比率
(18)
F1值表示精確值和召回率的調和均值
(19)
ROC曲線:接受者操作特征曲線,縱坐標為靈敏度(Sensitivity),橫坐標為特異度(Specificity),當曲線向坐標軸左上角靠近時表明模型準確度越高[16]。AUC表示ROC曲線下的面積,AUC值越大表明模型性能越穩定,利用這兩個指標可以用來衡量模型的分類性能。
本文利用10倍交叉驗證對模型進行訓練和評估,經過100次迭代測試集準確率基本穩定在80%左右,實驗結果如圖8所示,表明該模型對糖尿病的診斷預測是可行的。

圖8 預測結果
為了驗證模型的有效性,將XGBoost-BNDNN模型與其它傳統機器學習算法決策樹(DT)、隨機森林(RF)以及利用PCA進行特征選擇的PCA-DNN模型和XGBoost-DNN模型進行對比,實驗結果見表2。

表2 不同模型分類準確率/%
從實驗結果可以看出,在準確率方面,XGBoost-BNDNN模型準確率為81.60%,比DT提高了13.37%,比
RF提高了17.32%,比PCA-DNN模型提高了3%,比XGBoost-DNN模型提高了2.61%;在精準率方面,XGBoost-BNDNN模型精確率為80.01%,比DT提高了11.96%,比RF提高了15.86%,比PCA-DNN模型提高了2%,比XGBoost-DNN模型提高了1.72%;在召回率方面,XGBoost-DNN模型召回率為80.05%,比DT提高了12.95%,比RF提高了16%,比PCA-DNN模型提高了1.94%,比XGBoost-DNN模型提高了1.82%;在F1值方面,XGBoost-BNDNN模型F1值為80.03%,比DT提高了12.46%,比RF提高了15.93%,比PCA-DNN模型提高了1.97%,比XGBoost-DNN模型提高了1.77%。表明增加BN層對模型性能的提高是有效的。
為了更進一步對比不同模型的性能,對其進行ROC曲線比較,結果如圖9所示。從圖9可以看出,XGBoost-BNDNN模型的ROC曲線最靠近坐標軸左上方,ROC曲線下的面積最大,表明其AUC值最大,同時從表3可以得到驗證,XGBoost-BNDNN模型AUC值為0.822,與其它模型相比值最大。表明該模型具有更好的預測效果,可以對糖尿病進行有效的預測來輔助醫生進行診斷。

表3 不同模型AUC

圖9 各個分類模型ROC曲線
本文圍繞糖尿病預測問題,對糖尿病結構化數據進行處理,運用XGBoost算法進行特征選擇,提出對DNN進行改進,構建XGBoost-BNDNN模型用于糖尿病的預測。該
模型在普通DNN網絡結構上增加了BN層,可以有效防止梯度消失、訓練速度慢等現象,提高模型準確率。增加Adam優化算法、Dropout層、L2正則化對BNDNN模型進行優化。通過10倍交叉驗證以及各種評價指標評估該模型,驗證了模型的優越性。由于本文使用的數據集數量少,特征維數低,不能保證該模型適應大數據、特征維數高的情況。針對這一問題,下一步將使用大數據集對模型進行優化,以取得更高的準確率。