Bagging and Boosting 在集成學習中,這兩者是相提並論的主流方法。 Bagging(Bootstrap Aggregation)分成兩個部分,Bootstrap和Aggregation。Bootstrap是基於機率論上的大數法則(Law of large numbers)發展而來,也就是實驗重複越多次,累積結果的統計值越逼近母群體的參數。我們都知道丟骰子任何一面出現的機率都是1/6,但你實際上丟6次的結果又如何呢?這個就是我們實現次數太少導致的結果,依循大數法則,你可以預期當你投600萬次,每一個點數出現的次數應該都是100萬次左右,這就是大數法則的意義。 所以在Bootstrap階段我們會不斷的重複抽樣,並用抽出來的子集合訓練一個弱的模型,然後放回,重複實驗,不斷產出新的弱模型。最後Aggregation的階段就是讓所有弱進行投票,得到預測結果。如果把每個弱模型分開來看可能varience很大,但把不同的varience很大的model集合起來看以後,varience就被縮小了。 使用Bagging的時機 當model的複雜度很高,擔心會過擬合(overfitting)時才做bagging 減低varience Decision tree很容易overfit所以特別需要,用Decision tree做bagging的結果就是Random Forest Boosting方法 A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting, 1997 如剛才所提到,Bagging是用在很強的model,也就是複雜度高的模型,與之相對Boosting是用在很弱的model。 當你有一個很弱的model,你沒辦法讓他充分的fit你的data時,你就會想要用Boosting。 特色 Boosting有一個數學上,很有力的Guarantee(保證) 假設你有一個ML的演算法,它可以給你一個錯誤率略低過50%的分類器。(這樣是一個很爛的模型) Boosting的方法可以保證讓這些錯誤率略低於50%的分類器,最後的錯誤率達到0%。(不過可能是過擬合) Boosting的framework(框架) 找一個f1(x)分類器 找另一個f2(x)來輔助f1(x) 注意: f1和f2不可以相似, 他們的特性需要是互補的 再找一個f3跟f2是互補的, 再一個f4跟f3互補........ 以此類推,找到n個,舉例來說:100個分類器,再把100個集合起來,就可以得到很低的error rate. 就算每一個都很弱也沒關係 要注意的是: Boosting的classifier(分類器)的訓練是有順序性的, 要先找f1, 才有f2, 才有f3...... Bagging的分類器是沒有順序問題的, 100顆決策樹可以平行製作 用AdaBoost產出互補的分類器 互補可以很直觀的理解為「解決你沒能解決的問題」也就是處理殘差,最簡單的方法就是針對前一個模型分類錯誤的資料點進行補償。這裡我們用經典的AdaBoost(Adaptive Boosting)來做簡單說明。 首先,我們還是做Bootstrap進行重複抽樣,設定對所有資料點的抽樣權重是相同的1。 訓練f1(x),並記錄抽樣到的x子集合中包含哪些資料點,在這裡將f1稱為stump1。 評估f1(x),針對分類錯誤的資料點,調整進行抽樣時的抽樣權重,並降低分類正確者的抽樣權重 評估f1(x),計算Total Error,並基於該值計算f1在最後投票時的話語權(最後投票時並不是每一票都等值的) 以此類推訓練f2(也就是stump2),重複執行,直到達到停止條件。 小結 Boosting方法能夠有效率地找到並克服不好訓練的資料點,適用於模型複雜度不高,或者資料點複雜度高的情況。如果覺得AdaBoost不太有效率,你也可以採用Gradient Boosting方法來執行,受限於篇幅這邊就不做太深入的討論,大致上Gradient Boosting是先初始化第一個分類器的目標函數g0(x),第二個分類器的目標函數則是g0(x)+α1f1(x)=g1(x),以此類推,第三個分類器的目標函數就是g0(x)+g1(x)+α2f2(x)=g2(x)。透過不斷迭代來找到優化方向。 以上就是Boosting方法的分享。