葉 楓 朱彩霞
(浙江工業(yè)大學 管理學院,浙江 杭州 310023)
本文在多個金融數(shù)據(jù)集上將該算法與原始Stacking算法、其他結(jié)合過采樣處理的Stacking算法和其他傳統(tǒng)的集成算法的結(jié)果進行比較,結(jié)果表明此算法提高了不平衡數(shù)據(jù)的分類效果。
Stacking 算法是由Wolpert在 1992 年提出的一種集成學習算法,又稱為堆疊算法。與 Boosting和Bagging 相比,堆疊算法在較多的情況下進行多個學習器訓(xùn)練,能夠結(jié)合多個不同的分類算法。堆疊算法核心是將算法分成兩層,第一層是基學習器,第二層是元學習器。如圖1所示,將訓(xùn)練數(shù)據(jù)集輸入基學習器中,得到基學習分類結(jié)果;再將輸出結(jié)果進行組合,作為元學習器的輸入,從而使得下層學習能夠被充分應(yīng)用于上層學習,糾正基學習算法中的分類偏差。
圖1 Stacking算法框架
給定T個樣本的數(shù)據(jù)集,表示為D0={(xi,yi),i=1,2,…,T},其中xi為輸入樣本的特征向量,yi為標簽label。通過k折交叉驗證法,將數(shù)據(jù)集隨機劃分為m個大小基本相等的數(shù)據(jù)Dj(j=1,2,…,m)。選擇m個基學習器Lj(j=1,2,…,m),在訓(xùn)練集Dj上訓(xùn)練第m個學習器,這些基學習器訓(xùn)練共獲得m個分類模型,表示為Xj(j=1,…,m),并得到訓(xùn)練的最終結(jié)果Cj(j=1,…,m)。在進行交叉檢驗之后,m個分類器結(jié)果與yi進行組合得到新的數(shù)據(jù)集D1={(C1,C2,…,Cj,yi),j=1,2,…,m,i=1,2,…,T)。D1數(shù)據(jù)集也就是圖1中的數(shù)據(jù)組合,進一步利用分類算法得到最終分類模型M′,由M′給出最終分類結(jié)果。
通過Stacking算法我們可以發(fā)現(xiàn)這種算法能夠融合任何分類算法,具有較強的融合性和擴展性,疊加的層次可以從一層到多層向上延伸,每一層模型之中,可以融合不同的算法進行分類器構(gòu)造,通過測試不同分類算法之間的組合,確定最優(yōu)算法組合。
經(jīng)典的k-means算法從提出到現(xiàn)在已超過60年,目前依舊是被運用最廣泛的聚類算法之一。k-means算法的基本原理主要是以歐氏距離作為相似度指標,在迭代過程中根據(jù)相似度將樣本分成不同的簇,同一簇相似度高,不同簇之間相似度低。
定義1 設(shè)j=1,2,…,k,Y=(y1,y2,…,yn),X與Y的歐氏距離定義為:
(1)
k-means算法流程如下:
輸入:樣本集D={x1,x2,…,xn},聚類簇數(shù)k
輸出:聚類結(jié)果C
Step 1:從數(shù)據(jù)集中隨機選擇k個樣本作為初始聚類中心點{μ1,μ1,…,μk};
Step 2:對于i=1,2,…,n,計算樣本點xi和各個聚類中心點的距離,將樣本集中其他樣本分配到離它最近的簇中心所在的簇;
Step 3:對于i=1,2,…,k,在每個簇中,計算簇中所有數(shù)據(jù)對象的均值,從而得到新的簇中心;
Step 4:重復(fù)Step 2、Step 3,直至聚類中心不再發(fā)生變化;
Step 5:輸出結(jié)果C。
過采樣的主要思想就是通過一系列方法合成新的少數(shù)類樣本,以達到均衡數(shù)據(jù)集的目的。過采樣的方法有很多種,不同的方法有各自的優(yōu)缺點。過采樣方法中最簡單的是隨機過采樣(Random-Over-Sampling),它主要是隨機復(fù)制少數(shù)類樣本以使少數(shù)類樣本和多數(shù)類樣本比例均衡。隨機過采樣雖然方法簡單,能在一定程度上提高少數(shù)類樣本的分類正確率,但是由于新增的少數(shù)類樣本是直接復(fù)制原有的少數(shù)類樣本,所以這種算法容易造成過擬合。
針對隨機過采樣的局限性,Chawla等提出SMOTE方法,它是在每個少數(shù)類樣本與其相鄰的k個少數(shù)類樣本之間進行線性插值,合成新的少數(shù)類樣本,如圖2所示。SMOTE的基本步驟如下:
圖2 SMOTE插值說明
(1)首先依次選取每一個少數(shù)類樣本xi作為新生成樣本的原樣本;
(2)使用KNN算法找到少數(shù)類樣本xi的同類別的k(k取值一般默認為5)個鄰近樣本,記為y1,y2,…,yk;
(3)根據(jù)采樣倍率N%,在xi的k個鄰近樣本中隨機選擇N個樣本點;
(4)根據(jù)以下公式進行線性插值,生成新的少數(shù)類樣本xs:
xs=xi+rand(0,1)×(yi-xi)
(2)
其中,s=1,2,…,N;j=1,2,…,k;rand(0,1)表示0到1的隨機數(shù);
(5)新生成的少數(shù)類樣本添加到原始訓(xùn)練數(shù)據(jù)集中,平衡數(shù)據(jù)集。
本研究在Stacking算法框架下,將k-means++聚類算法和過采樣方法應(yīng)用到分類器中,提出結(jié)合聚類過采樣的Stacking算法。本文算法基本思想就是利用k-means++的無監(jiān)督算法特點,對基學習算法產(chǎn)生的分類結(jié)果進行聚類,從而使得分類結(jié)果相一致的訓(xùn)練樣本能夠聚類至同一個簇中;然后對聚類結(jié)果進行SMOTE過采樣處理,均衡樣本集;最后進行回歸訓(xùn)練,得到最終分類結(jié)果。該方法將每個基分類器分類概率作為特征集進行聚類,將基分類器的分類結(jié)果一致的樣本更好地聚集在一個簇類中,以聚類后的簇類中心代表原多數(shù)類數(shù)據(jù)和少數(shù)類數(shù)據(jù)一起構(gòu)成新的數(shù)據(jù)集。SMOTE過采樣增加人工合成的少數(shù)類樣本使數(shù)據(jù)分類平衡,減少了過擬合的可能性,提高了分類器在測試集上的泛化性。另一方面,堆疊算法形成的數(shù)據(jù)集能夠大大降低聚類算法的運算速度。
傳統(tǒng)的k-means算法只能進行局部最優(yōu)解,初始化中心的選擇將在很大程度上影響找到的最優(yōu)解的好壞。因此,為更好地找到初始化中心,Arthur和Vassilvitskii提出了k-means++聚類算法。該算法的初始質(zhì)心選取的基本思路就是,初始的聚類中心之間的相互距離要盡可能遠,提高在大規(guī)模數(shù)據(jù)中選擇中心的效率。k-means++的具體步驟如下:
(1)從數(shù)據(jù)集中隨機選取一個樣本作為初始聚類中心c1;
(3)重復(fù)第2步直到選出k個聚類中心;
(4)繼續(xù)使用k-means算法求出聚類結(jié)果。
本文算法就是,不同基學習器產(chǎn)生的分類概率作為特征集通過k-means++的無監(jiān)督算法進行聚類,k-means++算法能顯著減少分類結(jié)果的最終誤差,從而使得分類結(jié)果相一致的訓(xùn)練樣本能夠聚類至同一個簇中。聚類產(chǎn)生的新的簇類分別作為多數(shù)類樣本和少數(shù)類樣本。聚類結(jié)果作為標簽,結(jié)合分類概率的特征集進行SMOTE過采樣處理,從而使作為元分類器的輸入數(shù)據(jù)達到均衡。k-means++聚類過采樣的具體步驟如下:
(1)將Stacking基學習器輸出的分類概率作為新的樣本集;
(2)樣本集通過k-means++的聚類方法重新聚類,得到新的分類結(jié)果,將分類結(jié)果作為標簽target;
(3)將樣本集和標簽target結(jié)合成為新的樣本集,進行SMOTE過采樣處理,合成新的少數(shù)類樣本,平衡樣本集;
(4)平衡后的樣本集,去掉標簽target,作為元分類器的輸入數(shù)據(jù)。
集成算法(Ensemble Method)是通過一定策略將多個學習器結(jié)合起來。按個體學習器之間的關(guān)系,可以分為Bagging、Boosting和Stacking三大類。Bagging和Boosting框架使用同類型的基學習器進行構(gòu)建,Stacking則是將不同類型的基學習器進行組合構(gòu)建,因為不同類型基學習器可以從不同的角度觀察數(shù)據(jù)特征,更加全面地學習數(shù)據(jù),從而得到一個更準確的結(jié)果。其核心思想是對基學習器進行交叉驗證訓(xùn)練,然后在基學習器輸出結(jié)果的基礎(chǔ)上,構(gòu)建二級特征用于訓(xùn)練元學習器。
本研究在Stacking算法框架下,將k-means++聚類算法應(yīng)用到基分類器分類結(jié)果中,提出結(jié)合聚類過采樣的Stacking算法。本文算法基本思想就是,通過Stacking算法,多種基學習算法可以從不同角度分析訓(xùn)練得到分類概率,根據(jù)k-means++的無監(jiān)督算法特點,使各個基學習算法產(chǎn)生的分類概率作為各個樣本的新的特征值進行聚類,從而得到新的簇類作為多數(shù)類樣本數(shù)據(jù)和少數(shù)類樣本數(shù)據(jù),然后對聚類結(jié)果進行SMOTE過采樣處理,均衡樣本集;最后將平衡后的數(shù)據(jù)集作為輸入數(shù)據(jù)進入元分類器回歸分析,得到最終分類結(jié)果。該方法通過k-means++聚類使得不同基學習器分類的概率作為特征集進行聚類,提高被錯分的少數(shù)類樣本正確分類的概率;再結(jié)合SMOTE過采樣處理平衡進入元分類器訓(xùn)練的數(shù)據(jù)集,彌補數(shù)據(jù)不平衡帶來的缺陷。另一方面,堆疊算法形成的數(shù)據(jù)集是由n個學習器所得到的維度為n的數(shù)據(jù),能夠大大降低聚類算法的運算速度。算法的具體步驟如下:首先通過Stacking集成算法的基學習算法對訓(xùn)練集S1進行訓(xùn)練,產(chǎn)生分類概率組合得到數(shù)據(jù)集data。然后隨機選取一個樣本點作為初始聚類中心c1,遍歷數(shù)據(jù)集,利用歐式距離計算出樣本點與目前的聚類中心的距離D(x),計算每個樣本點被選為下一個聚類中心的概率,按照輪盤法選擇出下一個聚類中心。作為初始聚類簇中心,對data 進行k-means 聚類,得到聚類結(jié)果。將聚類結(jié)果的label標簽與數(shù)據(jù)集data結(jié)合,形成新的數(shù)據(jù)集new_data。對new_data數(shù)據(jù)集進行SMOTE過采樣處理,合成新的少數(shù)類樣本,均衡數(shù)據(jù)集,形成新的數(shù)據(jù)集final_data。最后對final_data中的特征值data進行回歸分類,得到最終分類結(jié)果。算法偽代碼如下所示。
Input:
原始數(shù)據(jù)集D0(類別標簽0多于1)
基學習分類算法Lj(j=1,2,…,m)
k-means++聚類算法
Logistic算法
Output:
分類結(jié)果數(shù)據(jù)集 result
Begin
Step1k折交叉驗證法將D0隨機劃分為m個大小基本相等的數(shù)據(jù)集Dj(i=1,2,…,m)。
Step2Cj:利用基學習算法Lj對Dj進行訓(xùn)練及預(yù)測,得到分類結(jié)果集Cj與分類器Xj。
Step3將結(jié)果Cj按列組合,得到新的數(shù)據(jù)集data。
Step4遍歷數(shù)據(jù)集data,根據(jù)歐式距離,對數(shù)據(jù)集 data 進行k-means++ 聚類,初始聚類簇為d1、d2,組合聚類結(jié)果,標簽為label。
Step5將data 數(shù)據(jù)和聚類結(jié)果label結(jié)合,形成新的數(shù)據(jù)集new_data。對數(shù)據(jù)集new_data進行SMOTE過采樣處理,合成新的少數(shù)類樣本,得到新的平衡的數(shù)據(jù)集final_data,標簽為final_label。
Step6對數(shù)據(jù)集final_data用 logistic方法進行回歸分析,得到最終的分類結(jié)果數(shù)據(jù)集result。
End
聚類過采樣Stacking算法流程如圖3所示。
為了確保實驗結(jié)果的可靠性,采用不同實際應(yīng)用的金融數(shù)據(jù)來進行檢驗。本文選取1個Kaggle數(shù)據(jù)集、2個UCI數(shù)據(jù)進行測試。表1是用于實驗的數(shù)據(jù)信息,包括樣本數(shù)量、特征數(shù)、標簽統(tǒng)計數(shù)。
圖3 聚類過采樣Stacking算法流程
從表1可以看出,數(shù)據(jù)集擁有足夠大的樣本數(shù)量。數(shù)據(jù)集都源自金融方面,從標簽0和1的統(tǒng)計比例上能夠明顯看出這3個數(shù)據(jù)集都是不平衡數(shù)據(jù),可以良好地檢驗算法的效果,能夠幫助對比后續(xù)的實驗算法。
表1 實驗數(shù)據(jù)
對于平衡數(shù)據(jù),一般采用分類精度作為評價指標。然而,對于不平衡數(shù)據(jù)而言,以分類精度作為算法的評估標準是不合理的。例如,以金融貸款為例,約1%的信用卡交易存在欺詐行為。因此,在預(yù)測中,所有的交易模型具有高達99%的準確率。而實際上,這樣并沒有實際意義,它幾乎無法檢測出任何欺詐交易。在處理不平衡的分類問題上,目前大多采用混淆矩陣(見表2)。其中,TP表示被分類器正確分類的正類數(shù),TN表示被分類器正確分類的負類數(shù),而FN表示被分類器錯誤分類的負類數(shù),F(xiàn)P表示被分類器錯誤分類的正類數(shù)。
表2 二分類混淆矩陣
相關(guān)的評價指標計算如下:
文獻[18]中用ROC曲線來評價不平衡數(shù)據(jù)的分類算法。橫坐標是FPR,縱坐標是TPR。
AUC是ROC曲線面積,是用來度量分類模型好壞的一個標準。AUC的大小能夠更加直觀地體現(xiàn)結(jié)果的好壞。AUC越大,模型越好,分類器分類效果越好。AUC=1,是完美的分類器,效果最好。
本文算法性能用AUC的值、F1值和G-mean值作為衡量結(jié)果好壞的指標:
測試都在windows 10系統(tǒng)下運行,處理器Intel(R)Core(TM)i5-5200UCPU@2.20GHz2.20GHz,內(nèi)存12GB。用python 3.7版本,采用Pyc.harm編譯器進行運行測試。
為了保證數(shù)據(jù)的合理以及后續(xù)可持續(xù)性的測試,將原數(shù)據(jù)分為訓(xùn)練集和測試集,數(shù)據(jù)比例為9∶1,從而能夠得到合理的數(shù)據(jù)驗證。本文選用Bagging的代表算法隨機森林和極端隨機數(shù)、Boosting的代表算法CatBoost算法和LightGBM算法作為初級分類算法,Logistic 回歸算法作為次級分類算法。
圖4 Data1數(shù)據(jù)集在不同Stacking算法下的ROC曲線
圖5 Data2數(shù)據(jù)集在不同Stacking算法下的ROC曲線
圖6 Data3數(shù)據(jù)集在不同Stacking算法下的ROC曲線
為了驗證聚類過采樣對Stacking算法處理不平衡數(shù)據(jù)有優(yōu)化作用,分別使用傳統(tǒng)Stacking算法、對原始數(shù)據(jù)進行SMOTE處理后的Stacking算法(SMO-Stacking)和對基分類器分類概率只使用原始標簽進行SMOTE過采樣處理的Stacking算法(Y-SMO-Stacking)與本文算法(K-SMO-Stacking)進行對比。
表3 每個數(shù)據(jù)集在不同Stacking算法下的AUC值
表4 每個數(shù)據(jù)集在不同Stacking算法下的F1值
表5 每個數(shù)據(jù)集在不同Stacking算法下的G-mean值
圖4、圖5、圖6表示三個數(shù)據(jù)集在不同Stacking算法下的ROC曲線,表3、表4和表5中第五列是聚類過采樣Stacking算法(K-SMO-Stacking)的結(jié)果。從實驗結(jié)果上可以發(fā)現(xiàn),本文算法的AUC值幾乎都略高于其他的Stacking算法,本文算法的F1值和G-mean值都高于其他Stacking算法,證明對基學習器的分類概率進行聚類過采樣的方法比原始的Stacking算法處理復(fù)雜特征值的海量數(shù)據(jù)集有一定優(yōu)勢。這充分說明了整體分類效果有了明顯提高,算法得到了實際結(jié)果的認可。尤其是在F1值和G-mean值上,本文算法的值遠高于原始Stacking算法,說明對于傳統(tǒng)的Stacking算法的結(jié)構(gòu),將聚類過采樣融合到Stacking結(jié)構(gòu)后對處理不平衡數(shù)據(jù)更加有效。通過表4、表5的第4列和第5列對比可知,本文算法將基分類器輸出的分類概率通過k-means++的聚類算法重新聚類得到新的聚類標簽,將新的聚類后的數(shù)據(jù)集通過SMOTE過采樣合成新的少數(shù)類樣本再進行回歸訓(xùn)練得到分類結(jié)果,比起將基分類器輸出的分類結(jié)果和原始數(shù)據(jù)集的標簽相結(jié)合進行SMOTE過采樣處理,可以更好地均衡數(shù)據(jù)集,提高少數(shù)類數(shù)據(jù)的分類準確率,提高對不平衡數(shù)據(jù)集的分類效果。
圖7 Data1數(shù)據(jù)集在不同集成算法下的ROC曲線
將聚類過采樣Stacking算法和其他傳統(tǒng)集成算法進行對比,得到的結(jié)果如圖7~9,表6~8所示。除了在data3數(shù)據(jù)集上表現(xiàn)不佳,在其他數(shù)據(jù)集上,本文算法在AUC值、F1值和G-mean值上均遠高于其他傳統(tǒng)算法。這也能證明相比于其他傳統(tǒng)的集成算法,本文算法在處理不平衡數(shù)據(jù)時效果顯著。
圖8 Data2數(shù)據(jù)集在不同集成算法下的ROC曲線
圖9 Data3數(shù)據(jù)集在不同集成算法下的ROC曲線
表6 每個數(shù)據(jù)集在不同集成算法下的AUC值
表7 每個數(shù)據(jù)集在不同集成算法下的F1值
表8 每個數(shù)據(jù)集在不同集成算法下的G-mean值
不平衡數(shù)據(jù)在實際金融項目中普遍存在,這使得不平衡數(shù)據(jù)在機器學習中成為研究的熱點。本文在Stacking集成框架的基礎(chǔ)上,通過將k-means++聚類算法和過采樣方法相結(jié)合,利用k-means++聚類和過采樣進行對數(shù)據(jù)集的優(yōu)化,使少數(shù)類樣本增多且更密集,對均衡的數(shù)據(jù)進行訓(xùn)練。本文在具有大量樣本的金融數(shù)據(jù)集上進行實驗研究,證明了結(jié)合聚類過采樣的Stacking算法比原始Stacking算法、其他結(jié)合過采樣的Stacking算法和其他傳統(tǒng)集成算法有了進一步的提高,在AUC值提高效果相近的情況下,在F1值和G-mean值上有明顯提高。
雖然相比于其他算法,本文算法在F1值和G-mean值上都有更好的結(jié)果,但在AUC結(jié)果上提高的程度還是有所不足。為了進一步提高精度,在生成次級分類器時應(yīng)當適當增加原始數(shù)據(jù)集中重要的維度數(shù)據(jù),或者增加重要的基學習算法訓(xùn)練數(shù)據(jù),以此來提高精度。下一步工作將重點研究基學習算法訓(xùn)練結(jié)果如何選擇組合重要信息來提高分類精度。