張春富,王 松,吳亞東,王 勇,張紅英
(西南科技大學 a.信息工程學院; b.計算機科學與技術學院; c.特殊環境機器人技術四川省重點實驗室,四川 綿陽 621010)
糖尿病是一種嚴重危害人類身體健康的慢性病,是由于胰島素分泌不足或外圍組織對胰島素不敏感而引起的代謝性疾病,其以持續的高血糖狀態為特征,容易致使各種組織器官長期受損。
根據國際糖尿病聯盟(IDF)統計,2017年全球糖尿病患者約有4.25億人,每11名成年人中就有1人患有糖尿病,每2名患者中就有1名未確診[1]。預計到2045年,全球將有近7億人患糖尿病。據統計,2017年我國成年糖尿病患病人數達到1.14億,相應醫療支出高達1 100億美元,超過130萬人死于糖尿病及其并發癥,其中41%以上的人年齡低于60歲,逐漸呈年輕化趨勢[1-2]。
糖尿病無法根治,且容易引發多種并發癥,為社會和家庭帶來沉重的經濟負擔。全球每年用于糖尿病人群的醫療支出費用為8 270億美元,占所有醫療支出的12%。目前糖尿病已經嚴重影響到居民健康水平和經濟的快速發展,糖尿病預測問題亟待解決。因此,本文針對糖尿病的臨床指標,結合Xgboost的預測優勢和遺傳算法的搜索能力,建立GA_Xgboost預測模型,對血糖值進行預測,確定高危人群并提前預警,輔助醫生進行早期干預,從而降低糖尿病發病率。
目前,大量學者對糖尿病預測進行了深入研究,構建了許多預測模型。這些預測模型根據不同應用場景而建立,對于推動糖尿病的快速診斷進而提高醫生診斷效率具有重要作用。
回歸模型是一種研究因變量和自變量關系的預測性建模技術,該模型綜合考慮各種可能危險因素,通常以多元回歸模型或Cox比例風險模型預測未來一定時間內糖尿病的發病概率。
多元回歸模型是應用較廣泛的一種方法,既可以用于個體糖尿病發病風險的預測,如文獻[3]建立的糖尿病視網膜病變預測模型,也可以用于群體糖尿病危險因素的研究,如文獻[4]對我國農村居民糖尿病患病因素的分析。多元回歸模型解釋性強但精度欠佳,不適用于大量指標的預測。
Cox回歸模型以生存結局和生存時間為因變量,可同時分析眾多因素對生存期的影響,常用于醫學隨訪研究。文獻[5]用Cox回歸模型建立了適合中國人群的糖尿病風險預測模型,文獻[6]則用Cox回歸模型研究胰島素依賴型糖尿病患者的死亡率。然而Cox回歸模型要求對數據連續觀測且追蹤時間不宜過短,成本較高。
決策樹作為從大規模數據中探索概念構成的代表,是弱化模型結構僅從數據出發構建概念的典型。基于決策樹建立的預測模型,能對預測結果提供相應的分析依據。文獻[7-8]采用決策樹建立了糖尿病臨床治療決策系統,提高了糖尿病的診治效率。文獻[9-10]探索決策樹模型在糖尿病預測中的應用,發掘糖尿病患病的得病風險規律。
實際上,決策樹作為一種模仿人類思考的建模思路,一般并不單獨用于模型的建立,而是以其為基函數,根據集成思想建立預測模型。
支持向量機是一種建立在VC維的統計學理論和結構風險最小化原理基礎上的機器學習算法,通過核函數將輸入向量映射到高維空間,從而得到最優分類超平面。文獻[11]建立了基于支持向量機的預測模型,探討環境因素和遺傳因素對2型糖尿病患病的影響。文獻[12-13]基于支持向量機分別建立了糖尿病前期篩查模型和標準化糖尿病診斷模型。
支持向量機具有解決小樣本學習、非線性、高維和泛化等問題的獨特優勢,但對于高維數據,它更多考慮通過核函數來解決,很少從物理降維出發,耗費大量的機器內存和運算時間。
神經網絡是一種基于大腦和神經系統研究而建立的計算模型。在這種模型中,大量節點之間相互聯結構成網絡,以達到處理信息的目的。文獻[14]以某綜合性醫院收集的調查資料為基礎,探討改進BP人工神經網絡在2型糖尿病發病危險因素中的應用特點。文獻[15]將中醫指標與臨床檢驗指標結合,探討神經網絡在糖尿病并發癥建模上的應用。文獻[16]基于神經網絡建立了1型糖尿病患者胰島素注射量的查詢系統。
神經網絡具有很強的自組織、自適應和容錯能力,在處理非線性問題上具有獨特優勢,但它在模型建立方面需要大量參數,輸出結果難以解釋,解釋性欠佳限制了它在醫療領域的廣泛應用。
Xgboost(eXtreme Gradient Boosting)也稱為極端梯度提升[17],是一種通過Boosting思想將基函數與權重進行組合形成的集成算法。Xgboost算法具有快速、高效、泛化能力強等優點,廣泛應用于回歸和分類領域。
遺傳算法(Genetic Algorithm,GA)是模擬生物界的遺傳和進化過程而建立的一種自適應全局優化概率搜索算法[18]。遺傳算法中種群的每個個體都是解空間上的一個可行解,通過模擬生物的進化過程,從而在解空間內自適應地搜索最優解。
Xgboost參數較多,調節繁瑣,且參數對算法的預測性能影響較大,需要對調參進行優化。據此,本文提出了GA_Xgboost模型,以多顆決策樹集成的Xgboost為基礎,利用遺傳算法良好的全局搜索能力和靈活性來彌補Xgboost模型參數眾多、收斂較慢、易陷入局部最優的缺陷,以真實值和預測值的均方誤差作為適應度函數來優化參數,通過精英選擇策略保證每一輪的進化結果最佳。
首先根據問題的復雜度設置初始種群數量、迭代次數、被優化參數數量和每代被保留的個體數,然后在限定范圍內隨機生成P組參數值,若不滿足要求,則用這些參數組分別訓練Xgboost模型并對測試集進行預測,對預測結果計算均方誤差,從中保留M組優秀參數,對它們運用遺傳算法進行交叉、變異,從而產生新參數,循環這個過程直到滿足停止條件為止。GA_Xgboost偽代碼如下:
輸入種群數量P,迭代時間J,參數數量N,優秀個體數量M
輸出最優參數組合
1.for i←1 to P do
2.Initialize (θi1,θi2,…,θiN)θi1,θi2,…,θiN
3.end for
4.while termination criterion not met do
5.The Train Set train Xgboost model
6.Predict the Test Set and calculate fitness value
7.Preserve the optimal parameters of M group according to fitness value
8.GA(P,J,N,M)
9.Produce new parameters
10.end while
糖尿病預測模型的設計思路如圖1所示,包含數據處理、數據探索以及數據擬合3個部分。整個過程采用Python語言實現。

圖1 糖尿病預測流程
2.2.1 特征工程
特征工程是一個把原始數據轉變為訓練數據的過程,它的目的是獲取更好的訓練特征,使得機器學習逼近模型上限。本文主要的特征工程有數據處理和數據探索。
原始數據主要包括體檢信息和個人信息,部分特征存在缺失值。刪除缺失值超過一半的乙肝類特征,用均值對缺失值較少的數值型特征進行填充,對填充好的數據進行log、歸一化等變換,如圖2所示,將不具有正態分布的特征變換成具有正態分布的特征,最后對特征兩兩之間進行加減乘除組合,從而得到新特征,對新特征進行交叉驗證,若有提升則添加該特征。

圖2 血糖值log變換
圖2顯示了血糖值的log變換,橫坐標代表血糖值,縱坐標代表該血糖值的人數。血糖真實值主要分布在5和6之間,這種極端數據分布不利于建模預測,因此對其進行log變換,使數據接近正態分布,以適用于預測任務及算法的需要。
2.2.2 參數優化
Xgboost有7項主要參數,不同參數有不同功能,這些參數設定是否合理,對于模型的好壞有重要影響。調參通常取決于經驗判斷和遍歷實驗,傳統方法效果不佳且缺乏理論依據。因此,本文基于遺傳算法進行參數優化,保留每次迭代的優秀個體,在優秀個體中進行交叉、變異等操作,交換并產生優秀基因,從而朝著全局最優進化。
根據遺傳算法的特點,結合Xgboost的參數范圍以及糖尿病數據的問題性質進行相應設定。設置初始種群數量為32,每個個體包含7個參數,參數在待選范圍內隨機生成;迭代100次,以均方誤差作為適應度函數,每次迭代根據適應度值保留8個最優個體;使用均勻交叉,隨機選擇一個參數進行突變,這樣既保證了優秀基因的交換,又能跳出局部最優。由于遺傳算法隨機生成初始群體,具有一定的隨機性,因此通過多次實驗能夠大概率找到近優甚至最優參數。GA_Xgboost調參實驗如圖3所示。

圖3 GA_Xgboost調參實驗結果
通過進行3次GA_Xgboost實驗,在迭代40次左右時效果均優于默認參數,當迭代次數達到100時,均方誤差均小于0.61。相比于默認參數,GA_Xgboost調參后的均方誤差有較明顯的提升。
本文以天池競賽平臺提供的某三甲醫院2017年9月—10月的糖尿病數據為數據源,目標是從乙肝、血常規、肝功能、腎功能等41個特征字段中預測血糖值,共計7 642條數據,其中,6 642條用于訓練,剩余數據用于測試。
經GA_Xgboost調參實驗后,當前Xgboost最佳參數組合及參數解釋如表1所示。在最佳參數組合下,均方誤差為0.606,明顯優于默認參數下的0.628。

表1 Xgboost最佳參數及默認值Table 1 Xgboost best parameters and default values
使用最佳參數組合對糖尿病血糖值進行預測,圖4給出了1 000條測試數據的血糖預測值和真實值分布。可以發現位于5~8的常見值預測比較準確,對于較大值的預測則有所偏差。原因可能在于訓練過程中較大值出現的次數少,從而權重較小,導致模型趨向于預測常見值。

圖4 血糖預測值和真實值分布
Fig.4 Distribution of blood glucose prediction values and actual values
圖5給出了與糖尿病最相關的20項特征的重要性評估。結果顯示,對血糖值影響最大的變量依次為年齡、天門冬氨酸氨基轉移酶和甘油三酯。

圖5 特征重要性
研究結果表明,糖尿病的發病率隨著年齡的增長而增長,50歲之后的肥胖人士極易患糖尿病[19];天門冬氨酸氨基轉移酶的測定有助于判定肝細胞有無壞死及損傷程度;甘油三酯偏高會影響血糖代謝,高甘油三酯血癥與糖尿病發病密切相關[20]。此外,丙氨酸氨基轉移酶、尿素、尿酸、紅細胞計數等對血糖值都有較大影響,而性別、血小板體積、嗜酸細胞等因素對糖尿病沒有太大影響。
為驗證GA_Xgboost方法的有效性,在糖尿病風險預測中將GA_Xgboost模型與各常用模型進行對比分析。
采用4項指標評估算法優劣,其中,MAE表示平均絕對誤差,MSE表示均方誤差,MAPE表示平均絕對百分比誤差,這三者用于評估真實值和預測值的差異,它們是回歸任務中最常用的性能指標,值越小代表預測越準確。R-squared用于評估模型的解釋度,值越大模型解釋性越強。評價指標具體公式如下:
(1)
(2)
(3)
(4)
各算法性能對比結果如表2所示。從表2中可以看出,在回歸問題上Xgboost預測精度優于線性回歸、決策樹、支持向量機和神經網絡,在解釋性方面不如線性回歸。經過遺傳算法優化的GA_Xgboost模型不僅提高了預測精度,而且在解釋性方面也有所增強。

表2 不同算法性能對比Table 2 Performance comparison of different algorithms
將GA_Xgboost與常用的調參方式進行比較,驗證其在精度和效率上的優勢。
網格搜索是業界調參最常用的方法,其思想是窮舉搜索,在所有候選的參數中進行遍歷,找到待選參數的最佳值,其缺點是耗費時間長且只能在給定候選集中選擇。隨機游走(random walk)是一種全局優化算法,根據大數定律,只要隨機的次數夠多,總能找到最優或近優參數,其缺點是高度依賴初始值且隨機結果可能不一致。經文獻[21]研究結果證明,在進行參數優化時隨機搜索比網格搜索更有效。遺傳算法的思想是優勝劣汰,每次留下最佳的數個樣本,有一定的幾率發生交叉、變異從而產生新樣本,因此遺傳算法也是全局優化算法。當變異概率較大時,遺傳算法會退化成隨機搜索。
GA_Xgboost與網格搜索調參、隨機游走調參以及Xgboost默認參數進行對比,結果如表3所示。其中,參數列表的順序為學習率、基學習器個數、最大樹深、最小葉子權重、懲罰項系數、訓練數據占比和訓練特征占比。

表3 Xgboost調參方式對比Table 3 Comparison of Xgboost parameter adjustment modes
表3使用MSE和運行時間做評價指標,從表3可以發現,網格搜索精度低且極度耗時,隨機游走精度和運行時間都居中,GA_Xgboost效果最佳。因為隨機游走和遺傳算法都有一定的隨機性,增加迭代次數或者多次實驗能夠大概率產生較佳參數組合。
實驗結果表明,GA_Xgboost在預測精度上優于線性回歸、支持向量機等常用算法,在運行時間和調參效果上優于網格搜索和隨機游走方法。相比于Xgboost算法,GA_Xgboost在花費一定時間的情況下,預測精度有明顯提升。
本文針對Xgboost算法存在參數眾多、收斂較慢的問題,結合遺傳算法全局優化的優點,提出GA_Xgboost模型。實驗結果表明,基于GA_Xgboost模型進行的血糖值預測,精度優于線性回歸、支持向量機等傳統算法,效率高于網格調參和隨機調參方法。雖然GA_Xgboost模型預測精度和調參時間都有所提高,但在實驗過程中發現,模型對于少數血糖值較大的記錄預測效果較差,運行時間也不夠快,如何增加較大值的權重、降低調參時間有待進一步研究。本文提出的GA_Xgboost模型還可以用于其他疾病的輔助診斷,該模型能夠識別和處理其他回歸預測和分類問題,下一步將結合Lasso方法對模型進行優化,利用Lasso回歸進行正則化和特征選擇,以提高模型的預測精度。