[機器學習]集成學習--bagging、boosting、stacking

集成學習簡介

集成學習(ensemble learning)通過構建並結合多個學習器來完成學習任務。

如何產生“好而不同”的個體學習器,是集成學習研究的核心。

集成學習的思路是通過合併多個模型來提升機器學習性能,這種方法相較於當個單個模型通常能夠獲得更好的預測結果。這也是集成學習在衆多高水平的比賽如奈飛比賽,KDD和Kaggle,被首先推薦使用的原因。

一般來說集成學習可以分爲三大類:

  • 用於減少方差的bagging
  • 用於減少偏差的boosting
  • 用於提升預測結果的stacking

集成學習方法也可以歸爲如下兩大類:

  • 串行集成方法,這種方法串行地生成基礎模型(如AdaBoost)。串行集成的基本動機是利用基礎模型之間的依賴。通過給錯分樣本一個較大的權重來提升性能。
  • 並行集成方法,這種方法並行地生成基礎模型(如Random Forest)。並行集成的基本動機是利用基礎模型的獨立性,因爲通過平均能夠較大地降低誤差。

大部分集成模型都通過一個基礎學習算法來生成一個同質的基礎學習器,即同類型的學習器,也叫同質集成。

有同質集成就有異質集成,爲了集成後的結果表現最好,異質基礎學習器需要儘可能準確並且差異性夠大。


Bagging

Bagging是引導聚合的意思。減少一個估計方差的一種方式就是對多個估計進行平均。例如,我們可以用訓練集的不同子集(隨機選擇並替代訓練集)訓練M個不同的樹然後計算最後的結果:

Bagging使用裝袋採樣來獲取數據子集訓練基礎學習器。通常分類任務使用投票的方式集成,而回歸任務通過平均的方式集成。

1)從原始樣本集中抽取訓練集。每輪從原始樣本集中使用Bootstraping(有放回)的方法抽取n個訓練樣本(在訓練集中,有些樣本可能被多次抽取到,而有些樣本可能一次都沒有被抽中)。共進行k輪抽取,得到k個訓練集。(我們這裏假設k個訓練集之間是相互獨立的,事實上不是完全獨立)

2)每次使用一個訓練集得到一個模型,k個訓練集共得到k個模型。但是是同種模型。(注:,k個訓練集雖然有重合不完全獨立,訓練出來的模型因爲是同種模型也是不完全獨立。這裏並沒有具體的分類算法或迴歸方法,我們可以根據具體問題採用不同的分類或迴歸方法,如決策樹、感知器等)

3)對分類問題:將上步得到的k個模型採用投票的方式得到分類結果;對迴歸問題,計算上述模型的均值作爲最後的結果。(所有模型的重要性相同)

對於Bagging需要注意的是,每次訓練集可以取全部的特徵進行訓練,也可以隨機選取部分特徵訓練,例如隨機森林就是每次隨機選取部分特徵


常用的集成算法模型是隨機森林和隨機樹

在隨機森林中,每個樹模型都是裝袋採樣訓練的。另外,特徵也是隨機選擇的,最後對於訓練好的樹也是隨機選擇的。

這種處理的結果是隨機森林的偏差增加的很少,而由於弱相關樹模型的平均,方差也得以降低,最終得到一個方差小,偏差也小的模型。


在一個極端的隨機樹算法中,隨機應用的更爲徹底:訓練集分割的閾值也是隨機的,即每次劃分得到的訓練集是不一樣的。這樣通常能夠進一步減少方差,但是會帶來偏差的輕微增加。


下面通過應用Iris數據集的分類問題來距離說明bagging。

我們可以使用兩種基礎模型:決策樹和KNN。圖中展示了基礎模型與集成模型學習得到的決策邊界。

Accuracy: 0.63 (+/- 0.02) [Decision Tree]      Accuracy: 0.64 (+/- 0.01) [Bagging Tree]

Accuracy: 0.70 (+/- 0.02) [K-NN]                 Accuracy: 0.59 (+/- 0.07) [Bagging K-NN]



決策樹學到的是軸平行邊界,然而k=1最近鄰對數據擬合的最好。bagging通過訓練10個基礎模型能過隨機選擇80%的數據作爲訓練集,同樣隨機選擇80%的特徵進行訓練。

決策樹bagging集成相比K-NN bagging集成獲得了更高的準確率。K-NN對於訓練樣本的擾動並不敏感,這也是爲什麼K-NN成爲穩定學習器的原因。

整合穩定學習器對於提升泛化性能沒有幫助。

圖像結果同樣展示了通過增加集成模型的個數帶來的測試準確率變化。基於交叉驗證的結果,我們可以看到整合基礎模型個數大於10個之後性能就基本不再提升了,只是帶來了計算複雜度的增加。

最後一張圖繪製的是集成學習模型的學習曲線,注意訓練集數據的平均誤差爲0.3,在對訓練集做80%採樣的時候訓練集和驗證集誤差最小。


Boosting(提高)

Boosting指的是通過算法集合將弱學習器轉換爲強學習器。boosting的主要原則是訓練一系列的弱學習器,所謂弱學習器是指僅比隨機猜測好一點點的模型,例如較小的決策樹,訓練的方式是利用加權的數據。在訓練的早期對於錯分數據給予較大的權重。

對於訓練好的弱分類器,如果是分類任務按照權重進行投票,而對於迴歸任務進行加權,然後再進行預測。boosting和bagging的區別在於是對加權後的數據利用弱分類器依次進行訓練。

boosting是一族可將弱學習器提升爲強學習器的算法,這族算法的工作機制類似:

  • 先從初始訓練集訓練出一個基學習器;
  • 再根據基學習器的表現對訓練樣本分佈進行調整,使得先前基學習器做錯的訓練樣本在後續受到更多關注;
  • 基於調整後的樣本分佈來訓練下一個基學習器;
  • 重複進行上述步驟,直至基學習器數目達到事先指定的值T,最終將這T個基學習器進行加權結合。

下面描述的算法是最常用的一種boosting算法,叫做AdaBoost,表示自適應boosting。


AdaBoost算法每一輪都要判斷當前基學習器是否滿足條件,一旦條件不滿足,則當前學習器被拋棄,且學習過程停止。

AdaBoost算法中的個體學習器存在着強依賴關係,應用的是串行生成的序列化方法。每一個基生成器的目標,都是爲了最小化損失函數。所以,可以說AdaBoost算法注重減小偏差。

由於屬於boosting算法族,採用的是加性模型,對每個基學習器的輸出結果加權處理,只會得到一個輸出預測結果。所以標準的AdaBoost只適用於二分類任務。


我們可以看到第一個分類器y1(x)是用相等的權重係數進行訓練的。在隨後的boosting中,錯分的數據權重係數將會增加,正確分類的數據權重係數將會減小。

epsilon表示單個分類器的加權錯誤率。alpha是分類器的權重,正確的分類器alpha較大。


AdaBoost算法的表現如上圖所示。每個基礎模型包含一個深度爲1的決策樹,這種決策樹依靠線性劃分進行分類,決策平面跟其中一個軸平行。上圖還展示了集成規模的增加帶來的測試準確率變化以及訓練和測試集的學習曲線。

梯度樹提升(Gradient Tree Boosting)是一個boosting算法在損失函數上的泛化。能夠用於分類和迴歸問題。Gradient Boosting採用串行方式構建模型。


每新增一個決策樹hm(x)都儘可能的選擇是的當前模型Fm-1(x)損失最小的那個:


注意:分類和迴歸使用的損失函數有所差別。


Stacking(堆疊)

Stacking是通過一個元分類器或者元迴歸器來整合多個分類模型或迴歸模型的集成學習技術。基礎模型利用整個訓練集做訓練,元模型將基礎模型的特徵作爲特徵進行訓練。

基礎模型通常包含不同的學習算法,因此stacking通常是異質集成。算法僞代碼如下:


各基礎模型的預測結果如下:

Accuracy: 0.91 (+/- 0.01) [KNN]

Accuracy: 0.91 (+/- 0.06) [Random Forest]

Accuracy: 0.92 (+/- 0.03) [Naive Bayes]

Accuracy: 0.95 (+/- 0.03) [Stacking Classifier]

Stacking集成效果如上圖所示。分別在K-NN,Random Forest,Naive Bayes做訓練和預測,然後將其輸出結果作爲特徵,利用邏輯迴歸作爲元模型進一步訓練。如圖所示,stacking集成的結果由於每個基礎模型,並且沒有過擬合。

Stacking被Kaggle競賽獲獎者廣泛使用。例如,Otto Group Product分類挑戰賽的第一名通過對30個模型做stacking贏得了冠軍。他將30個模型的輸出作爲特徵,繼續在三個模型中訓練,這三個模型XGBoost,Neural Network和Adaboost,最後再加權平均。詳見文章(kaggle.com/c/otto-group)。

結構如下:


結合策略

集成學習的第二類模型,爲了提高集成的泛化能力,每個基學習器之間不存在很強的依賴性,所以最終預測結果時,需要一定的策略對T個結果進行結合。下面介紹結合策略。

平均法

對數值型輸出,最常見的結合策略是使用平均法。

  • 簡單平均法
  • 加權平均法
    但是對於規模比較大的集成來說,權重參數比較多,較容易導致過擬合。加權平均法未必一定優於簡單平均法。

一般而言,在個體學習器性能相差較大時,宜使用加權平均法,而在個體學習器性能相近時,宜使用簡單平均法。

這一點在第二個項目中深有體會,該模型有三個損失函數,每個損失函數的性能差別比較大,所以用了加權,在第一個數據集中調好參數以後,在第二個數據集中,效果就不是很好,需要重新進行調參。

投票法

  • 絕對多數投票法
    若某標記得票過半數,則預測爲該標記;否則拒絕預測。
  • 相對多數投票法
    預測爲得票最多的標記。若同時有多個標記獲得最高票,則從中隨機選取一個。
  • 加權投票法

學習法

當訓練數據很多時,一種更爲強大的結合策略是使用“學習法”,即通過另一個學習器來進行結合。


代碼

本文的代碼參見: ipython notebook.


總結

除了本文所提到的集成學習研究之外,集成學習還被廣泛應用於利用多種分類器做訓練的深度學習模型中。深度學習模型中的分類器可能在架構、超參數以及訓練技巧上存在差異,都可以進行集成。

集成學習已經被證明在Kaggle數據科學競賽中能夠獲得較好的成績。


推薦閱讀


參考:

https://blog.statsbot.co/ensemble-learning-d1dcd548e936

https://www.jianshu.com/p/0a23d578ac81




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章