苗豐順,李 巖,高 岑,王美吉,李冬梅
1(中國科學院大學,北京 100049)
2(中國科學院 沈陽計算技術研究所,沈陽 110168)
近些年來,隨著我國經濟的迅速發展和國民生活方式以及飲食結構的改變,我國糖尿病患者人數正在以驚人的速度增長.糖尿病呈現發病率高、知曉率、治療率和達標率低的現象[1],嚴重的威脅了患者的身體健康,同時給家人和社會帶來了沉重的經濟負擔[2].目前大部分醫療機構對糖尿病的診斷還是依靠醫生的個人經驗和體檢數據為準,這種診斷方式對醫生的要求很高,具有很強的主觀性,容易出現誤診和漏診的情況,錯失了預防和治療的最佳時機,將嚴重影響到病人的身心健康.如果將糖尿病和機器學習結合,采用機器學習算法來輔助醫生診斷,將會很大程度上提高診斷和科學性,有效的克服醫生憑經驗診斷的主觀性的問題.因此,使用機器學習的方法對糖尿病患者進行預測,具有很大的現實意義.
關于疾病預測,國內外教育專家已經做過很多嘗試,研究出了很多算法,如:logistic 回歸、BP 神經網絡模型、COX 比例風險模型、決策樹模型[3-5].這些方法在疾病預測方面有較好的效果,但是也有各種各樣的缺點,比如要求數據量大、要求一定時間段的的連續數據、泛化能力太弱、過度擬合、陷入局部最小值、對隨機性和波動性數據不敏感、對不平衡數據預測 效果不理想等問題等等.現有的研究大多采用單個全局優化模型,單分類器模型性能有限,存在泛化能力弱和容錯性較差等問題.
本文使用集成學習模型進行預測,它是使用一系列的學習器進行學習,并使用某種規則把各個學習器的學習結果進行整合,從而獲得比單個學習器更好的學習效果的一種機器學習方法[6].集成學習模型現在主要分為Bagging和Boosting.基于Bagging 的模型的方差較小,但是偏差較大,故對基分類器的準確性要求較高.Boosting 可以降低模型偏差,它通過迭代地訓練一系列的分類器,每個分類器采用的樣本分布都和上一輪的學習結果有關,對基分類器的準確性要求較低.CatBoost 在2017年被Yandex 首次提出,是boosting的一種實現方式,它采用對稱樹的方式,并且用特殊的方式來處理categorical features,從而有效的避免了過擬合的問題,提高了泛化能力,提高了模型的魯棒性,特別適合樣本量小、數據不平衡的情況.目前該算法在糖尿病預測方面還沒有應用[7-9].
通過以上分析,本文決定采用一種基于特征選擇和集成學習算法的模型來進行糖尿病的預測.通過 IV值分析進行特征選擇,有效的去除冗余特征,確定最后的最優特征子集來訓練模型;使用CatBoost 有效的避免過擬合的問題,提高模型的泛化能力和魯棒性,最終達到良好的預測效果.
CatBoost 是Boosting 策略的一種實現方式,它和lightGBM 與Xgboost 類似,都屬于GBDT 類的算法.CatBoost 在GBDT 的基礎上主要做了兩點改進:處理標稱屬性和解決預測偏移的問題,從而減少過擬合的發生.
GBDT 算法是通過一組分類器的串行迭代,最終得到一個強學習器,以此來進行更高精度的分類[10].它使用了前向分布算法,弱學習器使用分類回歸樹(CART).
假設前一輪迭代得到的強學習器是Ft-1(x),損失函數是L(y,Ft-1(x)),則本輪迭代的目的是找到一個CART 回歸樹模型的弱學習器ht,讓本輪的損失函數最小.式(1)表示的是本輪迭代的目標函數ht.

GBDT 使用損失函數的負梯度來擬合每一輪的損失的近似值,式(2)中gt(x,y)表示的是上述梯度.

通常用式(3)近似擬合ht.

最終得到本輪的強學習器,如式(4)所示:

標稱屬性的一般處理方法是one hot encoding (獨熱編碼),但是會出現過擬合的問題,CatBoost 在處理標稱屬性時使用了更有效的策略,可以減少過擬合的發生.為訓練集生成一個隨機序列,假設原來的順序是σ=(σ1,···,σn).從 σ1到 σn一次遍歷隨機序列,用遍歷到的前p 個記錄計算標稱特征的數值.σp,k用如下數值替換:

這里添加了一個先驗值P和參數a>0.這是一種常見做法,它有助于減少從低頻類別中獲得的噪音.
預測偏移經常是困擾建模的問題,在GDBT 的每一步迭代中,損失函數使用相同的數據集求得當前模型的梯度,然后訓練得到基學習器,但這會導致梯度估計偏差,進而導致模型產生過擬合的問題.CatBoost 通過采用排序提升 (ordered boosting) 的方式替換傳統算法中梯度估計方法,進而減輕梯度估計的偏差,提高模型的泛化能力,Ordered boosting 的算法流程如圖1所示.
由圖1可知,為了得到無偏梯度估計,CatBoost 對每一個樣本xi都 會訓練一個單獨的模型Mi,模型Mi由使用不包含樣本xi的 訓練集訓練得到.我們使用Mi來得到關于樣本的梯度估計,并使用該梯度來訓練基學習器并得到最終的模型.

圖1 Ordered boosting 流程
對于整個糖尿病預測的研究包括以下幾部分:數據采集、數據預處理、特征選擇、模型預測、結果分析.如圖2所示.

圖2 糖尿病預測模型
本研究的數據來源于實 驗室項目:骕派智慧社區.數據集是沈陽某醫院的2018年的一次脫敏體檢數據,包含2377 條數據,數據維度高達63.
由于原始數據規模太過龐大,數據不完整、重復、雜亂等問題顯著,數據預處理對于后期的建模預測影響顯著.原始數據存儲在不同的數據表中,并且存在很多缺失項以及數據冗余,需要對原始數據進行預處理.本文在數據預處理方面做了以下工作:丟棄缺失項過多的樣本、丟棄缺失值過多的特征、采用均值進行缺失值填充、對標稱屬性、二元屬性進行數據轉換、數據集成以及去除冗余.
特征選擇對后期的建模預測起著關鍵性的作用,尤其是在樣本量小、特征多的情況下,剔除噪音、正確的選擇特征會對模型整體的準確性和穩定性有著質的提升.
IV 值分析是常見的處理特征值的方法,它衡量了某個特征對目標的影響程度.其基本思想是根據該特征所命中黑白樣本的比率與總黑白樣本的比率,來對比和計算其關聯程度,計算公式如下:

其中,n代表樣本在該特征上分成的組數,Pni表示該樣本第i組數據中白樣本占所有白樣本的比例,Pyi表示該樣本第i組數據中黑樣本占左右黑樣本的比例.
本文采用IV 值分析的方法進行特征選擇,最終選出23 個對糖尿病有影響的特征變量作為模型的輸入變量,其中包括性別、年齡、體重指數、收縮壓、舒張壓、膽固醇、甘油三酯、尿素/肌酐等.
經過前面的分析,CatBoost 算法適合用于對糖尿病的研究,本文就選擇CatBoost 模型來建模.經過數據預處理和特征選擇,把23 個特征變量作為輸入變量輸入模型進行預測,將70%作為訓練樣本,30%作為測試樣本.
分類閾值對模型的準確性影響重大,本文利用樣本的區間準確率來確定最后的閾值:將樣本按照預測值進行排序,然后沒5%分為一個區間,找到最后一個區間準確率大于50%的區間,將該區間的端點值作為最后的閾值.
基于準確率、召回率、F1 值等評價指標,通過與隨機森林、XGBoost 等模型進行對比分析,能夠得出CatBoost 在處理該問題上具有更好的效果.
選取評價指標是整個實驗環節的重要一環,直接影響到后期的結果分析.分類器性能的優劣通常使用準確率(accuracy)、精確率(precision)和召回率(recall)來評價.準確率(accuracy)指的是被分類正確的樣本數占總樣本數的比值,精確率(precision)表示的是預測為正的樣本中,實際為正的所占的比例,召回率(recall)表示的是實際為正的樣本中,被預測為正的所占的比例.分類結果混淆矩陣如表1所示.

表1 分類結果混淆矩陣
本文選取精確率(precision)、召回率(recall)和F1 值作為評價指標.

其中,P為陽性樣本總數,TP為預測正確的陽性樣本數,TN是預測錯誤的陽性樣本數,F1 值是精準率和召回率的加權調和平均值,為1 時最優,為0 時最差.對于復雜的模型和大量的數據,計算速度也是衡量模型優劣的一個指標,本實驗在服務器上運行,使用Python包的time.time()函數記錄模型運行的時間.
經過以上步驟的數據處理、特征選擇和模型預測,得出了使用CatBoost 模型的預測結果,并且和使用隨機森林、lightGBM 模型得出的結果進行了對比,結果如表2所示.

表2 運行結果分析
從表2可以看出,在模型精確率方面,隨機森林略高于XGBoost 模型和CatBoost 模型,在召回率和F1值方面,CatBoost 都高于XGBoost和隨機森林,在運行時間方面,CatBoost和XGBoost 明顯高于隨機森林.
本文以糖尿病發病人數多、發現率少以及醫療數據維數高、缺失量大為背景,依托于實驗室骕派智慧社區項目,實現了對糖尿病的預測模型.
本文使用一種新型的Boosting 算法CatBoost 進行糖尿病預測,并且取得了良好的預測結果.在文中,首先對原始數據進行預處理,然后采用IV 值分析的方法進行特征選擇,并采用適用于該問題的集成學習模型CatBoost 進行預測,最終得出較好的預測結果.通過實驗分析,CatBoost 在各項評價指標上比其他模型都具有明顯的優勢,說明 CatBoost 在糖尿病預測方面具有很好的應用價值.通過本文的研究,可以對糖尿病預測提供有效的指導,對保護人們的健康具有非常積極的意義.