Baggging 和Boosting都是模型融合的方法,能夠將弱分類器融合以後造成一個強分類器,並且融合以後的效果會比最好的弱分類器更好。面試
Bagging:算法
先介紹Bagging方法:api
Bagging即套袋法,其算法過程以下:dom
從原始樣本集中抽取訓練集。每輪從原始樣本集中使用Bootstraping的方法抽取n個訓練樣本(在訓練集中,有些樣本可能被屢次抽取到,而有些樣本可能一次都沒有被抽中)。共進行k輪抽取,獲得k個訓練集。(k個訓練集之間是相互獨立的)函數
每次使用一個訓練集獲得一個模型,k個訓練集共獲得k個模型。(注:這裏並無具體的分類算法或迴歸方法,咱們能夠根據具體問題採用不一樣的分類或迴歸方法,如決策樹、感知器等)優化
對分類問題:將上步獲得的k個模型採用投票的方式獲得分類結果;對迴歸問題,計算上述模型的均值做爲最後的結果。(全部模型的重要性相同)spa
Boosting:.net
AdaBoosting方式每次使用的是所有的樣本,每輪訓練改變樣本的權重。下一輪訓練的目標是找到一個函數f 來擬合上一輪的殘差。當殘差足夠小或者達到設置的最大迭代次數則中止。Boosting會減少在上一輪訓練正確的樣本的權重,增大錯誤樣本的權重。(對的殘差小,錯的殘差大)rest
梯度提高的Boosting方式是使用代價函數對上一輪訓練出的模型函數f的偏導來擬合殘差。blog
Bagging和Boosting的區別:
1)樣本選擇上:
Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的。
Boosting:每一輪的訓練集不變,只是訓練集中每一個樣例在分類器中的權重發生變化。而權值是根據上一輪的分類結果進行調整。
2)樣例權重:
Bagging:使用均勻取樣,每一個樣例的權重相等
Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大。
3)預測函數:
Bagging:全部預測函數的權重相等。
Boosting:每一個弱分類器都有相應的權重,對於分類偏差小的分類器會有更大的權重。
4)並行計算:
Bagging:各個預測函數能夠並行生成
Boosting:各個預測函數只能順序生成,由於後一個模型參數須要前一輪模型的結果。
5)這個很重要面試被問到了
Bagging對樣本重採樣,對每一重採樣獲得的子樣本集訓練一個模型,最後取平均。因爲子樣本集的類似性以及使用的是同種模型,所以各模型有近似相等的bias和variance(事實上,各模型的分佈也近似相同,但不獨立)。因爲,因此bagging後的bias和單個子模型的接近,通常來講不能顯著下降bias。另外一方面,若各子模型獨立,則有,此時能夠顯著下降variance。若各子模型徹底相同,則
,此時不會下降variance。bagging方法獲得的各子模型是有必定相關性的,屬於上面兩個極端情況的中間態,所以能夠必定程度下降variance。爲了進一步下降variance,Random forest經過隨機選取變量子集作擬合的方式de-correlated了各子模型(樹),使得variance進一步下降。
(用公式能夠一目瞭然:設有i.d.的n個隨機變量,方差記爲,兩兩變量之間的相關性爲,則的方差爲
,bagging下降的是第二項,random forest是同時下降兩項。詳見ESL p588公式15.1)
boosting從優化角度來看,是用forward-stagewise這種貪心法去最小化損失函數。例如,常見的AdaBoost即等價於用這種方法最小化exponential loss:。所謂forward-stagewise,就是在迭代的第n步,求解新的子模型f(x)及步長a(或者叫組合係數),來最小化,這裏
是前n-1步獲得的子模型的和。所以boosting是在sequential地最小化損失函數,其bias天然逐步降低。但因爲是採起這種sequential、adaptive的策略,各子模型之間是強相關的,因而子模型之和並不能顯著下降variance。因此說boosting主要仍是靠下降bias來提高預測精度。
參考資料:
連接:https://www.zhihu.com/question/26760839/answer/40337791
https://blog.csdn.net/u013709270/article/details/72553282