哈爾濱醫(yī)科大學(xué)衛(wèi)生統(tǒng)計學(xué)教研室(150081)
盧婭欣 黃 月 李 康△
【提 要】 目的 探討XGBoost算法在二分類高維非平衡數(shù)據(jù)中的分類判別效果。方法 通過模擬實驗及真實代謝組學(xué)數(shù)據(jù)分析,對XGBoost、隨機森林、支持向量機、隨機欠采樣以及隨機梯度提升樹共五種方法進行比較。結(jié)果 模擬實驗顯示,XGBoost算法在數(shù)據(jù)非平衡較明顯時,在各種實驗條件下均優(yōu)于或不劣于其他四種算法,在數(shù)據(jù)類別趨于平衡的情況下也同樣具有較好的分類效果,且對噪聲變量具有一定的抗干擾能力。實例分析顯示,與其他四種算法相比,XGBoost算法的分類性能最優(yōu),且在保證分類效果的基礎(chǔ)上具有更快的運算速度。結(jié)論 XGBoost算法適用于非平衡高維數(shù)據(jù)的判別分析,值得研究。
在對高維數(shù)據(jù)進行分類或判別時,數(shù)據(jù)的類別間常存在非平衡的現(xiàn)象,而各類之間的例數(shù)相差較大常會對判別效果產(chǎn)生影響[1]。而如何對非平衡數(shù)據(jù)建立預(yù)測模型進行分類是一個較難解決的問題[2]。目前對非平衡數(shù)據(jù)的處理主要在數(shù)據(jù)及算法兩大層面。數(shù)據(jù)層面的基本思想是應(yīng)用重采樣技術(shù)使各類別的分布達到平衡,再使用傳統(tǒng)分類器進行分類判別,常用的方法如隨機欠采樣、隨機過采樣以及Chawla等人[3]提出的合成少數(shù)類過采樣技術(shù)(SMOTE)等。算法層面以代價敏感學(xué)習(xí)(cost-sensitive learning)、一分類學(xué)習(xí)(one-class learning)以及集成學(xué)習(xí)(ensemble learning)為主,其中boosting作為一種強大的集成學(xué)習(xí)算法,以算法集合的思想將基礎(chǔ)弱分類器轉(zhuǎn)換為優(yōu)效分類器,已被證明可對各種不規(guī)則的數(shù)據(jù)類型顯示出良好的分類效果[4]。極端梯度提升算法(extreme gradient boosting,XGBoost)是近年來一種基于boosting的新算法,具有運算速度快、效果好等特點[5]。本文在介紹XGBoost算法原理的基礎(chǔ)上,通過模擬實驗及實例分析,比較并考察它與其他處理非平衡數(shù)據(jù)常用方法的分類效果。
1.XGBoost的目標(biāo)函數(shù)
boosting是一種集成學(xué)習(xí)算法,其主要思想是將許多弱分類器集合在一起,形成一個強大的組合分類器以提高分類精度,主要算法有自適應(yīng)增強(adaptive boosting,Adaboost)與梯度提升樹(gradient boosting decision tree,GBDT)[6]。XGBoost是GBDT的一種優(yōu)化算法,是將許多CART回歸樹模型集合在一起形成一個強分類器。其算法步驟如下:
(1)
其中,f(x)表示一棵CART回歸樹,wk是第k棵回歸樹的葉子權(quán)重,q(x)是葉節(jié)點的編號,即樣本x最后會落在樹的某個葉節(jié)點上,其值為wq(x)。
(2)
(3)對損失函數(shù)進行泰勒二階展開近似原函數(shù)并移除常數(shù)項,則:
(3)
(4)
(4)定義Ij={i|q(xi)=j}作為葉節(jié)點的實例集,將公式(1)代入公式(3)中,整理可得:
(5)
(6)
2.尋找最佳分裂點的近似算法
XGBoost使用近似分位點算法,通過對特征值進行排序[8],在既定誤差ε和序列大小N的情況下可以以εN的精度來計算任意分位,同時還可用原序列的一個子集代替全集以減少數(shù)據(jù)量。XGBoost通過對該算法增加權(quán)重,提出了加權(quán)分位數(shù)略圖(weighted quantile sketch),同樣是在訓(xùn)練前對數(shù)據(jù)排序來列舉數(shù)個候選分裂點,同時將位于相鄰分位點間的樣本以“塊”的結(jié)構(gòu)儲存到內(nèi)存中,可在串聯(lián)進行的迭代過程中重復(fù)使用。在選擇增益最大的特征進行節(jié)點分裂時,也可使各特征的增益計算并聯(lián)進行。模擬實驗表明,該算法較傳統(tǒng)的boosting算法可提高計算速度10~50倍。
本模擬實驗以基于樹的模型構(gòu)建XGBoost算法模型,旨在考察XGBoost對非平衡數(shù)據(jù)的分類判別效果,并將其與典型的傳統(tǒng)分類器如隨機森林(RF)、支持向量機(SVM)以及處理非平衡數(shù)據(jù)常用的隨機欠采樣(random under-sampling)和隨機梯度提升樹(stochastic gradient boosting based trees,SGBT)算法[9]進行比較。
該模擬實驗考察二分類數(shù)據(jù)在不同非平衡率(imbalanced ratio,IR)、不同大小的真實區(qū)分度θ(ROC曲線下面積)及不同數(shù)量噪聲的情況下五種算法的判別能力。具體步驟如下:
(1)設(shè)定20個服從正態(tài)分布X~N(μ,1)的差異變量,訓(xùn)練集和測試集樣本量各占50%,均為400例,分別設(shè)置非平衡率(IR)為1/19、1/9、1/4和2/3。
(2)設(shè)定兩類間的真實區(qū)分度θ為0.85和0.95兩個水平,并另設(shè)定500個噪聲(均數(shù)為0,方差為1);數(shù)據(jù)間的相關(guān)性均簡單設(shè)定為0。
(3)分別使用上述五種算法對訓(xùn)練集建模100次,再用訓(xùn)練好的模型對測試集做判別預(yù)測,最終各評價指標(biāo)的結(jié)果取100次計算的均值(表1)。五種算法在各實驗條件下的AUC值分布見圖1和圖2。
表1 五種算法在不同情況下對模擬數(shù)據(jù)的分類效果AUC均值
圖1 真實區(qū)分度θ=0.85時各算法的分類效果AUC值
圖2 真實區(qū)分度θ=0.95時各算法的分類效果AUC值
由圖1和圖2可知,在各種不同的條件下,非平衡較嚴(yán)重時(非平衡率IR<2/3),XGBoost算法的分類效果均優(yōu)于其他算法,而在接近平衡的狀態(tài)時(IR=2/3),XGBoost的AUC值略低于效果最佳的RF算法。當(dāng)噪聲數(shù)量由0增加到500時,XGBoost的分類效果仍優(yōu)于其他算法,說明該算法對噪聲變量具有一定的抗干擾能力。
選取同一批次檢測的大腸癌(CRC)患者和炎性腸病患者的血漿代謝組學(xué)數(shù)據(jù)進行研究。該數(shù)據(jù)共包括662個代謝物和644例樣本,其中大腸癌組571例,炎性腸病組73例,非平衡率為12.8%。經(jīng)過變量篩選后(取VIP>1.1且FDR校正后的P值<0.05),剩余68個代謝物。使用無放回的隨機抽樣,分層抽取每一類別的50%樣本作為訓(xùn)練集,剩余50%作為測試集,并重復(fù)100次。使用XGBoost算法和其他四種算法對未篩變量及變量篩選后的組學(xué)數(shù)據(jù)分別建模訓(xùn)練,得出各模型預(yù)測的AUC值以及靈敏度、特異度(根據(jù)約登指數(shù)最大選取診斷閾值)。各算法的分類判別結(jié)果分別見表2和表3。
表2 五種算法在662個變量時CRC的分類判別效果
表3 五種算法在篩選出68個變量時CRC的分類判別效果
分析結(jié)果顯示,XGBoost在無論變量篩選與否的情況下均具有良好的分類判別效果,證明其在高維數(shù)據(jù)判別領(lǐng)域廣泛應(yīng)用的可行性,可為臨床疾病診斷與癌癥篩查提供一定幫助。
XGBoost是一種基于boosting思想的新算法。該算法在傳統(tǒng)梯度提升樹的基礎(chǔ)上,加入了正則項以控制模型復(fù)雜度,減少過擬合。同時XGBoost對損失函數(shù)進行泰勒二階展開以近似原函數(shù),因此損失函數(shù)只需滿足函數(shù)二階可微。該算法中所使用的加權(quán)分位數(shù)略圖可快速生成可保證精度的候選分割點,且在模型訓(xùn)練前預(yù)先保存了排序后的數(shù)據(jù)特征,以支持在迭代中高效反復(fù)利用,從而大大提高了運算效率。
模擬實驗結(jié)果顯示,在數(shù)據(jù)非平衡較嚴(yán)重的情況下(如IR<1/4),XGBoost算法在各種實驗情況下均可取得最優(yōu)的分類效果,并且對噪聲也具有一定的干擾能力。其他模擬實驗顯示,當(dāng)訓(xùn)練集兩個類別的樣本量由兩類均為100例的完全平衡狀態(tài)增加信息量至300例與100例的非平衡狀態(tài)時,相比其他分類器,XGBoost可以克服非平衡造成的影響從而表現(xiàn)出更好的分類效果。實際代謝組數(shù)據(jù)分析結(jié)果顯示,相比于其他四種算法,XGBoost在有無變量篩選的情況下判別效果均相對最優(yōu)。以上結(jié)果均說明XGBoost算法對處理非平衡數(shù)據(jù)具有明顯優(yōu)勢。
XGBoost算法的其他特點還包括可以進行特征選擇、自動學(xué)習(xí)缺失值的分裂方向以處理缺失值等。同時,本研究中該算法的損失函數(shù)使用的是機器學(xué)習(xí)常用的均方誤差(MSE),在實際應(yīng)用中也可以根據(jù)數(shù)據(jù)的特點選取其他二階可微的函數(shù)。