整合學習簡介
整合學習(ensemble learning)通過構建並結合多個學習器來完成學習任務。
個人理解是按照不同的思路來組合基礎模型,在保證準確度的同時也提升了模型防止過擬合的能力。,這種方法相較於單個模型通常能夠獲得更好的預測結果。針對弱學習器(泛化能力弱)效果明顯,個體學習器滿足:
好而不同,具有多樣性
不能太壞
這也是整合學習在眾多高水平的比賽如奈飛比賽,KDD和Kaggle,被首先推薦使用的原因。
三種常見的整合學習框架:
1.用於減少方差的bagging
2.用於減少偏差的boosting
3.用於提升預測結果的stacking
整合學習方法也可以歸為如下兩大類:
第一類:序列整合方法,這種方法序列地生成基礎模型(如AdaBoost)。序列整合的基本動機是利用基礎模型之間的依賴。通過給錯分樣本一個較大的權重來提升效能。
第二類:並行整合方法,這種方法並行地生成基礎模型(如Random Forest)。並行整合的基本動機是利用基礎模型的獨立性,因為通過平均能夠較大地降低誤差。
大部分整合模型都通過一個基礎學習演算法來生成一個同質的基礎學習器,即同型別的學習器,也叫同質整合。
有同質整合就有異質整合,為了整合後的結果表現最好,異質基礎學習器需要儘可能準確並且差異性夠大。
Bagging
Bagging是引導聚合的意思。減少一個估計方差的一種方式就是對多個估計進行平均。例如,我們可以用訓練集的不同子集(隨機選擇並替代訓練集)訓練N個不同的樹然後計算最後的結果:
Bagging整合基本框架圖
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的主要原則是訓練一系列的弱學習器,所謂弱學習器是指僅比隨機猜測好一點點的模型,例如較小的決策樹,訓練的方式是利用加權的資料。在訓練的早期對於錯分資料給予較大的權重。
Adaboost整合基本框架圖
對於訓練好的弱分類器,如果是分類任務按照權重進行投票,而對於迴歸任務進行加權,然後再進行預測。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,最後再加權平均。詳見文章(https://www.kaggle.com/c/otto-group-product-classification-challenge/discussion/14335)。
結構如下:
結合策略
整合學習的第二類模型,為了提高整合的泛化能力,每個基學習器之間不存在很強的依賴性,所以最終預測結果時,需要一定的策略對T個結果進行結合。下面介紹結合策略。
平均法
對數值型輸出,最常見的結合策略是使用平均法。
簡單平均法
加權平均法
但是對於規模比較大的整合來說,權重引數比較多,較容易導致過擬合。加權平均法未必一定優於簡單平均法。
一般而言,在個體學習器效能相差較大時,宜使用加權平均法,而在個體學習器效能相近時,宜使用簡單平均法。
這一點在第二個專案中深有體會,該模型有三個損失函式,每個損失函式的效能差別比較大,所以用了加權,在第一個資料集中調好引數以後,在第二個資料集中,效果就不是很好,需要重新進行調參。
投票法
絕對多數投票法:若某標記得票過半數,則預測為該標記;否則拒絕預測。
相對多數投票法:預測為得票最多的標記。若同時有多個標記獲得最高票,則從中隨機選取一個。
加權投票法
學習法
當訓練資料很多時,一種更為強大的結合策略是使用"學習法",即通過另一個學習器來進行結合。
總結
除了本文所提到的整合學習研究之外,整合學習還被廣泛應用於利用多種分類器做訓練的深度學習模型中。深度學習模型中的分類器可能在架構、超引數以及訓練技巧上存在差異,都可以進行整合。