舒仕文
(貴州財經(jīng)大學(xué) 貴州 貴陽 550025)
GBDT(梯度提升決策樹)是可用于回歸預(yù)測,也可用于分類(提前規(guī)定一個閾值,如果計算出的值大于閾值,則設(shè)置為正例;如果計算出的值小于閾值,則設(shè)置為負(fù)例)的集成監(jiān)督學(xué)習(xí)算法。該集成算法有3個優(yōu)點,分別是提升、梯度和決策樹:提升是把多個弱分類器組合起來;梯度是在提升過程中提高損失函數(shù)的靈活性和便利性的算法;決策樹是算法使用CART決策樹為基礎(chǔ)弱分類器[1]。
實現(xiàn)傳統(tǒng)的GBDT需要掃描所有數(shù)據(jù)實例的每個特征。因此,特征和實例的數(shù)量越多,其計算就越復(fù)雜。所以在處理大數(shù)據(jù)時,傳統(tǒng)的GBDT非常耗時。
解決耗時問題的一個方法是減少數(shù)據(jù)或特征的數(shù)量,但不知如何從GBDT中采樣數(shù)據(jù)。雖然有一些方法可以基于權(quán)值對數(shù)據(jù)進行采樣,以加快數(shù)據(jù)的訓(xùn)練過程,但GBDT中沒有樣本權(quán)值[2],這些方法不能直接應(yīng)用于GBDT。因此,針對該問題提出了兩種算法:GOSS算法(梯度單邊采樣)和EFB算法(互斥特征捆綁)。將加入GOSS和EFB兩種算法的GBDT稱為LightGBM。
由于GBDT沒有權(quán)值,所以根據(jù)抽樣點權(quán)重的數(shù)據(jù)采樣方法不能直接應(yīng)用于GBDT,但其可以利用每個數(shù)據(jù)實例的梯度來進行采樣數(shù)據(jù)。基于此,GOSS算法保留所有梯度較大的數(shù)據(jù)實例,然后隨機采樣所有梯度較小的數(shù)據(jù)實例。GOSS算法在梯度較小的數(shù)據(jù)實例中引入一個固定乘數(shù),用于計算信息增量,目的是減少該方法對數(shù)據(jù)分布的影響[3]。步驟如下:GOSS首先根據(jù)數(shù)據(jù)實例梯度的絕對值對數(shù)據(jù)實例進行排序,然后選擇最佳的a×100%的實例,接著從剩下的數(shù)據(jù)中隨機選擇前面b×100%的實例。最后GOSS通過將采樣數(shù)據(jù)按較小梯度的數(shù)據(jù)乘以(1-a)/b來計算信息增益。其中a,b∈(0,1),a表示大梯度數(shù)據(jù)的采樣率,b表示小梯度數(shù)據(jù)的采樣率。
高維數(shù)據(jù)通常非常分散。正是由于這種分散性,才有可能不損失地減少特征空間中的特征數(shù)量。在一個特征分散的空間里,許多特征是相互排斥的,所以這些互斥的特征可以捆綁成一個單獨的特征(稱為互斥特征包)。使用特征掃描算法,可以用與單個特征相同的包構(gòu)造特征的直方圖。這種方法可以將構(gòu)造直方圖的復(fù)雜度從數(shù)據(jù)實例數(shù)量n×特征數(shù)量j變?yōu)閿?shù)據(jù)實例數(shù)量n×特征捆綁數(shù)量j′,當(dāng)捆綁的特征數(shù)量遠(yuǎn)遠(yuǎn)小于原始特征數(shù)量時,可以顯著提高GBDT的訓(xùn)練速度而不影響其準(zhǔn)確性。
EFB算法將許多互斥特征捆綁到低維密集特征上,可以有效避免不必要的零特征值計算。事實上,如果將每個非零特征的數(shù)據(jù)記錄在一個表中,也可以優(yōu)化基于基本直方圖的算法,從而忽略零特征值。通過掃描該表中的數(shù)據(jù),構(gòu)造直方圖的代價將從原始數(shù)據(jù)變?yōu)榉橇闾卣鞯臄?shù)。但是這種方法需要額外的內(nèi)存和計算成本,以便能夠在整個樹的增長過程中維護這些特征表。
在直方圖算法中,連續(xù)浮點特征值會被離散為k個整數(shù),同時構(gòu)造一個直方圖,其寬度為k。當(dāng)在數(shù)據(jù)中遍歷時,統(tǒng)計數(shù)據(jù)會根據(jù)離散值作為索引收集在直方圖中。數(shù)據(jù)經(jīng)過一次遍歷后,直方圖會收集所需的統(tǒng)計信息,然后根據(jù)直方圖的離散值進行遍歷,以找到最佳分割點。XGBoost需要遍歷所有離散值,而LightGBM僅遍歷k個值。
從輸入空間xs到梯度空間g,GBDT通過決策樹學(xué)習(xí)一個函數(shù)。假設(shè)有n個實例訓(xùn)練數(shù)據(jù)集{x1,x2,…,xn},其中xi是輸入空間xs中維度為s的向量,在模型的每次迭代中,損失函數(shù)的負(fù)梯度相對于模型的輸出表示為{g1,g2,…,gn}。決策樹模型以最大的信息增益分割每個節(jié)點。對于GBDT,信息增益用分裂后的方差來度量[4],定義如下:
在決策樹的固定節(jié)點上定義訓(xùn)練數(shù)據(jù)集O。該節(jié)點在點d處分裂,特征j的方差增益定義為公式(1):
其中no=∑I[xi∈O],njl|o(d)= ∑I[xi∈ O:xij≤d]和nj|lo(d)= ∑I[xi∈ O:xij> d]。
對于特征jj,算法中dj*=argmaxdVj(d),并且計算出Vj(dj*)為點dj*處的最大增益。然后根據(jù)dj*點的特征j*將數(shù)據(jù)劃分為左右兩個子節(jié)點,見圖1。
如圖2,XGBoost使用按層生長的增長策略,通過一次遍歷數(shù)據(jù),可以同時分離相同的葉子層,從而更容易針對多個線程進行優(yōu)化,并能很好地控制模型的復(fù)雜性,但這種算法很低效。與XGBoost不同,LightGBM使用按葉子生長的策略,即在所有當(dāng)前葉子中搜索出分裂增益最大的葉子,然后對其進行分裂,一直重復(fù)此過程。與按層生長的增長策略方法相比,按葉子生長方法的優(yōu)勢在于,在相同的分裂次數(shù)下,葉子生長方法減少了誤差,提高了精度;但其缺點是它可能會創(chuàng)建出更深層次的樹,容易出現(xiàn)過擬合。所以LightGBM在按葉子生長方法上創(chuàng)建一個最大深度限制,目的是確保模型的高性能和防止過擬合。
在GOSS算法中,首先根據(jù)訓(xùn)練實例的梯度絕對值對訓(xùn)練實例進行降序排序;其次,梯度較大的前a×100%的實例用子集A表示;然后用Ac表示由(1-a)×100%具有較小梯度的實例組成的集合,進一步用B表示隨機采樣大小為b×|Ac|的集合。最后根據(jù)集合A∪B上的估計方差的增益VJ~(d)拆分實例,即公式(2):
其中Al={xi∈A:xij≤d},Ar={xi∈A:xij>d},Bl={xi∈B:xij≤d},Br={xi∈B:xij>d},并且Ac的大小與集合B上的梯度總和乘以(1-a)/b相等。因此,GOSS算法中,在較小的實例子集上不是使用精確值Vj(d)確定分割點,而是使用估計的V~J(d)來確定,這樣可以顯著降低計算成本。
本文中使用的3個二分類數(shù)據(jù)集皆由UCI數(shù)據(jù)庫收集,從Kaggle下載。隨機選取3個數(shù)據(jù)集的75%做訓(xùn)練集,25%做測試集。其中電信客戶流失數(shù)據(jù)集屬于類別不平衡數(shù)據(jù),本文使用SMOTE采樣方法對其進行上采樣處理。SMOTE是一種具有代表性的過采樣方法算法,即把少量樣本的樣本進行采樣,它是基于隨機過采樣算法的改進。由于隨機過采樣技術(shù)是一種簡單地復(fù)制樣本以增加多個樣本的策略,因此很容易產(chǎn)生模型過擬合的問題,即能使模型學(xué)習(xí)獲得的信息過于特殊而不夠泛化。SMOTE算法的基本思想是分析少數(shù)樣本,根據(jù)少數(shù)樣本以KNN技術(shù)合成新樣本,并將其添加到數(shù)據(jù)集中,流程見圖3。
采樣前電信客戶流失數(shù)據(jù)集的正例和反例的比例約為1∶3,使用SMOTE算法采樣后電信客戶流失數(shù)據(jù)集的正例和反例的比例為1∶1。處理后的具體數(shù)據(jù)集的信息見表1。
表1 數(shù)據(jù)集信息
紅葡萄酒數(shù)據(jù)集、電信客戶流失數(shù)據(jù)集的全部特征描述見表2、表3。
表2 紅葡萄酒數(shù)據(jù)特征描述
表3 電信客戶流失數(shù)據(jù)特征描述
乳腺癌數(shù)據(jù)集包含30個特征,前10個特征表示細(xì)胞核特征的平均值;第11至第20個特征表示細(xì)胞核特征值的標(biāo)準(zhǔn)差,反映不同細(xì)胞核在各個特征數(shù)值上的波動情況;第21到30個特征為樣本圖像中細(xì)胞核特征值的最大值。
在3個數(shù)據(jù)集實例中,紅葡萄酒數(shù)據(jù)集和乳腺癌數(shù)據(jù)集的特征是定量變量,電信用戶流失數(shù)據(jù)集中有定量變量(如每月費用),也有定性變量(如性別)。
建模過程中的一個重要步驟是建立科學(xué)且合理的數(shù)據(jù)指標(biāo),以評估算法模型的預(yù)測性能。因此,本文使用Accuracy、Recall、Precision、F1-Score以及AUC值作為模型的評估指標(biāo),機器學(xué)習(xí)中較常用的評估性能的是混淆矩陣,見表4,它能夠把預(yù)測分布結(jié)果直觀地顯示[5]。各個指標(biāo)的計算方法如下。
表4 混淆矩陣表
準(zhǔn)確率(Accuracy):
Accuracy=(TP+TN)/(TP+FP+TN+FN)
準(zhǔn)確率指被模型分類正確數(shù)占總樣本實例數(shù)量的比例。
召回率(Recall):
Recall=TP/(TP+FN)
召回率描述了實際為正的樣本中被預(yù)測為正樣本的比例。
精確率(Precision):
Precision=TP/(TP+FP)
精確率描述了正確預(yù)測為正的占全部預(yù)測為正的比例。
F1值(F1-Score):
F1=(2TP)/(2TP+FP+TN)
F1分?jǐn)?shù)是調(diào)和精確率和召回率的平均數(shù)。
為了量化模型分析,引入AUC的概念,即ROC曲線下面積,ROC曲線一般都會在直線y=x的上方,AUC值指從實際值為1的樣本內(nèi)預(yù)測成功的概率大于實際值為0的樣本內(nèi)預(yù)測失敗的概率,AUC值一般介于0.5~1。AUC值越高,模型的預(yù)測性能越好。
本文試驗是在Python 3.7.3 [MSC v.1915 64 bit(AMD64)]:: Anaconda,Inc.on win32環(huán)境,在Python自帶的scikit-learn接口下進行。
如表5所示,LightGBM模型在對乳腺癌、紅葡萄酒、電信客戶流失3個數(shù)據(jù)集的分類預(yù)測中,準(zhǔn)確率、召回率、精確率、F1-score均在0.8以上,且AUC值分別為0.99、0.88、0.92。從以上模型評估指標(biāo)的結(jié)果說明,LightGBM模型的分類預(yù)測效果較好。且LightGBM模型相對于AdaBoost、GBDT和XGBoost的運行時長和所占用的內(nèi)存均有很大的提升,特別是在對電信客戶流失的應(yīng)用中,更突出LightGBM在數(shù)據(jù)量大的數(shù)據(jù)集中的計算優(yōu)勢,見表6。
表5 LightGBM模型評估指標(biāo)
表6 各模型運行時長和占用內(nèi)存
(1)計算速度更快。LightGBM使用直方圖算法將樣本轉(zhuǎn)換為組間復(fù)雜度直方圖,并使用單邊梯度算法在訓(xùn)練期間過濾掉具有較小梯度的樣本,從而減少計算量;LightGBM采用優(yōu)化后的特征并行、數(shù)據(jù)并行方法,甚至當(dāng)數(shù)據(jù)量非常大時采用投票并行的策略以加速計算,同時也會優(yōu)化緩存。
(2)占用內(nèi)存更小。LightGBM 使用直方圖算法將存儲特征值轉(zhuǎn)變?yōu)榇鎯ο渲?,并且采用捆綁相互排斥的特征來減少訓(xùn)練前的特征數(shù)量,從而減少內(nèi)存使用量。
(3)支持類別特征(即不需要做獨熱編碼)。大多數(shù)機器學(xué)習(xí)方法不能直接支持類別功能。通常情況下,類別的屬性需要轉(zhuǎn)換為多維的獨熱編碼,但這會降低空間和時間的效率,使用類別在實踐中非常常見。在此基礎(chǔ)上,LightGBM優(yōu)化了類別的處理,即類別功能可直接輸入,無需額外的獨熱編碼擴展,并將類別特征的決策規(guī)則添加到?jīng)Q策樹算法中。
可能會創(chuàng)建比較深的樹從而易發(fā)生過擬合;LightGBM是基于偏差的算法,因此,它將對噪聲點更敏感;對最優(yōu)解的搜尋是基于最優(yōu)變量的切分,沒有考慮當(dāng)最優(yōu)解可能是所有特征的組合時這一事實。
本文提出了LightGBM模型,介紹了GOSS算法、EFB算法和直方圖算法。然后通過實例分析LightGBM在二分類數(shù)據(jù)中的應(yīng)用,計算出模型評估指標(biāo)的值,并歸納出其優(yōu)點和缺點,以供參考。