一、集成學習法
在機器學習的有監督學習算法中,我們的目標是學習出一個穩定的且在各個方面表現都較好的模型,但實際情況往往不這么理想,有時我們只能得到多個有偏好的模型(弱監督模型,在某些方面表現的比較好)。集成學習就是組合這里的多個弱監督模型以期得到一個更好更全面的強監督模型,集成學習潛在的思想是即便某一個弱分類器得到了錯誤的預測,其他的弱分類器也可以將錯誤糾正回來。
集成方法是將幾種機器學習技術組合成一個預測模型的元算法,以達到減小方差(bagging)、偏差(boosting)或改進預測(stacking)的效果。
集成學習在各個規模的數據集上都有很好的策略。
數據集大:划分成多個小數據集,學習多個模型進行組合
數據集小:利用Bootstrap方法進行抽樣,得到多個數據集,分別訓練多個模型再進行組合
集合方法可分為兩類:
- 序列集成方法,其中參與訓練的基礎學習器按照順序生成(例如 AdaBoost)。序列方法的原理是利用基礎學習器之間的依賴關系。通過對之前訓練中錯誤標記的樣本賦值較高的權重,可以提高整體的預測效果。
- 並行集成方法,其中參與訓練的基礎學習器並行生成(例如 Random Forest)。並行方法的原理是利用基礎學習器之間的獨立性,通過平均可以顯著降低錯誤。
總結一下,集成學習法的特點:
① 將多個分類方法聚集在一起,以提高分類的准確率。
(這些算法可以是不同的算法,也可以是相同的算法。)
② 集成學習法由訓練數據構建一組基分類器,然后通過對每個基分類器的預測進行投票來進行分類
③ 嚴格來說,集成學習並不算是一種分類器,而是一種分類器結合的方法。
④ 通常一個集成分類器的分類性能會好於單個分類器
⑤ 如果把單個分類器比作一個決策者的話,集成學習的方法就相當於多個決策者共同進行一項決策。
自然地,就產生兩個問題:
1)怎么訓練每個算法?
2)怎么融合每個算法?
這篇博客介紹一下集成學習的幾個方法:Bagging,Boosting以及Stacking。
1、Bagging(bootstrap aggregating,裝袋)
Bagging即套袋法,先說一下bootstrap,bootstrap也稱為自助法,它是一種有放回的抽樣方法,目的為了得到統計量的分布以及置信區間,其算法過程如下:
A)從原始樣本集中抽取訓練集。每輪從原始樣本集中使用Bootstraping的方法抽取n個訓練樣本(在訓練集中,有些樣本可能被多次抽取到,而有些樣本可能一次都沒有被抽中)。共進行k輪抽取,得到k個訓練集。(k個訓練集之間是相互獨立的)
B)每次使用一個訓練集得到一個模型,k個訓練集共得到k個模型。(注:這里並沒有具體的分類算法或回歸方法,我們可以根據具體問題采用不同的分類或回歸方法,如決策樹、感知器等)
C)對分類問題:將上步得到的k個模型采用投票的方式得到分類結果;對回歸問題,計算上述模型的均值作為最后的結果。(所有模型的重要性相同)
為了讓更好地理解bagging方法,這里提供一個例子。
X 表示一維屬性,Y 表示類標號(1或-1)測試條件:當x<=k時,y=?;當x>k時,y=?;k為最佳分裂點
下表為屬性x對應的唯一正確的y類別
現在進行5輪隨機抽樣,結果如下
每一輪隨機抽樣后,都生成一個分類器
然后再將五輪分類融合
對比符號和實際類,我們可以發現:在該例子中,Bagging使得准確率可達90%
由此,總結一下bagging方法:
① Bagging通過降低基分類器的方差,改善了泛化誤差
② 其性能依賴於基分類器的穩定性;如果基分類器不穩定,bagging有助於降低訓練數據的隨機波動導致的誤差;如果穩定,則集成分類器的誤差主要由基分類器的偏倚引起
③ 由於每個樣本被選中的概率相同,因此bagging並不側重於訓練數據集中的任何特定實例
常用的集成算法類是隨機森林。
在隨機森林中,集成中的每棵樹都是由從訓練集中抽取的樣本(即 bootstrap 樣本)構建的。另外,與使用所有特征不同,這里隨機選擇特征子集,從而進一步達到對樹的隨機化目的。
因此,隨機森林產生的偏差略有增加,但是由於對相關性較小的樹計算平均值,估計方差減小了,導致模型的整體效果更好。
2、Boosting
其主要思想是將弱分類器組裝成一個強分類器。在PAC(probably approximately correct,概率近似正確)學習框架下,則一定可以將弱分類器組裝成一個強分類器。
關於Boosting的兩個核心問題:
1)在每一輪如何改變訓練數據的權值或概率分布?
通過提高那些在前一輪被弱分類器分錯樣例的權值,減小前一輪分對樣例的權值,來使得分類器對誤分的數據有較好的效果。
2)通過什么方式來組合弱分類器?
通過加法模型將弱分類器進行線性組合,比如:
AdaBoost(Adaptive boosting)算法:剛開始訓練時對每一個訓練例賦相等的權重,然后用該算法對訓練集訓練t輪,每次訓練后,對訓練失敗的訓練例賦以較大的權重,也就是讓學習算法在每次學習以后更注意學錯的樣本,從而得到多個預測函數。通過擬合殘差的方式逐步減小殘差,將每一步生成的模型疊加得到最終模型。
GBDT(Gradient Boost Decision Tree),每一次的計算是為了減少上一次的殘差,GBDT在殘差減少(負梯度)的方向上建立一個新的模型。
3、Stacking
Stacking方法是指訓練一個模型用於組合其他各個模型。首先我們先訓練多個不同的模型,然后把之前訓練的各個模型的輸出為輸入來訓練一個模型,以得到一個最終的輸出。理論上,Stacking可以表示上面提到的兩種Ensemble方法,只要我們采用合適的模型組合策略即可。但在實際中,我們通常使用logistic回歸作為組合策略。
如下圖,先在整個訓練數據集上通過bootstrap抽樣得到各個訓練集合,得到一系列分類模型,然后將輸出用於訓練第二層分類器。
二、Bagging,Boosting二者之間的區別
1、Bagging和Boosting的區別:
1)樣本選擇上:
Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的。
Boosting:每一輪的訓練集不變,只是訓練集中每個樣例在分類器中的權重發生變化。而權值是根據上一輪的分類結果進行調整。
2)樣例權重:
Bagging:使用均勻取樣,每個樣例的權重相等
Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大。
3)預測函數:
Bagging:所有預測函數的權重相等。
Boosting:每個弱分類器都有相應的權重,對於分類誤差小的分類器會有更大的權重。
4)並行計算:
Bagging:各個預測函數可以並行生成
Boosting:各個預測函數只能順序生成,因為后一個模型參數需要前一輪模型的結果。
2、決策樹與這些算法框架進行結合所得到的新的算法:
1)Bagging + 決策樹 = 隨機森林
2)AdaBoost + 決策樹 = 提升樹
3)Gradient Boosting + 決策樹 = GBDT
參考博文:
【1】集成學習總結 & Stacking方法詳解 https://blog.csdn.net/willduan1/article/details/73618677
【2】Bagging和Boosting 概念及區別 https://www.cnblogs.com/liuwu265/p/4690486.html
【3】集成學習法之bagging方法和boosting方法 https://blog.csdn.net/qq_30189255/article/details/51532442
【4】機器學習中的集成學習(Ensemble Learning) http://baijiahao.baidu.com/s?id=1590266955499942419&wfr=spider&for=pc
【5】簡單易學的機器學習算法——集成方法(Ensemble Method) https://blog.csdn.net/google19890102/article/details/46507387