引言
如果你曾經參加過數據科學競賽,你一定意識到集成模型(Ensemble Modeling)舉足輕重的作用。事實上,集成模型提供了最有說服力的方式之一,來建立高度精確的預測模型。Bagging和Boosting算法進一步加強了這一方法的精確性。
所以,你下次構建預測模型的時候,考慮使用這種算法吧。你肯定會贊同我的這個建議。如果你已經掌握了這種方法,那么太棒了。我很想聽聽你在集成模型上的經驗,請把你的經驗分享在下面的評論區。
對于其他人,我將會分享一些集成模型中常見的問題。如果你想評估一個人對集成模型方面的知識程度,你可以大膽地提出這些問題,來檢查他/她的知識水平。另外,這些都是最簡單的問題,因此你不希望他們回答錯誤!
哪些是常見的問題(關于集成模型)?
在分析各種數據科學論壇后,我已經確定了5個集成模型最常見的問題。這些問題與剛接觸集成模型的數據科學家高度相關。以下就是這些問題:
什么是集成模型?
什么是bagging,boosting和stacking?
我們可以集成多個具有相同機器學習算法的模型嗎?
我們如何確定不同模型的權重?
集成模型的好處是什么?
1、什么是集成模型?
我們先從解決一個分類問題來理解它。
場景問題:建立垃圾郵件過濾規則。
解決方案:我們可以制定各種垃圾郵件分類規則,我們來看看其中的幾個:
1、垃圾郵件
郵件少于20個單詞;
只有圖片(宣傳圖片);
具有某些關鍵詞,比如“賺大錢”和“減肥”;
許多拼寫錯誤的單詞。2、非垃圾郵件
從經過驗證域名發來的郵件;
來自家庭成員或者郵件聯系人的郵件
在上面,我已經列出了一些過濾垃圾郵件的常見規則。你認為這些規則能單獨預測正確的分類嗎?
大部分人可能都會認為不能——事實也是這樣!與使用單個規則進行預測相比,結合使用這些規則會產生魯棒的預測效果。這就是集成模型的原則。集成模型集合使用多個“單獨的”(不同的)模型,并提供出色的預測能力。
如果用現實生活中的例子說明集成模型,就比如一群人總能做出比單個人要好的決策,特別是當群成員的背景各不相同時。對于機器學習來說也是這樣。基本上,集成是一種監督式學習技術,它將多個弱學習模塊/模型集成起來,產生強學習模塊。如果我們集成低相關性模型的話,集成模型的工作效果會更好。
集成方法常用于解決數據科學問題方面的一個非常好的例子就是隨機森林算法(使用多層分類回歸樹模型)。在分類新對象上,比使用單個分類回歸樹性能要更好,每一棵樹都給類進行“投票”,然后森林選擇得票最高(在森林所有的樹中)的作為目標分類。如果是回歸問題,那么將取不同樹的輸出均值。
你也可以參考這篇文章《集成學習基礎通俗簡介》來了解更多集成模型知識。
2、什么是Bagging,Boosting和Stacking?
讓我們分別來看看這三個是什么,并了解這些術語之間的區別:
Bagging(Bootstrap匯總)是一種集成方法。首先,我們創建隨機訓練數據集樣本(訓練數據集的子集)。然后我們為每個樣本建立分類器。最后,這些多分類器的結果將結合起來,使用平均或多數投票。Bagging有助于降低方差。
Boosting提供了預測模塊的連續學習功能。第一個預測模塊從整個數據集上學習,下一個預測模塊在前一個的性能基礎上在訓練數據集上學習。首先對原始數據集進行分類,并給每個觀測給予同樣的權重。如果第一個學習模塊錯誤預測了類,那么將會賦予錯誤分類觀測較高的權重。這個過程將反復迭代,不斷添加分類學習模塊,直到達到模型數量或者某個準確度。Boosting有比Bagging更好的預測精準度,但它有時也會過度擬合訓練數據。
Boosting最常見的例子是AdaBoost和梯度提升。你也可以看看這些文章來進一步了解Boosting算法。
Getting smart with Machine Learning – AdaBoost and Gradient Boost
Learn Gradient Boosting Algorithm for better predictions (with codes in R)
Stacking工作分為兩個階段。首先,我們使用多個基礎分類器來預測分類。然后,一個新的學習模塊與它們的預測結果結合起來,來降低泛化誤差。
3、我們可以集成多個具有相同機器學習算法的模型嗎?
是的,我們可以集成多個具有相同機器學習算法的模型,但是結合多個不同算法生成的預測結果通常會得到更好的預測。這是由于彼此間的多樣化或獨立性的本質。比如,結合隨機森林,KNN,樸素貝葉斯得到最終的預測結果集比結合三個隨機森林模型得到的結果要更強。創建一個強大的集成模型的關鍵是模型的多樣性。一個由兩種非常相似技術組成的集成模型性能要比由具有多樣性模型集組成的集成模型差。
案例:假如我們有三個模型(A,B和C)。A,B,C的預測準確率分別為85%,80%,55%。但是A和B高度相關,而C與A或B都不怎么相關。那么我們應該將A和B集成起來嗎?不,我們不能這么做,因為這兩個模型高度相關。因此,我們不能將這兩者集成,因為這對降低泛化誤差沒有幫助。我更傾向于集成A和C或者B和C。
4、我們如何確定不同模型的權重?
集成模型的一個最常見的問題就是找到每個基礎模型的最佳權重。在一般情況下,我們假定所有基礎模型具有相同的權重,然后采取預測的平均值作為結果。但是,這是最好的解決方案嗎?
找到各個基礎學習模塊的最佳權重集成有許多方法。這些方法對找到合適的權重提供了公平的依據。我在下面將它們羅列了出來:
計算基礎學習模塊之間的共線性表,然后基于這張表來確定用于集成的基礎模型。之后,根據確定的基礎模型的交叉驗證得分(得分之比)來確定權重。
找到返回基礎學習模塊最優權重的算法。你可以參考這篇文章 Finding Optimal Weights of Ensemble Learner using Neural Network來了解此算法。
我們同樣可以使用以下方法來解決這個問題:
Forward Selection of learners
Selection with Replacement
Bagging of ensemble methods
你也同時可以看看Kaggle/數據科學競賽勝出的解決方案,以了解解決此問題的其他方法。
5、集成模型的好處是什么?
集成模型有兩大好處:
更好的預測;
更穩定的模型。
集成多個模型會比其他模型有更少的噪聲。在金融領域,我們稱為“多樣化”,投資許多股票要比投資一個股票的變化風險要小。這也是為什么使用集成模型要比使用單獨模型效果要好。使用集成模型需要注意的一個問題是避免過擬合,雖然Bagging在很大程度上對此進行了處理。
后記
在這篇文章中,我們了解了5個關于集成模型常常被問及的問題。在回答這些問題時,我們討論了“集成模型”,“集成方法”,“為什么我們要集成不同的模型”,“確定最優集成權重的方法”和“好處”。我建議你看看數據科學競賽前5名的解決方案,看看他們的集成方式以獲得更深入的理解,然后多多實踐。這會幫助你理解什么方法行得通,什么方法行不通。
你認為這篇文章有用嗎?你用過其他方法找到最優權重嗎?或者確定合適的基礎學習模塊?歡迎你對此進行評論。
如果你喜歡這篇文章并且想繼續數據分析學習,訂閱我們的郵件,關注我們的Twitter或Facebook。