1. 程式人生 > >機器學習筆記(八)整合學習

機器學習筆記(八)整合學習

8.整合學習

8.1個體與整合

整合學習(ansemblelearning)通過構建並結合多個學習器來完成學習任務,也稱為多分類器系統(multi-classifiersystem)、基於委員會的學習(committee-based learning)。

整合學習的一般結構:先產生一組個體學習器(individual learner),再用某種策略將它們結合起來。個體學習器通常由一個現有的學習演算法從訓練資料產生,如決策樹演算法、BP神經網路等。如果整合中只包含同種型別的個體學習器,則整合是同質的(homogeneous);同質整合中的個體學習器也稱為基學習器(base learner),相應的學習演算法稱為基學習演算法(base learningalgorithm)。如果整合中包含不同型別的個體學習器,則整合是異質的(heterogenous);異質整合中的個體學習器由不同的學習演算法生成,個體學習器稱為元件學習器(component learner)。

說了定義,那麼整合學習器是否比個體學習器泛化效能更顯著呢?先引入弱學習器(weak learner)的定義,弱學習器常指泛化效能略優於隨機猜測的學習器,例如在二分類問題上精度略高於50%的分類器。換句話說,弱學習器的結果接近於靠猜。整合學習通過將多個學習器進行結合,通常可以獲得比單一學習器顯著優越的泛化效能,這對弱學習器尤其明顯,因此整合學習的很多理論研究是針對弱學習器進行的,而基學習器有時也被直接成為弱學習器。

現在問題是:整合學習把多個學習器結合起來,怎樣能獲得比單一學習器更好的效能呢?要獲得好的整合,個體學習器應好而不同,即個體學習器要有一定的準確性,即學習器不太壞,並且要有多樣性(diversity),即學習器間具有差異。


如上,整合學習就是把所有個體學習器的結果做簡單的投票,這樣就能獲得比個體學習器更好的泛化效能。等等,沒有這麼好的事了,要這樣說,需要滿足一個關鍵假設:基學習器的誤差相互獨立。然後在現實任務中,個體學習器時為解決同一問題訓練出來的,它們顯然不可能相互獨立。事實上,個體學習器的準確性和多樣性本身就存在衝突。一般的,準確性很高之後,要增加多樣性就要犧牲準確性。

因此,如何產生並結合好而不同的個體學習器,就是整合學習研究的核心,就是怎麼整合?整合怎麼樣的個體學習器?根據個體學習器的生成方式,目前的整合學習方法大致可分為兩大類:1)個體學習器間存在強依賴關係、必須序列生成的序列化方法,代表是Boosting;2)個體學習器間不存在強依賴關係、可同時生成的並行化方法,代表是Bagging和隨機森林(Random Forest)。

8.2Boosting

Boosting是一族可將弱學習器提升為強學習器的演算法。這族演算法的工作機制類似:先從初始訓練集訓練出一個基學習器,再根據基學習器的表現對訓練樣本分佈進行調整,使得先前基學習器做錯的訓練樣本在後續收到更多關注,然後基於調整後的樣本分佈來訓練下一個基學習器;如此重複進行,直至基學習器數達到事先指定的值T,最終將這T個基學習器進行加權結合。簡單來說,就是基於同一訓練集和同一個演算法訓練出T個基學習器,每一輪訓練都針對上一輪的訓練結果調整樣本分佈。

Boosting族演算法最著名的代表是AdaBoost,其中yi∈{-1,+1},f是真實函式,演算法描述如下:




這個就是演算法中的樣本分佈更新公式。

上面這三點的公式,從基於加性模型迭代式優化指數損失函式的角度推匯出了AdaBoost演算法。

Boosting演算法要求基學習器對特定的資料分佈進行學習,可通過重賦權法(re-weighting)實施,即在訓練過程的每一輪中,根據樣本分佈為每個訓練樣本重新賦予一個權重。對無法接受帶權樣本的基學習演算法,則可通過重取樣法(re-sampling)來處理,即在每一輪學習中,根據樣本分佈對訓練集重新進行取樣,再用重取樣而得的樣本集對基學習器進行訓練。這兩種方法無優劣差別。

Boosting演算法在訓練的每一輪都要檢查當前生成的基學習器是否滿足基本條件(如AdaBoost中檢查當前基分類器是否是比隨機猜測好),一旦條件不滿足,則當前基學習器即被拋棄,且學習過程停止。在此種情形下,初始設定的學習輪數T也許還遠未達到,可能導致最終整合中值包含很少的基學習器而效能不佳。若採用重取樣法,則可獲得重啟動機會以避免訓練過程過早停止,即在不拋棄不滿足條件的當前基學習器之後,可根據當前分佈重新對訓練樣本進行取樣,再基於新的取樣結果重新訓練出基學習器,從而使得學習過程可以持續到預設的T輪完成。

從偏差-方差分解的角度看,Boosting主要關注降低偏差。偏差描述的是預測值(估計值)的期望與真實值之間的差距;偏差越大,越偏離真實資料。方差描述的是預測值的變化範圍,離散程度,也就是離其期望值的距離;方差越大,資料的分佈越分散。因此Boosting能基於泛化效能相當弱的學習器構建出很強的整合。可以參照文中的西瓜資料集並以決策樹樁為基學習器執行AdaBoost演算法,比較不同規模的整合及其基學習器所對應的分類邊界。

8.3Bagging與隨機森林

本文說明採用並行化的個體學習器生成方式,和上文的Boosting序列化要求個體學習器存在強依賴關係不同的是,該生成方式是基於個體學習器應儘可能相互獨立。獨立的個體學習器可以得到泛化效能強的整合;當然現實中不存在絕對的獨立,不過可以設法使基學習器儘可能具有較大差異。一種方法就是對訓練樣本進行取樣,產生出若干個不同的子集,再從每個資料集子集中訓練出一個基學習器。不過如果取樣出的每個子集完全不同,那麼每個基學習器只用到了部分訓練資料,可能都無法進行有效學習。因此,考慮使用相互有交疊的取樣子集。


假定基學習器的計算複雜度為O(m),則Bagging的複雜度大致為T(O(m)+O(s)),因取樣與投票/平均過程的複雜度O(s)很小,且T是一個不太大的常數(訓練輪數),因此,訓練一個Bagging整合與直接使用基學習演算法訓練一個學習器的複雜度同階,可見Bagging是一個高效的整合學習演算法。與標準的AdaBoost演算法只適用於二分類任務不同,Bagging能不經修改地用於多分類、迴歸等任務。

自助取樣過程還給Bagging帶來一個優點:由於每個基學習器只使用了初始訓練集中約63.2%的樣本,剩下的約36.8%的樣本可用作驗證集來對泛化效能進行包外估計(out-of-bag estimate),為此需記錄每個基學習器所使用的訓練樣本。令Dt表示ht實際使用的訓練樣本集,令Hoob(x)表示對樣本x的包外預測,即僅考慮哪些未使用x訓練的基學習器在x上的預測,有:


事實上,包外樣本還有其他用途,如當基學習器是決策樹時,可使用包外樣本來輔助剪枝,或用於估計決策樹中各結點的後驗概率以輔助對零訓練樣本結點的處理;當基學習器是神經網路時,可使用包外樣本來輔助早起停止以減小過擬合風險。

從偏差-方差分解的角度看,Bagging主要關注降低方差,因此它在不剪枝決策樹、神經網路等易受樣本擾動的學習器上效用更為明顯。

隨機森林(RandomForest,簡稱RF)是Bagging的一個擴充套件變體。RF在以決策樹為基學習器構建Bagging整合的基礎上,進一步在決策樹的訓練過程中引入了隨機屬性選擇。具體來說,傳統決策樹在選擇劃分屬性時是在當前結點的屬性集合(假定有d個屬性)中選擇一個最優屬性;而在RF中,對基決策樹的每個結點,先從該結點的屬性集合中隨機選擇一個包含k個屬性的子集,然後再從這個子集中選擇一個最優屬性用於劃分。引數k控制了隨機性的引入程度:若令k=d,則基決策樹的構建與傳統決策樹相同;若令k=1,則是隨機選擇一個屬性用於劃分;一般情況下,推薦值k=log2d。

隨機森林簡單、容易實現、計算開銷小,在很多現實任務中展現出強大的效能,被譽為”代表整合學習技術水平的方法”。隨機森林對Bagging做了小改動,但與Bagging中基學習器的多樣性僅通過樣本擾動(通過對初始訓練集取樣)而來不同,隨機森林中基學習器的多樣性不僅來自樣本擾動,還來自屬性擾動,使得最終整合的泛化效能可通過個體學習器之間差異度的增加來進一步提升。

隨機森林的收斂性與Bagging相似。隨機森林的起始效能往往相對較差,特別是在整合中只包含一個基學習器時,因為通過引入屬性擾動,隨機森林中個體學習器的效能往往有所降低,然後隨著個體學習器的數目增加,隨機森林通常會收斂到更低的泛化誤差。隨機森林的訓練效率常優於Bagging,因為在個體決策樹的構建過程中,Bagging使用的是確定型決策樹,在選擇劃分屬性屬性時對結點的所有屬性進行考察,而隨機森林使用的隨機型決策樹只需考察一個屬性子集。

其實對於整合學習,首先要證明的就是為什麼整合比個體好?第一節已證明,隨著整合中個體分類器數目T的增大,整合的錯誤率將指數級下降。既然整合比個體好,那麼如何生成基學習器並結合呢?第二節和第三節分別從個體學習器生成的不同方式介紹了序列Boosting方法和並行Bagging方法,這裡主要說明過了個體生成方法,而對結合方法則採用簡單投票法或平均法,那麼下一節就會重點說明基學習器如何結合更好得到整合學習器。

8.4結合策略

對於個體學習器生成方式,上面介紹了序列的Boosting和並行的Bagging,那麼這裡就要說到個體學習器生成之後如何結合,從而形成整合學習的效應。

整合學習器由三方面的好處:

1)統計上,由於學習任務的假設空間往往很大,可能有多個假設在訓練集上達到同等效能,此時若使用單學習器可能因誤選而導致泛化效能不佳,結合多個學習器則會減小這一風險;

2)計算上,學習演算法往往會陷入區域性極小,有的區域性極小點所對應的泛化效能可能很差,而通過多次執行之後進行結合,可降低陷入較差的區域性極小點風險;

3)表示上,某些學習任務的真實假設可能不在當前學習演算法所考慮的假設空間中,此時若使用單學習器是無效的,而通過結合多個學習器,由於相應假設空間有所擴大,有可能學得更好的近似。

一言以蔽之,不斷迭代和結合總能克服單個的缺陷。假定整合包含T個基學習器{h1,h2,…,hT},其中hi在示例x上的輸出為hi(x)。下面三種是常見的對hi進行結合的策略。



信度可轉化為類概率使用。若此類值未進行規範化,例如支援向量機的分類間隔值,則必須使用一些技術如Platt縮放(Platt scaling)、等分迴歸(isotonic regression)等進行校準(calibration)後才能作為類概率使用。雖然分類器估計出的類概率值一般都不太準確,但基於類概率進行結合卻往往比直接基於類標記進行結合效能更好。若基學習器的型別不同,則其類概率值不能直接進行比較,這種情形下,通常可將類概率值轉化為類標記輸出然後再投票。

3)學習法

當訓練資料很多時,用學習法的結合策略整合,通過另一個學習器來進行結合。Stacking是學習法的典型代表,個體學習器稱為初級學習器,用於結合的學習器稱為次級學習器或元學習器(meta-learner)。

Stacking先從初始資料集訓練出初級學習器,然後生成一個新資料集用於訓練次級學習器。在這個新資料集中,初級學習器的輸出被當做樣例輸入特徵,而初始樣本的標記仍被當做樣例標記。假定初級學習器使用不同學習演算法產生,即初級整合是異質的,演算法描述如下:


次級學習器的輸入屬性表示和次級學習演算法對Stacking整合的泛化效能有很大影響。研究表明,將初級學習器的輸出類概率作為次級學習器的輸入屬性,用多響應線性迴歸(multi-response linear regression,MLR)作為次級學習演算法效果較好,在MLR中使用不同的屬性集更佳。

貝葉斯模型平均(bayes model averaging,BMA)基於後驗概率來為不同模型賦予權重,可視為加權平均法的一種實現。對Stacking和BMA進行比較,理論上來說,若資料生成模型恰在當前考慮的模型中,且資料噪聲較少,則BMA不差於Stacking;然後在現實應用中無法確保資料生成模型一定在當前考慮的模型中,甚至可能難以用當前考慮的模型來進行近似。因此,Stacking通常優於BMA,因為其魯棒性比BMA好,而且BMA對買模型近似誤差非常敏感。

個人感覺,整合的結合策略是一個因地制宜的解決方案,前人摸索的也只能作為參考,在實際應用中,還要考慮訓練集的獨特性。

8.5多樣性

從基學習器生成方式到結合策略都做了介紹,這一節主要是說如何構架多樣性的基學習器。要構建泛化能力強的整合,個體學習學習器應好而不同,其理論分析如下。


求解,就可以得到最優集成了。實則不然,因為 是在整合構造之後才能進行估計,所以不是一個可直接操作的多樣性度量,換句話說,用於事後評估但無法事前求解。另外值得注意的是,這個理論的推導過程只適用於迴歸學習,不能直接推廣到分類任務上去。從誤差-分歧分解的過程就可以看出,無論是預測輸出的結果還是概率密度都體現了連續性。

證明了好而不同的個體學習器可構建強大泛化效能的整合學習器,那麼怎麼定義個體學習器是不同的呢?是多樣性的呢?用多樣性度量指標。顧名思義,多樣性度量(diversity measure)是用於度量整合中個體分類器的多樣性,即估算個體學習器的多樣化程度。要比較差異化,典型做法就是對個體分類器進行兩兩相似或不相似性分析。

給定資料集D={(x1,y1),(x2,y2),…,(xm,ym)},對二分類任務,yi∈{-1,+1},分類器hi和hj的預測結果列聯表(contingency table)為:

hi=+1

hi=-1

hj=+1

hj=-1  

a

b

c

d

其中,a表示hi和hj均預測為正類的樣本數目,b、c、d含義類推;m=a+b+c+d。

基於這個列聯表,常見的多樣性度量:


我們肯定了好而不同的個體學習器整合之後泛化效能更佳,也給出如何評估多樣性的個體學習器,那麼問題是怎麼讓個體學習器呈現多樣性呢?尤其是同質個體學習器。這裡就要說到如何增強個體學習器多樣性的方法。一般思路是在學習過程中引入隨機性,常見做法主要是對資料樣本、輸入屬性、輸出表示、演算法引數進行擾動。

1)資料樣本擾動

給定初始資料集,從中產生出不同的資料子集,再利用不同的資料子集訓練出不同的個體學習器。資料樣本擾動通常是基於取樣法,如在Bagging中採用自助取樣、Adaboost中採用序列取樣等。很多常見的基學習器,如決策樹、神經網路等,訓練樣本稍加變化就會導致學習器顯著變動,資料樣本擾動對這類不穩定基學習器很有效。但有些基學習器對資料樣本的擾動不敏感,如線性學習器、支援向量機、樸素貝葉斯、k近鄰學習器等,這類基學習器稱為穩定學習器(stable base learner),對該類基學習器進行整合往往需使用輸入屬性擾動等其他機制。

2)輸入屬性擾動

訓練樣本通常由一組屬性描述,不同的子空間(subspace,即屬性子集)提供了觀察資料的不同視角。顯然,從不同子空間訓練出的個體學習器必然有所不同。隨機子空間演算法(random subspace)就依賴於輸入屬性擾動,演算法從初始屬性集中抽取出若干個屬性子集,再基於每個屬性子集訓練一個基學習器。演算法如下:


對包含大量冗餘屬性的資料,在子空間中訓練個體學習器不僅能產生多樣性大的擾動,還會因屬性數的減少而大幅節省時間開銷,同時,由於冗餘屬性多,減少一些屬性後訓練出的個體學習器也不至於太差。若資料只包含少量屬性,或者冗餘屬性較少,則不宜使用輸入屬性擾動法。

3)輸出表示擾動

思路是對輸出表示進行操作以增強多樣性。可對訓練個樣本的類標記稍作變動,如翻轉法(flipping output)隨機改變一些訓練樣本的標記,也可對輸出表示進行轉化,如輸出調製法(output smearing)將分類輸出轉化為迴歸輸出後構建個體學習器;還可將原任務拆解為多個可同時求解的子任務,如ECOC法利用糾錯輸出碼將多分類任務拆解為一系列二分類任務來訓練基學習器。

4)演算法引數擾動

基學習演算法一般都有引數設定,如神經網路的隱層神經元數、初始連線權值等,通過隨機設定不同的引數,往往可產生差別較大的個體學習器。如負相關法(Negative Correlation)顯示地通過正則化項來強制個體神經網路使用不同的引數。對引數較少的演算法,可通過將其學習過程中某些環節用其他類似方式代替,從而達到擾動的目的,如可將決策樹使用的屬性選擇機制替換成其他屬性選擇機制。使用單一學習器時通常需使用交叉驗證等方法來確定引數值,這事實上已使用了不同引數訓練出多個學習器,只不過最終僅選擇其中一個學習器進行使用,而整合學習則相當於把這些學習器都利用起來;由此可見,整合學習技術的實際計算開銷並不比使用單一學習器大很多。

不同的多樣性增強機制可同時使用,如隨機森林中同時使用了資料樣本擾動和輸入屬性擾動。