Bagging和Boosting的介紹及對比
“團結就是力量”這句老話很好地表達了機器學習領域中強大「整合方法」的基本思想。總的來說,許多機器學習競賽(包括 Kaggle)中最優秀的解決方案所採用的整合方法都建立在一個這樣的假設上:將多個模型組合在一起通常可以產生更強大的模型。
一、整合方法
整合(Ensemble)方法就是針對同一任務,將多個或多種分類器進行融合,從而提高整體模型的泛化能力。對於一個複雜任務,將多個模型進行適當地綜合所得出的判斷,通常要比任何一個單獨模型的判讀好。也就是我們常說的“三個臭皮匠,頂過諸葛亮”。
不過對於組合分類器必須滿足兩點:
(1) 基模型之間應該是相互獨立的
(2) 基模型應好於隨機猜測模型
整合方法目前分為兩種:Bagging 與 Boosting,下面分別介紹。
二、Bagging演算法(套袋法)
bagging的演算法過程如下:
1、從原始樣本集中使用Bootstraping 方法隨機抽取n個訓練樣本,共進行k輪抽取,得到k個訓練集(k個訓練集之間相互獨立,元素可以有重複)。
2、對於n個訓練集,我們訓練k個模型(這個模型可根據具體的情況而定,可以是決策樹,KNN等)。
3、對於分類問題:由投票表決產生的分類結果;對於迴歸問題,由k個模型預測結果的均值作為最後預測的結果(所有模型的重要性相同)。
三、Boosting(提升法)
boosting的演算法過程如下:
1、對於訓練集中的每個樣本建立權值$w_{i}$,表示對每個樣本的權重, 其關鍵在與對於被錯誤分類的樣本權重會在下一輪的分類中獲得更大的權重(錯誤分類的樣本的權重增加)。
2、同時加大分類誤差概率小的弱分類器的權值,使其在表決中起到更大的作用,減小分類誤差率較大弱分類器的權值,使其在表決中起到較小的作用。每一次迭代都得到一個弱分類器,需要使用某種策略將其組合,最為最終模型(AbaBoost給每個迭代之後的弱分類器一個權值,將其線性組合作為最終的分類器,誤差小的分類器權值越大)。
關於Boosting的兩個核心問題:
1、在每一輪如何改變訓練資料的權值或概率分佈?
通過提高那些在前一輪被弱分類器分錯樣例的權值,減小前一輪分正確樣例的權值,來使得分類器對誤分的資料有較好的效果。
2、通過什麼方式來組合弱分類器?
通過加法模型將弱分類器進行線性組合,比如AdaBoost通過加權多數表決的方式,即增大錯誤率小的分類器的權值,同時減小錯誤率較大的分類器的權值。而提升樹通過擬合殘差的方式逐步減小殘差,將每一步生成的模型疊加得到最終模型。
四、Bagging、Boosting二者之間的區別
Bagging和Boosting的區別:
1)樣本選擇上:
Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的。
Boosting:每一輪的訓練集不變,只是訓練集中每個樣例在分類器中的權重發生變化。而權值是根據上一輪的分類結果進行調整。
2)樣例權重:
Bagging:使用均勻取樣,每個樣例的權重相等
Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大。
3)預測函式:
Bagging:所有預測函式的權重相等。
Boosting:每個弱分類器都有相應的權重,對於分類誤差小的分類器會有更大的權重。
4)平行計算:
Bagging:各個預測函式可以並行生成
Boosting:各個預測函式只能順序生成,因為後一個模型引數需要前一輪模型的結果。
5)Bagging是減少variance(方差),而Boosting是減少bias(偏差)
Bagging對樣本重取樣,對每一重取樣得到的子樣本集訓練一個模型,最後取平均。由於子樣本集的相似性以及使用的是同種模型,因此各模型有近似相等的bias和variance(事實上,各模型的分佈也近似相同,但不獨立)。由於$E\left [ \frac{\sum X_{i}}{n} \right ]=E\left [X_{i} \right ]$,所以bagging後的bias和單個子模型的接近,一般來說不能顯著降低bias。另一方面,若各子模型獨立,則有$Var\left ( \frac{\sum X_{i}}{n} \right )=\frac{Var\left (X_{i} \right )}{n}$,此時可以顯著降低variance。若各子模型完全相同,則$Var\left ( \frac{\sum X_{i}}{n} \right )=Var\left (X_{i} \right )$,此時不會降低variance。bagging方法得到的各子模型是有一定相關性的,屬於上面兩個極端狀況的中間態,因此可以一定程度降低variance。為了進一步降低variance,Random forest通過隨機選取變數子集做擬合的方式de-correlated了各子模型(樹),使得variance進一步降低。(用公式可以一目瞭然:設有i.d.的n個隨機變數,方差記為$\sigma ^{2}$,兩兩變數之間的相關性為$\rho $,則$\frac{\sum X_{i}}{n}$的方差為$\rho \ast \sigma ^{2}+(1-\rho )\ast \sigma ^{2}/n$,Bagging降低的是第二項,Random Forest是同時降低兩項。)
Boosting從優化角度來看,是用Forward-Stagewise這種貪心法去最小化損失函式$L(y,\sum a_{i}f_{i}(x))$。例如,常見的AdaBoost即等價於用這種方法最小化Exponential Loss:$L(y,f(x))=exp(-yf(x))$。所謂Forward-Stagewise,就是在迭代的第n步,求解新的子模型$f(x)$及步長$a$(或者叫組合係數),來最小化$L(y,f_{n-1}(x)+af(x))$,這裡$f_{n-1}(x)$是前n-1步得到的子模型的和。因此Boosting是在Sequential地最小化損失函式,其bias自然逐步下降。但由於是採取這種Sequential、Adaptive的策略,各子模型之間是強相關的,於是子模型之和並不能顯著降低variance。所以說Boosting主要還是靠降低bias來提升預測精度。
五、總結
這兩種方法都是把若干個分類器整合為一個分類器的方法,只是整合的方式不一樣,最終得到不一樣的效果,將不同的分類演算法套入到此類演算法框架中一定程度上會提高了原單一分類器的分類效果,但是也增大了計算量。
下面是將決策樹與這些演算法框架進行結合所得到的新的演算法:
1)Bagging + 決策樹 = 隨機森林
2)AdaBoost + 決策樹 = 提升樹
3)Gradient Boosting + 決策樹 = GBDT
參考
https://baijiahao.baidu.com/s?id=1633580172255481867&wfr=spider&for=pc
https://www.pianshen.com/article/1393124418/
https://www.cnblogs.com/liuwu265/p/4690486.html
https://www.cnblogs.com/earendil/p/8872001.