1. 內建學習(Ensemble Learning)原理
2. 內建學習(Ensemble Learning)Bagging
3. 內建學習(Ensemble Learning)随機森林(Random Forest)
4. 內建學習(Ensemble Learning)Adaboost
5. 內建學習(Ensemble Learning)GBDT
6. 內建學習(Ensemble Learning)算法比較
7. 內建學習(Ensemble Learning)Stacking
1. 前言
前面從整體的角度介紹了內建學習算法,內建學習算法分為Bagging、Boosting、Stacking。Bagging的特點是各個弱學習器之間沒有依賴關系,Boosting的特點是各個弱學習器之間有依賴關系,Stacking的特點是在多個學習器的基礎上再加一個機器學習算法進行預測。
2. Bagging原理
Bagging的原理可以通過下圖清楚的看到。
Bagging的原理是随機采樣,就是在我們的訓練集裡面采集固定個數的樣本,但是每采集一個樣本後,都将樣本放回。是以之前采集到的樣本在放回後有可能繼續被采集到。對于我們的Bagging算法,得到的采樣集和訓練集樣本的個數相同,但是樣本内容不同。如果我們對有\(m\)個樣本訓練集做\(T\)次的随機采樣,,則由于随機性,\(T\)個采樣集各不相同。
這裡還有一個有意思的地方,由于是随機采樣,我們的所有樣本中,有一些樣本會一直沒有采樣到,這個樣本的數量大約是所有樣本的36.8%。我們稱這部分資料為袋外資料(Out Of Bag,簡稱OOB)。這些資料沒有參與訓練集模型的拟合,是以可以用來檢測模型的泛化能力。有了OOB我們就不需要重新分離test集合,後面用OOB代替test集合進行驗證。這樣訓練集的采樣空間就是整個資料集,這樣訓練集的資料分布就更加接近真實的資料分布。
Bagging的集合政策也比較簡單,對于分類問題,使用簡單投票法,得到最多票數的類别或者類别之一為最終的模型輸出。對于回歸問題,使用簡單平均法,對T個弱學習器得到的回歸結果進行算術平均得到最終的模型輸出。
由于Bagging算法每次都進行采樣來訓練模型,是以泛化能力很強,對于降低模型的方差很有作用,即降低過拟合程度。當然對于訓練集的拟合程度就會差一些,也就是模型的偏倚會大一些。
3. Bagging算法流程
本節就對Bagging算法的流程做一個總結。相對于Boosting系列的Adaboost和GBDT,Bagging算法要簡單的多。
輸入為樣本集\(D={(x_1,y_1),(x_2,y_2),...(x_m,y_m)}\),弱學習器算法, 弱分類器疊代次數T。
輸出為最終的強分類器f(x)
- 對于\(t=1,2...,T\):
- 對訓練集進行第t次随機采樣,共采集\(m\)次,得到包含\(m\)個樣本的采樣集\(D_t\)
- 用采樣集\(D_t\)訓練第\(t\)個弱學習器\(G_t(x)\)
- 如果是分類算法預測,則\(T\)個弱學習器投出最多票數的類别或者類别之一為最終類别。如果是回歸算法,\(T\)個弱學習器得到的回歸結果進行算術平均得到的值為最終的模型輸出。
4. 總結
本文詳細的介紹了下Bagging的一些細節,Bagging的思想是比較簡單的,但是裡面蘊含這巨大的力量,用了Bagging的算法能夠有效的減少過拟合的程度,因為弱學習器之間沒有依賴關系,是以可以并行訓練,大幅度提升訓練速度。下文介紹Bagging的優秀算法随機森林(Random Forest)。