Ensemble Learning是機器學習裏最多見的建模方法,RandomForest 和 GBDT 採用了Ensemble Learning模式,只是具體方法不一樣。算法
下面簡單翻譯下一 https://www.analyticsvidhya.com/blog/2015/09/questions-ensemble-modeling/ 這篇文章,再來理解一下Ensemble Learning模式。dom
與Ensemble Learning相關的常見問題機器學習
一、什麼是Ensemble Learning?函數
二、什麼是bagging, boosting, stacking?學習
三、同一個ML算法怎麼作集成(ensemble)?spa
四、不一樣的模型如何肯定權重?翻譯
五、ensemble模型有什麼優點?rest
下面一個一個來回答。code
文中舉了一個垃圾郵件檢測的例子,簡單來講就是,僅憑單個規則很難準確識別垃圾郵件,可是使用多條規則會提升識別的準確率。這個例子是爲了說明,ensemble learning是一個「多合一」的方法。「多」指的是多個個體模型(individual models),注意,並不是是多個獨立模型;「合一」指的是多個模型共同造成一個識別/迴歸結果。Ensemble的通常特色是,多個模型間的相關性越低,合成以後的識別/迴歸效果越好。orm
具體的合成方法有多種,其中最典型的ensemble算法是隨機森林(Random Forest)。引用文中的話是:
It (Random Forest)performs better compared to individual CART model by classifying a new object where each tree gives 「votes」 for that class and the forest chooses the classification having the most votes (over all the trees in the forest). In case of regression, it takes the average of outputs of different trees.
Bagging是對樣本進行採樣,構造出若干個新數據集,而後對應訓練出若干個模型,再把這些模型合而爲一,獲得輸出結果。其本質是下降了模型的方差(Variance)。
Boosting是一種模型迭代方法,初始化時,有一個簡單的模型、各樣本權重相等,由此獲得識別結果,根據識別結果調整樣本權重,判錯的樣本權重變大,據此獲得新的模型,把新模型迭代到老模型上,再獲得識別結果,如此循環迭代下去,最終若干個模型疊加在一塊兒,獲得最終的輸出模型。
Boosting通常精確率比Bagging更高,可是容易過擬合(over-fit)。
常見的兩種Boosting算法是 AdaBoost 和 Gradient Boosting。
[原文中的圖沒看懂,就不附圖了]
Stacking就是簡單的模型合成,先從原數據中訓練獲得若干個模型,而後用一個函數把若干個模型合成,輸出最終的識別/迴歸結果。這裏並無介紹如何作合成,往後遇到具體案例再來細聊。
能夠把相同的模型集成起來,可是這樣作的效果一般不會太好,更提倡的作法是把不一樣類型的模型集成起來,好比 把Random Forest , KNN 和 Naive Beyes集成起來,模型之間越是不一樣,集成後的效果每每越好。
文中舉了個反直覺的例子,三個模型(A, B, C),識別的精確率分別是85%,80%和50%,A和B相關性很強,C和A, B的相關性很低,此時把A和B作集成是錯誤的,應該把A和C或者B和C作集成。
不用動腦子的權重設置方法是等權重,動動腦子的方法有如下幾個:
1. 計算多個base model的collinearity,基於獲得的collinearity矩陣作model篩選,而後根據篩選出的model的cross validation score來肯定model 的weight。 [這段話沒有真正理解,須要實踐來驗證]
2. 利用單獨的算法來肯定權重,文中推薦了一篇文章 Finding Optimal Weights of Ensemble Learner using Neural Network 。
3. 能夠借鑑其餘算法,例如 Forward Selection of learners Selection with Replacement Bagging of ensemble methods 。
還能夠到Kaggle上查找優秀的解決方案,學習那些方案中的ensemble方法。
ensemble的優點在於兩點:一是判別的精確率更高,二是模型更穩定,換一種說法是,ensemble能夠減少誤差,減少方差,最終減少模型的泛化偏差。
後記:ensemble learning方法自己不難理解,難在如何應用,待後續工做中有了應用案例再來寫續篇。