機器學習_學習筆記系列(31):引導聚集分類(Bagging Classifier)
在介紹Ensemble Learning那個章節的時候,我們有稍微提到Bagging,其是一種訓練機器學習模型的方式。
Bagging
Bagging的全名又叫做Bootstrap Aggregation[1],其是來自1996年Leo Breiman(CART演算法和Bagging始祖)發的篇paper
Bagging predictors
(看看人家元老級ML科學家,title不用buzzword,citation就25000+)
其方法就是先將我們的原有資料集產生幾個新的資料集,然後這些新的資料集,再各自產生sub-models,最後我們再將這些sub-models合併起來。這樣的產生方式,我們又將其叫做Parallel Ensemble Method。
而之所以叫做Bootstrap Aggregation是因為這個方法用Bootstrap Sampling,然後最後做Aggregation。對於Bootstrap Sampling相信有學過統計學的多多少少聽過一些,其就是
我們從資料集裡抽樣過後的樣本,會放回去原本的資料集裡
也就是說有些資料他可能被選過超過1次,有的可能一次都沒有。而Aggregation就是最後訓練完的數個sub-models,我們以Ensemble Voting和Ensemble Averaging的方式結合。
其演算法[2]為
其設我們有一組資料集D總共有m筆資料,其輸入資料為x、標記資料為y,然後每次訓練演算法的時候,我們從資料集隨機取一筆資料到樣本資料集D_bs,然後一直取到D_bs有m筆資料(所以有些資料可能有重複),然後我們用D_bs訓練一個子模型,接著將上述這些步驟重複T次,最後再將這T個sub-models合併起來。
另外在每一次選取資料時,那些沒被選進D_bs的資料為out-of-bag,可以用來檢測sub-models預測效果。
而在這篇作者也講到,在資料集D裡面,每筆資料被選到1次、2次、3次…的機率會接近Poisson Distribution (with λ=1),也就是說,一筆資料至少被選中一次的機率為1-(1/e)
接下來我們實際用SVM當作sub-models來看看
我們可以看到有些sub-models藍色的點取的比較少,也有的紅色的點取的比較少,所以造成很大的偏移,不過我們可以看到所有sub-model和bagging在訓練集和測試集的表現。
我們可以看到用了bagging,雖然我們得到的model不是最好的model,但是可以說是接近理想的model。所以說bagging可以達到我們集成學習的效果。
Python Sample Code:
Github:
Reference:
[1] Breiman, L. (1996). Bagging predictors. Machine learning, 24(2), 123–140.
[2] Zhou, Z. H. (2012). Ensemble methods: foundations and algorithms. CRC press.