哈爾濱醫(yī)科大學衛(wèi)生統(tǒng)計學教研室(150081)
盧婭欣 黃 月 李 康△
【提 要】 目的 探討XGBoost算法在二分類高維非平衡數據中的分類判別效果。方法 通過模擬實驗及真實代謝組學數據分析,對XGBoost、隨機森林、支持向量機、隨機欠采樣以及隨機梯度提升樹共五種方法進行比較。結果 模擬實驗顯示,XGBoost算法在數據非平衡較明顯時,在各種實驗條件下均優(yōu)于或不劣于其他四種算法,在數據類別趨于平衡的情況下也同樣具有較好的分類效果,且對噪聲變量具有一定的抗干擾能力。實例分析顯示,與其他四種算法相比,XGBoost算法的分類性能最優(yōu),且在保證分類效果的基礎上具有更快的運算速度。結論 XGBoost算法適用于非平衡高維數據的判別分析,值得研究。
在對高維數據進行分類或判別時,數據的類別間常存在非平衡的現象,而各類之間的例數相差較大常會對判別效果產生影響[1]。而如何對非平衡數據建立預測模型進行分類是一個較難解決的問題[2]。目前對非平衡數據的處理主要在數據及算法兩大層面。數據層面的基本思想是應用重采樣技術使各類別的分布達到平衡,再使用傳統(tǒng)分類器進行分類判別,常用的方法如隨機欠采樣、隨機過采樣以及Chawla等人[3]提出的合成少數類過采樣技術(SMOTE)等。算法層面以代價敏感學習(cost-sensitive learning)、一分類學習(one-class learning)以及集成學習(ensemble learning)為主,其中boosting作為一種強大的集成學習算法,以算法集合的思想將基礎弱分類器轉換為優(yōu)效分類器,已被證明可對各種不規(guī)則的數據類型顯示出良好的分類效果[4]。極端梯度提升算法(extreme gradient boosting,XGBoost)是近年來一種基于boosting的新算法,具有運算速度快、效果好等特點[5]。本文在介紹XGBoost算法原理的基礎上,通過模擬實驗及實例分析,比較并考察它與其他處理非平衡數據常用方法的分類效果。
1.XGBoost的目標函數
boosting是一種集成學習算法,其主要思想是將許多弱分類器集合在一起,形成一個強大的組合分類器以提高分類精度,主要算法有自適應增強(adaptive boosting,Adaboost)與梯度提升樹(gradient boosting decision tree,GBDT)[6]。XGBoost是GBDT的一種優(yōu)化算法,是將許多CART回歸樹模型集合在一起形成一個強分類器。其算法步驟如下:

(1)
其中,f(x)表示一棵CART回歸樹,wk是第k棵回歸樹的葉子權重,q(x)是葉節(jié)點的編號,即樣本x最后會落在樹的某個葉節(jié)點上,其值為wq(x)。

(2)

(3)對損失函數進行泰勒二階展開近似原函數并移除常數項,則:
(3)

(4)
(4)定義Ij={i|q(xi)=j}作為葉節(jié)點的實例集,將公式(1)代入公式(3)中,整理可得:
(5)
(6)
2.尋找最佳分裂點的近似算法
XGBoost使用近似分位點算法,通過對特征值進行排序[8],在既定誤差ε和序列大小N的情況下可以以εN的精度來計算任意分位,同時還可用原序列的一個子集代替全集以減少數據量。XGBoost通過對該算法增加權重,提出了加權分位數略圖(weighted quantile sketch),同樣是在訓練前對數據排序來列舉數個候選分裂點,同時將位于相鄰分位點間的樣本以“塊”的結構儲存到內存中,可在串聯(lián)進行的迭代過程中重復使用。在選擇增益最大的特征進行節(jié)點分裂時,也可使各特征的增益計算并聯(lián)進行。模擬實驗表明,該算法較傳統(tǒng)的boosting算法可提高計算速度10~50倍。
本模擬實驗以基于樹的模型構建XGBoost算法模型,旨在考察XGBoost對非平衡數據的分類判別效果,并將其與典型的傳統(tǒng)分類器如隨機森林(RF)、支持向量機(SVM)以及處理非平衡數據常用的隨機欠采樣(random under-sampling)和隨機梯度提升樹(stochastic gradient boosting based trees,SGBT)算法[9]進行比較。
該模擬實驗考察二分類數據在不同非平衡率(imbalanced ratio,IR)、不同大小的真實區(qū)分度θ(ROC曲線下面積)及不同數量噪聲的情況下五種算法的判別能力。具體步驟如下:
(1)設定20個服從正態(tài)分布X~N(μ,1)的差異變量,訓練集和測試集樣本量各占50%,均為400例,分別設置非平衡率(IR)為1/19、1/9、1/4和2/3。
(2)設定兩類間的真實區(qū)分度θ為0.85和0.95兩個水平,并另設定500個噪聲(均數為0,方差為1);數據間的相關性均簡單設定為0。
(3)分別使用上述五種算法對訓練集建模100次,再用訓練好的模型對測試集做判別預測,最終各評價指標的結果取100次計算的均值(表1)。五種算法在各實驗條件下的AUC值分布見圖1和圖2。

表1 五種算法在不同情況下對模擬數據的分類效果AUC均值

圖1 真實區(qū)分度θ=0.85時各算法的分類效果AUC值

圖2 真實區(qū)分度θ=0.95時各算法的分類效果AUC值
由圖1和圖2可知,在各種不同的條件下,非平衡較嚴重時(非平衡率IR<2/3),XGBoost算法的分類效果均優(yōu)于其他算法,而在接近平衡的狀態(tài)時(IR=2/3),XGBoost的AUC值略低于效果最佳的RF算法。當噪聲數量由0增加到500時,XGBoost的分類效果仍優(yōu)于其他算法,說明該算法對噪聲變量具有一定的抗干擾能力。
選取同一批次檢測的大腸癌(CRC)患者和炎性腸病患者的血漿代謝組學數據進行研究。該數據共包括662個代謝物和644例樣本,其中大腸癌組571例,炎性腸病組73例,非平衡率為12.8%。經過變量篩選后(取VIP>1.1且FDR校正后的P值<0.05),剩余68個代謝物。使用無放回的隨機抽樣,分層抽取每一類別的50%樣本作為訓練集,剩余50%作為測試集,并重復100次。使用XGBoost算法和其他四種算法對未篩變量及變量篩選后的組學數據分別建模訓練,得出各模型預測的AUC值以及靈敏度、特異度(根據約登指數最大選取診斷閾值)。各算法的分類判別結果分別見表2和表3。

表2 五種算法在662個變量時CRC的分類判別效果

表3 五種算法在篩選出68個變量時CRC的分類判別效果
分析結果顯示,XGBoost在無論變量篩選與否的情況下均具有良好的分類判別效果,證明其在高維數據判別領域廣泛應用的可行性,可為臨床疾病診斷與癌癥篩查提供一定幫助。
XGBoost是一種基于boosting思想的新算法。該算法在傳統(tǒng)梯度提升樹的基礎上,加入了正則項以控制模型復雜度,減少過擬合。同時XGBoost對損失函數進行泰勒二階展開以近似原函數,因此損失函數只需滿足函數二階可微。該算法中所使用的加權分位數略圖可快速生成可保證精度的候選分割點,且在模型訓練前預先保存了排序后的數據特征,以支持在迭代中高效反復利用,從而大大提高了運算效率。
模擬實驗結果顯示,在數據非平衡較嚴重的情況下(如IR<1/4),XGBoost算法在各種實驗情況下均可取得最優(yōu)的分類效果,并且對噪聲也具有一定的干擾能力。其他模擬實驗顯示,當訓練集兩個類別的樣本量由兩類均為100例的完全平衡狀態(tài)增加信息量至300例與100例的非平衡狀態(tài)時,相比其他分類器,XGBoost可以克服非平衡造成的影響從而表現出更好的分類效果。實際代謝組數據分析結果顯示,相比于其他四種算法,XGBoost在有無變量篩選的情況下判別效果均相對最優(yōu)。以上結果均說明XGBoost算法對處理非平衡數據具有明顯優(yōu)勢。
XGBoost算法的其他特點還包括可以進行特征選擇、自動學習缺失值的分裂方向以處理缺失值等。同時,本研究中該算法的損失函數使用的是機器學習常用的均方誤差(MSE),在實際應用中也可以根據數據的特點選取其他二階可微的函數。