机器学习笔记(八)集成学习
8.集成學習
8.1個體與集成
集成學習(ansemblelearning)通過構建并結合多個學習器來完成學習任務,也稱為多分類器系統(tǒng)(multi-classifiersystem)、基于委員會的學習(committee-based learning)。
集成學習的一般結構:先產(chǎn)生一組個體學習器(individual learner),再用某種策略將它們結合起來。個體學習器通常由一個現(xiàn)有的學習算法從訓練數(shù)據(jù)產(chǎn)生,如決策樹算法、BP神經(jīng)網(wǎng)絡等。如果集成中只包含同種類型的個體學習器,則集成是同質的(homogeneous);同質集成中的個體學習器也稱為基學習器(base learner),相應的學習算法稱為基學習算法(base learningalgorithm)。如果集成中包含不同類型的個體學習器,則集成是異質的(heterogenous);異質集成中的個體學習器由不同的學習算法生成,個體學習器稱為組件學習器(component learner)。
說了定義,那么集成學習器是否比個體學習器泛化性能更顯著呢?先引入弱學習器(weak learner)的定義,弱學習器常指泛化性能略優(yōu)于隨機猜測的學習器,例如在二分類問題上精度略高于50%的分類器。換句話說,弱學習器的結果接近于靠猜。集成學習通過將多個學習器進行結合,通常可以獲得比單一學習器顯著優(yōu)越的泛化性能,這對弱學習器尤其明顯,因此集成學習的很多理論研究是針對弱學習器進行的,而基學習器有時也被直接成為弱學習器。
現(xiàn)在問題是:集成學習把多個學習器結合起來,怎樣能獲得比單一學習器更好的性能呢?要獲得好的集成,個體學習器應好而不同,即個體學習器要有一定的準確性,即學習器不太壞,并且要有多樣性(diversity),即學習器間具有差異。
如上,集成學習就是把所有個體學習器的結果做簡單的投票,這樣就能獲得比個體學習器更好的泛化性能。等等,沒有這么好的事了,要這樣說,需要滿足一個關鍵假設:基學習器的誤差相互獨立。然后在現(xiàn)實任務中,個體學習器時為解決同一問題訓練出來的,它們顯然不可能相互獨立。事實上,個體學習器的準確性和多樣性本身就存在沖突。一般的,準確性很高之后,要增加多樣性就要犧牲準確性。
因此,如何產(chǎn)生并結合好而不同的個體學習器,就是集成學習研究的核心,就是怎么集成?集成怎么樣的個體學習器?根據(jù)個體學習器的生成方式,目前的集成學習方法大致可分為兩大類:1)個體學習器間存在強依賴關系、必須串行生成的序列化方法,代表是Boosting;2)個體學習器間不存在強依賴關系、可同時生成的并行化方法,代表是Bagging和隨機森林(Random Forest)。
8.2Boosting
Boosting是一族可將弱學習器提升為強學習器的算法。這族算法的工作機制類似:先從初始訓練集訓練出一個基學習器,再根據(jù)基學習器的表現(xiàn)對訓練樣本分布進行調整,使得先前基學習器做錯的訓練樣本在后續(xù)收到更多關注,然后基于調整后的樣本分布來訓練下一個基學習器;如此重復進行,直至基學習器數(shù)達到事先指定的值T,最終將這T個基學習器進行加權結合。簡單來說,就是基于同一訓練集和同一個算法訓練出T個基學習器,每一輪訓練都針對上一輪的訓練結果調整樣本分布。
Boosting族算法最著名的代表是AdaBoost,其中y i∈{-1,+1},f是真實函數(shù),算法描述如下:
這個就是算法中的樣本分布更新公式。
上面這三點的公式,從基于加性模型迭代式優(yōu)化指數(shù)損失函數(shù)的角度推導出了AdaBoost算法。
Boosting算法要求基學習器對特定的數(shù)據(jù)分布進行學習,可通過重賦權法(re-weighting)實施,即在訓練過程的每一輪中,根據(jù)樣本分布為每個訓練樣本重新賦予一個權重。對無法接受帶權樣本的基學習算法,則可通過重采樣法(re-sampling)來處理,即在每一輪學習中,根據(jù)樣本分布對訓練集重新進行采樣,再用重采樣而得的樣本集對基學習器進行訓練。這兩種方法無優(yōu)劣差別。
Boosting算法在訓練的每一輪都要檢查當前生成的基學習器是否滿足基本條件(如AdaBoost中檢查當前基分類器是否是比隨機猜測好),一旦條件不滿足,則當前基學習器即被拋棄,且學習過程停止。在此種情形下,初始設置的學習輪數(shù)T也許還遠未達到,可能導致最終集成中值包含很少的基學習器而性能不佳。若采用重采樣法,則可獲得重啟動機會以避免訓練過程過早停止,即在不拋棄不滿足條件的當前基學習器之后,可根據(jù)當前分布重新對訓練樣本進行采樣,再基于新的采樣結果重新訓練出基學習器,從而使得學習過程可以持續(xù)到預設的T輪完成。
從偏差-方差分解的角度看,Boosting主要關注降低偏差。偏差描述的是預測值(估計值)的期望與真實值之間的差距;偏差越大,越偏離真實數(shù)據(jù)。方差描述的是預測值的變化范圍,離散程度,也就是離其期望值的距離;方差越大,數(shù)據(jù)的分布越分散。因此Boosting能基于泛化性能相當弱的學習器構建出很強的集成。可以參照文中的西瓜數(shù)據(jù)集并以決策樹樁為基學習器運行AdaBoost算法,比較不同規(guī)模的集成及其基學習器所對應的分類邊界。?
8.3Bagging與隨機森林
本文說明采用并行化的個體學習器生成方式,和上文的Boosting串行化要求個體學習器存在強依賴關系不同的是,該生成方式是基于個體學習器應盡可能相互獨立。獨立的個體學習器可以得到泛化性能強的集成;當然現(xiàn)實中不存在絕對的獨立,不過可以設法使基學習器盡可能具有較大差異。一種方法就是對訓練樣本進行采樣,產(chǎn)生出若干個不同的子集,再從每個數(shù)據(jù)集子集中訓練出一個基學習器。不過如果采樣出的每個子集完全不同,那么每個基學習器只用到了部分訓練數(shù)據(jù),可能都無法進行有效學習。因此,考慮使用相互有交疊的采樣子集。
假定基學習器的計算復雜度為O(m),則Bagging的復雜度大致為T(O(m)+O(s)),因采樣與投票/平均過程的復雜度O(s)很小,且T是一個不太大的常數(shù)(訓練輪數(shù)),因此,訓練一個Bagging集成與直接使用基學習算法訓練一個學習器的復雜度同階,可見Bagging是一個高效的集成學習算法。與標準的AdaBoost算法只適用于二分類任務不同,Bagging能不經(jīng)修改地用于多分類、回歸等任務。
自助采樣過程還給Bagging帶來一個優(yōu)點:由于每個基學習器只使用了初始訓練集中約63.2%的樣本,剩下的約36.8%的樣本可用作驗證集來對泛化性能進行包外估計(out-of-bag estimate),為此需記錄每個基學習器所使用的訓練樣本。令D t表示h t實際使用的訓練樣本集,令H oob(x)表示對樣本x的包外預測,即僅考慮哪些未使用x訓練的基學習器在x上的預測,有:
事實上,包外樣本還有其他用途,如當基學習器是決策樹時,可使用包外樣本來輔助剪枝,或用于估計決策樹中各結點的后驗概率以輔助對零訓練樣本結點的處理;當基學習器是神經(jīng)網(wǎng)絡時,可使用包外樣本來輔助早起停止以減小過擬合風險。
從偏差-方差分解的角度看,Bagging主要關注降低方差,因此它在不剪枝決策樹、神經(jīng)網(wǎng)絡等易受樣本擾動的學習器上效用更為明顯。
隨機森林(RandomForest,簡稱RF)是Bagging的一個擴展變體。RF在以決策樹為基學習器構建Bagging集成的基礎上,進一步在決策樹的訓練過程中引入了隨機屬性選擇。具體來說,傳統(tǒng)決策樹在選擇劃分屬性時是在當前結點的屬性集合(假定有d個屬性)中選擇一個最優(yōu)屬性;而在RF中,對基決策樹的每個結點,先從該結點的屬性集合中隨機選擇一個包含k個屬性的子集,然后再從這個子集中選擇一個最優(yōu)屬性用于劃分。參數(shù)k控制了隨機性的引入程度:若令k=d,則基決策樹的構建與傳統(tǒng)決策樹相同;若令k=1,則是隨機選擇一個屬性用于劃分;一般情況下,推薦值k=log2d。
隨機森林簡單、容易實現(xiàn)、計算開銷小,在很多現(xiàn)實任務中展現(xiàn)出強大的性能,被譽為”代表集成學習技術水平的方法”。隨機森林對Bagging做了小改動,但與Bagging中基學習器的多樣性僅通過樣本擾動(通過對初始訓練集采樣)而來不同,隨機森林中基學習器的多樣性不僅來自樣本擾動,還來自屬性擾動,使得最終集成的泛化性能可通過個體學習器之間差異度的增加來進一步提升。
隨機森林的收斂性與Bagging相似。隨機森林的起始性能往往相對較差,特別是在集成中只包含一個基學習器時,因為通過引入屬性擾動,隨機森林中個體學習器的性能往往有所降低,然后隨著個體學習器的數(shù)目增加,隨機森林通常會收斂到更低的泛化誤差。隨機森林的訓練效率常優(yōu)于Bagging,因為在個體決策樹的構建過程中,Bagging使用的是確定型決策樹,在選擇劃分屬性屬性時對結點的所有屬性進行考察,而隨機森林使用的隨機型決策樹只需考察一個屬性子集。
其實對于集成學習,首先要證明的就是為什么集成比個體好?第一節(jié)已證明,隨著集成中個體分類器數(shù)目T的增大,集成的錯誤率將指數(shù)級下降。既然集成比個體好,那么如何生成基學習器并結合呢?第二節(jié)和第三節(jié)分別從個體學習器生成的不同方式介紹了串行Boosting方法和并行Bagging方法,這里主要說明過了個體生成方法,而對結合方法則采用簡單投票法或平均法,那么下一節(jié)就會重點說明基學習器如何結合更好得到集成學習器。
8.4結合策略
對于個體學習器生成方式,上面介紹了串行的Boosting和并行的Bagging,那么這里就要說到個體學習器生成之后如何結合,從而形成集成學習的效應。
集成學習器由三方面的好處:
1)統(tǒng)計上,由于學習任務的假設空間往往很大,可能有多個假設在訓練集上達到同等性能,此時若使用單學習器可能因誤選而導致泛化性能不佳,結合多個學習器則會減小這一風險;
2)計算上,學習算法往往會陷入局部極小,有的局部極小點所對應的泛化性能可能很差,而通過多次運行之后進行結合,可降低陷入較差的局部極小點風險;
3)表示上,某些學習任務的真實假設可能不在當前學習算法所考慮的假設空間中,此時若使用單學習器是無效的,而通過結合多個學習器,由于相應假設空間有所擴大,有可能學得更好的近似。
一言以蔽之,不斷迭代和結合總能克服單個的缺陷。假定集成包含T個基學習器{h 1,h 2,…,h T},其中h i在示例x上的輸出為h i(x)。下面三種是常見的對h i進行結合的策略。
信度可轉化為類概率使用。若此類值未進行規(guī)范化,例如支持向量機的分類間隔值,則必須使用一些技術如Platt縮放(Platt scaling)、等分回歸(isotonic regression)等進行校準(calibration)后才能作為類概率使用。雖然分類器估計出的類概率值一般都不太準確,但基于類概率進行結合卻往往比直接基于類標記進行結合性能更好。若基學習器的類型不同,則其類概率值不能直接進行比較,這種情形下,通常可將類概率值轉化為類標記輸出然后再投票。
3)學習法
當訓練數(shù)據(jù)很多時,用學習法的結合策略集成,通過另一個學習器來進行結合。Stacking是學習法的典型代表,個體學習器稱為初級學習器,用于結合的學習器稱為次級學習器或元學習器(meta-learner)。
Stacking先從初始數(shù)據(jù)集訓練出初級學習器,然后生成一個新數(shù)據(jù)集用于訓練次級學習器。在這個新數(shù)據(jù)集中,初級學習器的輸出被當做樣例輸入特征,而初始樣本的標記仍被當做樣例標記。假定初級學習器使用不同學習算法產(chǎn)生,即初級集成是異質的,算法描述如下:
次級學習器的輸入屬性表示和次級學習算法對Stacking集成的泛化性能有很大影響。研究表明,將初級學習器的輸出類概率作為次級學習器的輸入屬性,用多響應線性回歸(multi-response linear regression,MLR)作為次級學習算法效果較好,在MLR中使用不同的屬性集更佳。
貝葉斯模型平均(bayes model averaging,BMA)基于后驗概率來為不同模型賦予權重,可視為加權平均法的一種實現(xiàn)。對Stacking和BMA進行比較,理論上來說,若數(shù)據(jù)生成模型恰在當前考慮的模型中,且數(shù)據(jù)噪聲較少,則BMA不差于Stacking;然后在現(xiàn)實應用中無法確保數(shù)據(jù)生成模型一定在當前考慮的模型中,甚至可能難以用當前考慮的模型來進行近似。因此,Stacking通常優(yōu)于BMA,因為其魯棒性比BMA好,而且BMA對買模型近似誤差非常敏感。
個人感覺,集成的結合策略是一個因地制宜的解決方案,前人摸索的也只能作為參考,在實際應用中,還要考慮訓練集的獨特性。
8.5多樣性
從基學習器生成方式到結合策略都做了介紹,這一節(jié)主要是說如何構架多樣性的基學習器。要構建泛化能力強的集成,個體學習學習器應好而不同,其理論分析如下。
求解,就可以得到最優(yōu)集成了。實則不然,因為 是在集成構造之后才能進行估計,所以不是一個可直接操作的多樣性度量,換句話說,用于事后評估但無法事前求解。另外值得注意的是,這個理論的推導過程只適用于回歸學習,不能直接推廣到分類任務上去。從誤差-分歧分解的過程就可以看出,無論是預測輸出的結果還是概率密度都體現(xiàn)了連續(xù)性。
證明了好而不同的個體學習器可構建強大泛化性能的集成學習器,那么怎么定義個體學習器是不同的呢?是多樣性的呢?用多樣性度量指標。顧名思義,多樣性度量(diversity measure)是用于度量集成中個體分類器的多樣性,即估算個體學習器的多樣化程度。要比較差異化,典型做法就是對個體分類器進行兩兩相似或不相似性分析。
給定數(shù)據(jù)集D={(x1,y1),(x2,y2),…,(xm,ym)},對二分類任務,yi∈{-1,+1},分類器hi和hj的預測結果列聯(lián)表(contingency table)為:
| ? | hi=+1 | hi=-1 |
| hj=+1 hj=-1?? | a b | c d |
其中,a表示hi和hj均預測為正類的樣本數(shù)目,b、c、d含義類推;m=a+b+c+d。
基于這個列聯(lián)表,常見的多樣性度量:
我們肯定了好而不同的個體學習器集成之后泛化性能更佳,也給出如何評估多樣性的個體學習器,那么問題是怎么讓個體學習器呈現(xiàn)多樣性呢?尤其是同質個體學習器。這里就要說到如何增強個體學習器多樣性的方法。一般思路是在學習過程中引入隨機性,常見做法主要是對數(shù)據(jù)樣本、輸入屬性、輸出表示、算法參數(shù)進行擾動。
1)數(shù)據(jù)樣本擾動
給定初始數(shù)據(jù)集,從中產(chǎn)生出不同的數(shù)據(jù)子集,再利用不同的數(shù)據(jù)子集訓練出不同的個體學習器。數(shù)據(jù)樣本擾動通常是基于采樣法,如在Bagging中采用自助采樣、Adaboost中采用序列采樣等。很多常見的基學習器,如決策樹、神經(jīng)網(wǎng)絡等,訓練樣本稍加變化就會導致學習器顯著變動,數(shù)據(jù)樣本擾動對這類不穩(wěn)定基學習器很有效。但有些基學習器對數(shù)據(jù)樣本的擾動不敏感,如線性學習器、支持向量機、樸素貝葉斯、k近鄰學習器等,這類基學習器稱為穩(wěn)定學習器(stable base learner),對該類基學習器進行集成往往需使用輸入屬性擾動等其他機制。
2)輸入屬性擾動
訓練樣本通常由一組屬性描述,不同的子空間(subspace,即屬性子集)提供了觀察數(shù)據(jù)的不同視角。顯然,從不同子空間訓練出的個體學習器必然有所不同。隨機子空間算法(random subspace)就依賴于輸入屬性擾動,算法從初始屬性集中抽取出若干個屬性子集,再基于每個屬性子集訓練一個基學習器。算法如下:
對包含大量冗余屬性的數(shù)據(jù),在子空間中訓練個體學習器不僅能產(chǎn)生多樣性大的擾動,還會因屬性數(shù)的減少而大幅節(jié)省時間開銷,同時,由于冗余屬性多,減少一些屬性后訓練出的個體學習器也不至于太差。若數(shù)據(jù)只包含少量屬性,或者冗余屬性較少,則不宜使用輸入屬性擾動法。
3)輸出表示擾動
思路是對輸出表示進行操作以增強多樣性。可對訓練個樣本的類標記稍作變動,如翻轉法(flipping output)隨機改變一些訓練樣本的標記,也可對輸出表示進行轉化,如輸出調制法(output smearing)將分類輸出轉化為回歸輸出后構建個體學習器;還可將原任務拆解為多個可同時求解的子任務,如ECOC法利用糾錯輸出碼將多分類任務拆解為一系列二分類任務來訓練基學習器。
4)算法參數(shù)擾動
基學習算法一般都有參數(shù)設置,如神經(jīng)網(wǎng)絡的隱層神經(jīng)元數(shù)、初始連接權值等,通過隨機設置不同的參數(shù),往往可產(chǎn)生差別較大的個體學習器。如負相關法(Negative Correlation)顯示地通過正則化項來強制個體神經(jīng)網(wǎng)絡使用不同的參數(shù)。對參數(shù)較少的算法,可通過將其學習過程中某些環(huán)節(jié)用其他類似方式代替,從而達到擾動的目的,如可將決策樹使用的屬性選擇機制替換成其他屬性選擇機制。使用單一學習器時通常需使用交叉驗證等方法來確定參數(shù)值,這事實上已使用了不同參數(shù)訓練出多個學習器,只不過最終僅選擇其中一個學習器進行使用,而集成學習則相當于把這些學習器都利用起來;由此可見,集成學習技術的實際計算開銷并不比使用單一學習器大很多。
不同的多樣性增強機制可同時使用,如隨機森林中同時使用了數(shù)據(jù)樣本擾動和輸入屬性擾動。
總結
以上是生活随笔為你收集整理的机器学习笔记(八)集成学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java String关于replace
- 下一篇: 机器学习知识点(十六)集成学习AdaBo