


摘? 要:文章介紹了Stacking集成學習方法、BP神經(jīng)網(wǎng)絡(luò)模型,分別討論了單分類器的精度,特征提取與單分類器結(jié)合的算法的精度、Stacking集成學習算法的精度。實驗測試表明,以決策樹、LDA、樸素貝葉斯、隨機森林為基學習器,以BP神經(jīng)網(wǎng)絡(luò)為元學習器所建立的Stacking算法是最佳的光譜分類算法,該算法穩(wěn)定性強,學習效果好,平均準確率高達94%。
關(guān)鍵詞:Stacking模型融合;BP神經(jīng)網(wǎng)絡(luò)模型;多分類問題
中圖分類號:TP18 ? ? ? 文獻標識碼:A文章編號:2096-4706(2022)04-0091-05
Spectral Classification Algorithm of Stacking Model Fusion Based on BP Neural Network
LIN Miaofang
(South China Normal University, Guangzhou? 510631, China)
Abstract: This paper introduces Stacking ensemble learning method and BP neural network model, discusses respectively the accuracy of the single classifier, the accuracy of the algorithm combining feature extraction and single classifier, and the accuracy of the Stacking ensemble learning algorithm. The experimental test shows that the Stacking algorithm established by a base learning machine of the decision tree, LDA, Naive Bayes, random forest, and a meta learning machine of BP neural network, is the best spectral classification algorithm. The algorithm has strong stability, good learning effect, and the average accuracy rate is up to 94%.
Keywords: Stacking model fusion; BP neural network model; multiple classification problem
0? 引? 言
分類是數(shù)據(jù)挖掘中的一個重要任務它根據(jù)提供的訓練樣本的辨別性特征將樣本數(shù)據(jù)進行分類[1]。機器學習中的模型如決策樹、LDA、樸素貝葉斯、隨機森林等是常用的用于解決分類問題的模型,但這些單分類器的精度卻難以得到進一步的提高。機器學習領(lǐng)域的分類學習模型組合集成問題已經(jīng)成為適應分布式計算以及提高分類準確率而需要解決的重要課題。集成學習通過決策優(yōu)化或覆蓋優(yōu)化等手段將若干弱分類器進行聯(lián)合,以提高總體的分類性能[2]。理論可以證明,集成學習方法對于集成預測精度較高、相互獨立的基學習器有很好的精度提升的效果[3]。
Stacking算法是一類典型的集成學習算法,該算法是由Wolpert提出的一種通用集成技術(shù),也是一個重要的分類器組合模型[4]。Stacking算法將多個分類器通過某種融合策略產(chǎn)生更好的分類,從而實現(xiàn)其優(yōu)越的泛化性能。在各個領(lǐng)域應用廣泛。本文從特征提取、集成學習等多個方面出發(fā),探究出最佳的光譜分類算法。利用光譜數(shù)據(jù)進行分類測試的結(jié)果表明,基于BP神經(jīng)網(wǎng)絡(luò)的Stacking算法是最佳的光譜分類算法。
1? Stacking集成學習方法
1.1? Stacking算法思想
集成學習主要包括Bagging、Boosting和Stacking算法。Bagging和Boosting中的基學習器一般為同類型的學習器,而Stacking集成是異質(zhì)的[5]。與Bagging和Boosting不同的是,Stacking通過學習的方式結(jié)合基分類器,以修正基分類器偏差的方式提高整個分類器的泛化能力。從結(jié)構(gòu)上來看,它是一種多層的分類器的結(jié)構(gòu)。基層(Base Level)的分類器即為基分類器,元層(Meta Level)的分類器稱為元分類器。Stacking算法的主要思想是:通過基分類器將數(shù)據(jù)進行分類,再將基分類器輸出的分類結(jié)果作為元分類器的輸入結(jié)果進行分類,從而達到最終的分類結(jié)果。
1.2? Stacking算法流程
為了防止過擬合,本文使用交叉驗證的方式來訓練基學習器。基于光譜數(shù)據(jù)和Stacking算法的步驟為[3]:
Algorithm 1 Stacking Algorithm
輸入:訓練數(shù)據(jù)集(200×481)? ? 測試數(shù)據(jù)集(159×481)
基學習器Ni(i=1,…,n)元學習器M
分類類別數(shù)m
輸出:分類結(jié)果
(1)對每一個基學習器Ni,利用訓練集數(shù)據(jù),進行K折交叉驗證,獲得n個訓練集的特征矩陣,將這n個矩陣的信息進行合并,即按列進行合并,得到新的訓練集數(shù)據(jù)D1;
(2)在進行交叉驗證的同時,對測試集進行預測,從而得到由一個基學習器學習得到的K種預測數(shù)據(jù),將該預測數(shù)據(jù)取平均,作為基學習器對測試集的最終預測結(jié)果。與步驟一類似,我們會得到n個訓練集的特征矩陣,將這n個矩陣的信息進行合并,即按列進行合并,得到新的測試集數(shù)據(jù)D2;
(3)將步驟一和步驟二得到的新的訓練數(shù)據(jù)集D1對元分類器進行訓練。再利用新的測試數(shù)據(jù)D2以及訓練好的元分類器,對測試集進行預測,得到最終的分類結(jié)果。
在基于Stacking的分類問題中,對于基分類器的輸出結(jié)果,一般不直接輸出分類結(jié)果,因為分類的結(jié)果并沒有辦法取平均,或者說,對類別取平均是沒有意義的。一個可行的解決方法是,輸出對各類別的判斷概率。在Python的機器學習模塊中,在每個分類器的內(nèi)部,會計算分類器對樣本的每個類別的概率,從而將最大概率所在的類作為結(jié)果輸出。由此,本文將基分類器對每個樣本的各類別的判斷概率作為預測的輸出結(jié)果。
Stacking算法的示意圖如圖1和圖2所示。
2? BP神經(jīng)網(wǎng)絡(luò)模型
2.1? BP神經(jīng)網(wǎng)絡(luò)定義及結(jié)構(gòu)
BP神經(jīng)網(wǎng)絡(luò)的定義是:采用誤差反向傳播算法(BP:Error Back-propagation Algorithm)的多層前反饋人工神經(jīng)網(wǎng)絡(luò)。
BP神經(jīng)網(wǎng)絡(luò)通常由輸入層、隱含層和輸出層組成,層與層之間全互聯(lián),每層節(jié)點之間不相連。它的輸入層節(jié)點取訓練樣本的特征維數(shù),輸出層節(jié)點的個數(shù)取類別的個數(shù)。隱藏層節(jié)點目前尚無確定的標準。
具有一個隱藏層的BP神經(jīng)網(wǎng)絡(luò)的拓撲結(jié)構(gòu)如圖3所示。
2.2? BP神經(jīng)網(wǎng)絡(luò)思想
BP算法的基本思想是把學習過程分為兩個階段:第一階段(正向傳播過程),給出輸入信息通過輸入層經(jīng)各隱層逐層處理并計算每個單元的實際輸出值;第二階段(反向過程),若在輸出層未能得到期望的輸出值,則逐層遞歸地計算實際輸出與期望輸出之間的差值(即誤差),通過梯度下降法來修改權(quán)值,使得總誤差函數(shù)達到最小[6]。
2.3? BP神經(jīng)網(wǎng)絡(luò)算法步驟
BP神經(jīng)網(wǎng)絡(luò)的算法步驟為[6]:
Algorithm 2 Back Propagation Neural Network
(1)權(quán)值初始化:wij=Random()? ?wjk=Random();
(2)依次輸入訓練樣本集。設(shè)當前輸入為第p個樣本;
(3)依次計算各層的輸出:xj,yk,j=0,1, …,n1? k=0,1,…,m-1
(4)求各層的反向傳遞誤差:;
(5)記錄已學習過的樣本數(shù)p。如果p
(6)按權(quán)值修正公式修正各層的權(quán)值和閾值;
(7)按新的權(quán)值在計算xj(p),yk和EA,若對每個p和k都滿足|dk(p)-yk(p)|< ε,或達到最大迭代次數(shù),則終止訓練。否則轉(zhuǎn)到第二步繼續(xù)新一輪的學習訓練。
設(shè)BP神經(jīng)網(wǎng)絡(luò)的輸入矢量為XRn,其中X=(x1,x2,…,xn)T;隱藏層含有n1個神經(jīng)元,它們的輸出為XRn1,X=(x1,x2,…,xn)T;輸出層有m個神經(jīng)元,輸出yRm,y=(y0,y1,… ,ym-1)T。輸入層到隱藏層的權(quán)值為wij;隱藏層到輸出層的權(quán)值為wjk。
設(shè)訓練樣本集有P個樣本,對應的期望輸出(即真實類別)為d(1),d(2),…,d(p),設(shè)當所有樣本都輸出一次后,總誤差為EA=(dk(p)-yk(p))2。
BP神經(jīng)網(wǎng)絡(luò)算法流程如圖4所示。
3? 光譜分類最佳算法探究
本文使用光譜數(shù)據(jù)進行光譜分類。其中,測試集樣本共有200條,含有481個特征,訓練集樣本共有159條,含有481個特征。
3.1? 單分類器分類性能
本文選取四種分類算法:LDA線性判別分析算法、決策樹算法、隨機森林算法、樸素貝葉斯算法。在不進行集成學習的情況下,分別討論上述四種分類算法對光譜數(shù)據(jù)分類的準確率。
分別利用Python的sklearn庫中的函數(shù),利用訓練集和測試集分別進行5次分類預測,將5次的準確率取平均作為單分類器的分類準確率。測試結(jié)果如表1所示。
分析測試結(jié)果,可以得出結(jié)論:隨機森林算法的準確率較高。
3.2? 基于單分類器的特征維數(shù)討論
由于數(shù)據(jù)集的特征維數(shù)較多,可能導致噪聲較大,對分類的效果可能會有影響。因此,本文在單分類器的基礎(chǔ)上,對數(shù)據(jù)進行降維,討論維數(shù)對上述四種分類器的分類性能的影響。
首先,本文利用主成分分析法對數(shù)據(jù)進行降維。利用Python編寫主成分分析法的程序,對數(shù)據(jù)集進行降維,并生成降維后的新的數(shù)據(jù)集。
為了能夠盡可能減小降維后的主成分損失的信息,本文選取的主成分的累積貢獻率規(guī)定高于85%。本文摘取一部分數(shù)據(jù)進行展示,如表2所示,并由此決定我們要將數(shù)據(jù)降到多少維。
表2? 主成分累積貢獻率表
接下來,本文將進行以下測試:將光譜數(shù)據(jù)集分別降到20,25,30,35,…,100維,分別測試四個單分類器的準確率。注意,單分類器的準確率均為多次測量取平均值得到的結(jié)果,繪制出準確率隨維度的變化趨勢圖,如圖5所示。
分析測試結(jié)果,可以得出以下結(jié)論:
當使用主成分分析對數(shù)據(jù)進行降維時,單分類器的準確率的峰值均高于降維前的準確率。若采用基于主成分分析的單分類器對光譜數(shù)據(jù)進行分類,效果較好的是LDA線性判別分析法和樸素貝葉斯分類法。
3.3? 多分類器融合的Stacking算法
在3.1和3.2節(jié),本文分別探討了單分類器的分類性能以及特征降維后的分類性能。在本節(jié),將討論多分類器融合的Stacking模型的分類性能。
3.3.1? 基學習器的選取
在本文中,選取LDA線性判別分析模型,決策樹,隨機森林以及樸素貝葉斯分類器作為基學習器。
3.3.2? 元學習器的選取
在本文中,分別討論將LDA線性判別分析,BP神經(jīng)網(wǎng)絡(luò)模型作為元學習器的Stacking模型的分類性能。
3.3.3? 將LDA作為元學習器的Stacking模型
利用Python實現(xiàn)Stacking算法,并將LDA作為Stacking算法的元學習器,利用未降維的光譜數(shù)據(jù)進行訓練,并對光譜數(shù)據(jù)進行分類。多次測量分類的準確率從并且取平均值。最終得到的分類準確率為82%。
與單分類器進行對比,可以得出結(jié)論:將LDA作為元分類器的Stacking分類器融合模型的分類性能明顯高于單分類器。
3.3.4? 將BP神經(jīng)網(wǎng)絡(luò)作為元學習器的Stacking模型
利用Python實現(xiàn)BP神經(jīng)網(wǎng)絡(luò)算法,并將BP神經(jīng)網(wǎng)絡(luò)作為Stacking算法的元學習器,對光譜數(shù)據(jù)進行分類,并且多次測量取平均值。
本文實現(xiàn)BP神經(jīng)網(wǎng)絡(luò)時,將Sigmoid函數(shù)作為激勵函數(shù)。由于本文選取了四個分類器作為基分類器,每個基分類器得到的新特征數(shù)據(jù)的維度為7,因此設(shè)置輸入節(jié)點為28個。并設(shè)置隱藏層節(jié)點為10個,輸出節(jié)點為7個。最終得到的分類準確率為94%。
與單分類器和基于LDA的Stacking模型相比,將BP神經(jīng)網(wǎng)絡(luò)模型作為元學習器的Stacking模型的分類性能大大提升,達到了94%。因此,基于BP神經(jīng)網(wǎng)絡(luò)模型的Stacking模型的分類性能最佳。
3.4? 基于BP神經(jīng)網(wǎng)絡(luò)的Stacking模型的其他討論
在3.1節(jié)中,本文提到BP神經(jīng)網(wǎng)絡(luò)隱藏層節(jié)點目前尚無確定的標準。因此本文將在此節(jié)探討最佳的隱藏層節(jié)點個數(shù)。除此以外,由于光譜數(shù)據(jù)集特征較多,本文將在此節(jié)探討最佳的特征維數(shù)。
3.4.1? 隱藏層節(jié)點最佳個數(shù)的探討
本文分別測試隱藏層節(jié)點為5,6,7…,15的模型的準確率,并繪制變化趨勢圖,如圖6所示。可以看出,當隱藏層節(jié)點個數(shù)為5時,基于BP神經(jīng)網(wǎng)絡(luò)的Stacking模型的分類性能較佳。
3.4.2? 最佳特征維數(shù)的選取
本文將進行以下測試:將光譜數(shù)據(jù)集分別降到20,25,30,35,…,100維,設(shè)置BP神經(jīng)網(wǎng)絡(luò)的隱藏層節(jié)點個數(shù)為5,分別測試基于BP神經(jīng)網(wǎng)絡(luò)的Stacking模型的準確率,并且多次測量取平均值得到的結(jié)果。繪制出準確率隨維度的變化趨勢圖,并標出最佳的特征維數(shù),如圖7所示,可以得到最佳的特征維數(shù)為85。
4? 結(jié)? 論
通過對多種分類算法策略的探究,可以得出以下結(jié)論:當使用單分類器時,分類效果較好的是隨機森林算法。當對數(shù)據(jù)進行降維后,各個單分類器的最佳分類準確率均有所上升。此時,分類效果較好的單分類器是LDA模型和樸素貝葉斯分類器。相較于單分類器,將多種分類器融合的Stacking算法效果更佳。當選取LDA模型作為Stacking算法的元學習器時,分類的準確率可達到82%。當選取神經(jīng)網(wǎng)絡(luò)作為Stacking算法的元學習器時,分類的準確率可達到94%。在數(shù)據(jù)未降維的情況下,將BP神經(jīng)網(wǎng)絡(luò)的隱藏層節(jié)點設(shè)置為5個時,Stacking模型的分類準確率最佳,平均可達95.1%。當BP神經(jīng)網(wǎng)絡(luò)的隱藏層節(jié)點設(shè)置為5個時,利用主成分分析法對數(shù)據(jù)進行降維。當數(shù)據(jù)維度降至85維時,Stacking模型的分類準確率最佳,平均可達96.2%。綜上所述,基于BP神經(jīng)網(wǎng)絡(luò)的Stacking算法是最佳的光譜分類算法。
參考文獻:
[1] 何麗,韓文秀.用元決策樹組合多個分類器的方法 [J].計算機工程,2005(12):18-19+80.
[2] 秦飛.基于半監(jiān)督學習的文本分類研究 [D].四川:西南交通大學,2010.
[3] 李昆明,厲文婕.基于利用BP神經(jīng)網(wǎng)絡(luò)進行Stacking模型融合算法的電力非節(jié)假日負荷預測研究 [J].軟件,2019,40(9):176-181.
[4] 包志強,胡嘯天,趙媛媛,等.基于熵權(quán)法的Stacking算法 [J].計算機工程與設(shè)計,2019,40(10):2885-2890.
[5] 曹婷婷,張忠林.代價敏感的KPCA-Stacking不均衡數(shù)據(jù)分類算法 [J].計算機工程與科學,2021,43(3):525-533.
[6] 孫娓娓.BP神經(jīng)網(wǎng)絡(luò)的算法改進及應用研究 [D].重慶:重慶大學,2009.
作者簡介:林苗芳(2002.02—),女,漢族,廣東汕尾人,本科在讀,研究方向:信息與計算科學。