摘要:本文是理解adaboost算法與xgboost算法的前奏篇,主要介紹集成學習(Ensemble learning)的含義,在模型選擇、訓練數據過多或過少、數據融合及置信度估計等幾方面的應用,同時介紹了集成學習的兩個重要方面,即生成模型的算法,如bagging、boosting,以及組合模型結果的方法,如平均、投票等。對后續理解adaboost算法與xgboost算法起到了很好的鋪墊。同時,非常推薦讀者直接閱讀參考資料,值得推薦,本文僅是學習筆記。
在我們的日常生活中,通常做出某個最終決定之前會綜合幾個“專家”的意見。例如購買商品(特別是高價商品)之前閱讀用戶評論;在確定復雜疾病的治療方案之前會由多個專家進行會診討論;發表一篇官方正式文章之前要經過多人審閱等。這樣做的主要目的是盡量降低購買劣質產品、減少醫療事故、發表劣質文章或誤導性文章的可能性。多年來,綜合預測的原則一直被多個領域關注。金融預測界幾十年來一直在股票投資組合的場景下分析模型組合;早在20世紀90年代,機器學習社區貢獻了從數據中自動構造模型和組合模型的方法,是我們本文要討論的集成學習的兩個重要方面。
一. 什么是集成學習
集成學習是這樣一個過程,按照某種算法生成多個模型,如分類器或者稱為專家,再將這些模型按照某種方法組合在一起來解決某個智能計算問題。集成學習主要用來提高模型(分類,預測,函數估計等)的性能,或者用來降低模型選擇不當的可能性\(^{[1]}\)。集成算法本身是一種監督學習算法,因為它可以被訓練然后進行預測,組合的多個模型作為整體代表一個假設(hypothesis)。
二. 集成學習的應用場景
2.1 模型選擇(Model Selection)
模型選擇可能是集成算法在實踐中應用的主要原因。在實踐中,面對一個給定的機器學習問題,選擇模型是件復雜且有風險的事。
例如一個分類問題,選擇哪個分類器比較好?這個問題可以進一步分為兩個問題:
i)在功能類似的模型中到底選擇哪個,是多層感知器(MLP)、支持向量機(SVM)、決策樹還是朴素貝葉斯?
ii)如果i)已經選定,該算法怎么實現?例如,在其他參數保持不變的情況下,MLP的不同初始化參數可以產生不同的決策邊界。
面對上面的問題,我們通常的做法是:選擇在測試集誤差最小的分類器。但這種做法有缺陷,因為即使用交叉驗證法(cross-validation)選擇一個在訓練誤差(training error)和泛化誤差(genelization error,或者說測試集誤差)比較好的算法,在面對未知的數據時仍然可能表現不好;另外,如果所有算法的訓練誤差和泛化誤差都一樣,該怎樣選擇?最終我們可能會隨機選一個,會不會選擇一個對未知數據性能較差的模型?有可能。相比於只選擇一個模型,集成學習對模型集合中所有模型的輸出按照某種方法進行組合,例如簡單的取平均,可以降低模型選擇不當的風險。
不過需要強調的是集成的模型組合不一定總是比單個成員模型的性能好,可能會比其中性能最好的模型要差,但集成的模型組合降低了整體模型選擇不當的風險。
集成學習之所以能提高整體性能,即具有糾正某些成員模型錯誤的能力,完全取決於集成學習系統中成員模型,如分類器的多樣性。因為假設所有成員模型的輸出都一樣,就無法糾正錯誤了。實現分類器多樣性的方法有多種,最流行的方法是使用不同的數據集來訓練每一個分類器,這些數據集通過從總體數據集中有放回的隨機采樣獲得,例如bootstrapping或bagging技術,我們后面會講到;在分類的場景中,可使用弱分類器或者不穩定模型(unstable model)作為成員模型來提高多樣性,因為即使對訓練參數進行微調,也會得到完全不同的決策邊界;也可以使用不同類型的分類器,如決策樹,最近鄰,支持向量機等混合到一起來增加多樣性;還有一些其他增加多樣性的方法就暫不做介紹了。
總之,如果能達到適當的多樣性,每個分類器的誤差不同,通過一定策略進行組合可以減少總誤差。如下圖所示,每個分類器在不同的訓練子集上進行訓練,誤差不同(看圖中標記的加粗黑框標記的樣本),但將三個分類器進行組合后得到了最好的分類邊界。
2.2 數據太多/太少
當處理大量數據或缺乏足夠的數據時,這里缺乏足夠的數據可以理解為數據太少以至於不能體現分布,集成學習可能非常有用:
i)當訓練數據量太大,以至難以使用單一分類器訓練時,可以將數據按照一定策略划分為較小的子集。然后使用每個子集來訓練單獨的分類器,再用恰當的方法對分類器輸出進行組合;
ii)如果訓練數據量太小,那么使用bootstrapping技術可以從總體數據集中有放回的隨機采樣獲得多個樣本集,每個樣本集作為訓練集對分類器進行訓練,這些樣本集可以看作是從總體分布中得到的獨立樣本集。
2.3 分而治之
有些機器學習問題很難用一個模型來解決,例如不同類別的決策邊界非常復雜,考慮下圖中的分類問題該怎樣解決:兩個特征緯度feature1和feature2,兩個類別\(O\)和\(X\),可以看出區分類別\(O\)和類別\(X\)的決策邊界非常復雜(橘紅色粗線框),很明顯,決策邊界是圓形的分類器無法表示這個復雜邊界:
我們知道線性分類器能夠表示線性邊界,但無法表示復雜的非線性邊界。但是適當的組合線性分類器,就能夠做到表示非線性邊界。例如對於上圖的問題,我們有一個能夠生成圓形決策邊界的分類器,這個分類器無法得到上圖中的復雜決策邊界,那么我們考慮生成這種分類器的集合,如下圖所示:
每個分類器根據數據落在圓形決策邊界內和邊界外來標記類別\(O\)和\(X\),最終根據大多數原則來判定類別是\(O\)還是\(X\),這樣就可以輕松解決這個復雜的非圓形決策邊界問題了。不過這里需要注意兩點:分類器的輸出是獨立的;至少半數以上的分類器分類正確。
從某種意義上來說,集成學習系統遵循一種分而治之的方法,將數據空間划分為更小、更易於學習的分區,其中每個模型只學習其中一個更簡單的分區。然后通過不同方法來適當組合模型的輸出來近似復雜決策邊界。
2.4 數據融合
在許多需要自動決策的應用程序中,接收來自不同來源的數據並提供補充信息是很常見的。這種信息的適當組合被稱為數據或信息融合,與僅根據任何單個數據源進行決策相比,可以提高分類決策的准確性。
例如,對於神經系統疾病的診斷,神經學家可以使用腦電圖(一維時間序列數據)、核磁共振成像MRI、核磁共振功能成像fMRI或PET掃描(二維空間數據)、腦脊液中某些化學物質的量,以及患者的年齡、性別、教育程度等統計學上的數據。將各種各樣的特征數據一起來訓練一個分類器很困難,同時性能也不一定好,這種情況下可以對每個特征獨立地使用一個分類器去訓練,再將結果進行合並,至於合並的方法我們后面就會講到。
2.5 置信度估計
集成學習系統的結構對決策提供置信度具有天然優勢,考慮對一個分類問題訓練一個分類器集合,如果集合中絕大多數分類器決策一致,那么就認為整體決策的結果具有較高置信度;然而,如果集合中一半的分類器做出一個決定,另一半做出一個不同的決定,那么就認為整體決策的結果具有較低置信度。不過這里同樣需要注意的是,置信度較高的決策不一定是正確的決策,同樣置信度較低的決策不一定是錯誤的決策。然而,研究表明,一個經過適當訓練的集合決策在其置信度較高時通常是正確的,在其置信度較低時通常是錯誤的。可以使用集合的決策結果來估計分類的后驗概率(Muhlbaier 2005)。
三. 模型集合的組合方法
在第一節我們介紹集成學習時可以看出,集成學習主要包括兩個部分:獲得一組成員模型的學習方法,以及對成員模型的決策結果的組合方法。這一節我們假設已經有了一組模型,我們來探索下將它們的輸出組合起來的常用方法,包含分類和回歸問題。
模型集合的組合方法有很多,我們這里主要介紹在實踐中最常用的三種:線性組合、乘積組合和投票組合。
3.1 線性組合
線性組合用於輸出實數的模型,因此適用於回歸模型結果的集成,或分類模型集成中估計類別的概率,這里我們介紹后一種。假設有模型\(f_t(y|\textbf{x})\),即給定輸入向量\(\textbf{x}\),估計類別\(y\)的概率。現有上述模型的集合,\(t=\{1...T \}\),那么模型集合整體對類別\(y\)的概率估計為:
對於\(\forall t\),如果權重相同,即\(w_t = \frac{1}{T}\),上述公式表示概率估計的平均值,當然可以根據模型的准確度來設置不相同的權重,只是權重確定比較困難,還存在過擬合的風險,因此平均權重是最常用的。
3.2 乘積組合
對於輸入向量\(\textbf{x}\),乘積組合如下所示:
其中\(Z\)是個歸一化因子來保證\(\overline f\)是個合法分布(滿足概率分布性質)。在各模型的類別條件概率估計相互獨立的假設下,乘積組合在理論上是最好的組合策略,但是在實際中,這種假設很難成立,同時權重與線性組合一樣不好確定。
3.3 投票組合
線性組合和乘積組合適用於模型的輸出是實數,當模型的輸出是類別時,可以使用投票組合。每個分類器對某個類別投票,獲得多數票的類別作為集成模型整體的輸出。例如,一個二分類問題,分類器輸出類別\(h_t(x) ∈ \{−1, +1 \}\),集成學習系統輸出可以表示為:
同樣,權重可以是均勻的,也可以不均勻。
四. 模型集合的學習算法
在日常生活中,如果我們成立一個委員會來舉手表決一個決定,我們肯定不希望他們同時做出同樣的錯誤判斷。同樣的道理,一個集成學習的模型集合,我們希望其中的模型在群體中表現出一定的“多樣性”,同時仍然保持着良好的個體表現。
算法的原則是需要鼓勵多樣性,這里可分為兩種:含蓄的和明確的。模型集成方法中按大多數原則投票就是含蓄的,算法為每個成員學習器分配不同的隨機訓練子集,以促進多樣性的發生。從總體樣本中隨機抽樣就是“含蓄地”鼓勵多樣性:任何時候都不采取措施確保多樣性的出現。數據集之間的隨機差異可能存在於樣本選擇(bagging算法)、特征選擇(Random Subspaces or Rotation Forests)或二者的組合(the Random Forests algorithm)等等。
另一種是明確鼓勵多樣性,用一些措施來確保其成員之間有實質性區別。Boosting算法通過改變每個成員的訓練樣本分布來實現這一點,從而鼓勵對之前的成員模型預測錯誤的樣本上有更准確地預測。接下來,我們將了解文獻中最受關注的三種算法。
4.1 Bagging
在Bagging算法中,模型集合中的每個成員學習器均從不同的訓練集得到,成員的預測結果可以通過第三節中介紹的方法組合。每個訓練集通過bootstrapping方法得到,如圖所示,通過從總體樣本數據N(N=12)中有放回的隨機選取M(M=5)個樣本:
每個訓練集稱為bootstrap,Bagging即是Bootstrap AGGregatING的首字母縮略詞。由於每個bootstrap的M個樣本是有放回隨機選取的,因此每個樣本不被選中的概率為\(p=(1 - \frac{1}{N})^M\)。當N和M都非常大時,比如N=M=10000,一個樣本不被選中的概率p = 36.8%。因此一個bootstrap約包含原樣本63.2%,約36.8%的樣本未被選中。
類似其他的集成方法,Bagging在不穩定模型(unstable models)集合中表現比較好。這里說的不穩定的模型,即在訓練數據發生微小變化時產生不同泛化行為的模型,也稱為高方差模型,如決策樹和神經網絡。Bagging在過於簡單模型集合中表現並不好,因為Bagging是從總體數據集隨機選取樣本來訓練模型,過於簡單的模型可能會產生相同的預測結果,失去了多樣性。Bagging算法如下:
這里需要注意的是,成員學習器之間不存在強依賴關系,因此可並行化生成,而下一小節介紹的Boosting,成員學習器之間存在強依賴關系,必須串行生成。
4.2 Boosting
Boosting是一族可將弱學習器(即成員學習器/基學習器)提升為強學習器的算法。這族算法的工作機制類似:先從初始訓練集訓練出一個基學習器,再根據基學習器的表現對訓練樣本分布進行調整,使得先前基學習器做錯的訓練樣本在后續受到更多關注,然后基於調整后的樣本分布來訓練下一個基學習器;如此重復進行,直至基學習器數目達到事先指定的值\(N\),最終將這\(N\)個基學習器進行加權結合。主要思想是,后續模型應該能夠補償早期模型所造成的錯誤。Adaboost是Boosting算法家族中最著名的一個,詳見 集成學習之AdaBoost。
4.3 Mixtures of Experts
Mixture of experts (MoE)也是一種創建模型集合的算法。適用於處理數據集中的數據產生方式不同的情況,根據數據淶源進行分離訓練多個模型,各個模型被稱為專家(Expert),專家對輸入(input)有預測或者觀點,而Gating net模型的實際輸出為各個模型的輸出與Gating net 模塊的權重組合,如下圖所示,因為目前只了解了思想,所以暫不多闡述了。
參考資料:
-
scholarpedia, Ensemble_learning
-
Claude Sammut, Geoffrey I. Webb (Eds.),Gavin Brown, Encyclopedia of Machine Learning, Springer Press 2010, Ensemble Learning
-
Joseph Rocca, Ensemble methods: bagging, boosting and stacking,Understanding the key concepts of ensemble learning.
-
Trevor Hastie, Robert Tibshirani, Jerome Friedman(2009). The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd Ed.), Springer, New York, 329-331