模型融合方法

本文是《KAGGLE ENSEMBLING GUIDE》一文的閱讀筆記,忽略了一些不感興趣的內容,原文請閱:https://mlwave.com/kaggle-ensembling-guide/


模型融合是kaggle等比賽中經常使用到的一個利器,它通常可以在各種不同的機器學習任務中使結果獲得提升。顧名思義,模型融合就是綜合考慮不同模型的情況,並將它們的結果融合到一起。模型融合主要通過幾部分來實現:從提交結果文件中融合、stacking和blending。

從提交結果文件中融合
最簡單便捷的方式就是從競賽的提交結果文件中進行融合,因爲這樣做並不需要重新訓練模型,只需要把不同模型的測試結果弄出來,然後採取某種措施得出一個最終結果就ok。

多數表決融合
首先證明一下爲什麼模型融合能提高準確率以及對低相關的結果進行融合可以獲得更好結果
用一個概率的例子來說明。假如現在有10條記錄,每條記錄能被正確分類的概率爲70%,或者某個模型對這10條記錄進行分類能獲得70%的準確率。現在擬合三個相當的模型,採用多數表決的情況下,對每條記錄,三個模型都判斷正確的概率爲0.7*0.7*0.7~=0.34,兩個模型判斷正確的概率爲0.7*0.7*0.3*3~=0.44,那麼通過三個準確率0.7的模型來融合的話,理論上最終每條記錄能被正確分類的概率提升到0.78
周志華教授在他的著作《機器學習》提到,結果的差異性越高,最終模型融合出來的結果也會越好。同樣用一個簡單的例子來證明:接着上面的話題,假設現在三個模型預測出來的結果是
model1:1111111100 = 80% 準確率
model2:1111111100 = 80% 準確率
model3:1011111100 = 70% 準確率
如果把這三個模型結果用多數表決組合起來,那麼最終結果是:1111111100 = 80%,這個結果跟第一、二個模型是一致的,也就是,這樣的模型融合對最終結果沒有任何的提升
假如我們現在把三個模型結果改爲:
model1:1111111100 = 80% 準確率
model2:0111011101 = 70% 準確率
model3:1000101111 = 60% 準確率
顯然這三個模型之間的差異更大,而且表面來看性能也不如前面提到的三個模型,但它們融合出來的結果是:1111111101 = 90% 準確率

加權表決融合
多數表決的融合方式默認了所有模型的重要度是一樣的,但通常情況下我們會更重視表現較好的模型而需要賦予更大的權值。在加權表決的情況下,表現較差的模型只能通過與其他模型獲得一樣的結果來增強自己的說服力。

對結果取平均
對結果取平均在很多機器學習問題上以及不同的評估準則上都獲得很不錯的結果。
取均值的做法常常可以減少過擬合現象。在機器學習的應用上,過擬合現象是很普遍的,根本問題是訓練數據量不足以支撐複雜的模型,導致模型學習到數據集上的噪音,這樣產生的問題是模型很難泛化,因爲模型“考慮”得過分片面。
但如果對結果取平均,可以在一定程度上減輕過擬合現象。圖中所示,單個模型因爲過擬合產生了綠色的決策邊界,但事實上黑色的決策邊界因爲有更好的泛化能力從而有更好的效果。如果通過擬合多個模型並對模型結果取平均,對這些噪音點的考慮就會因爲結果拉平均的原因而減少,決策邊界也會慢慢的往黑色線靠攏。
記住,機器學習的目的並不是讓模型記住訓練數據,而是對未知數據有更好的推廣。


Stacking&Blending
Stacking
Stacking的基本思想是用一些基分類器進行分類,然後使用令一個分類器對結果進行整合。
用2-fold stacking作爲例子:
1.將訓練數據分成A和B兩份
2.使用第一階段模型用A訓練,然後對B生成預測值
3.通過同樣的模型用B訓練,生成A的預測值
4.然後使用整個訓練集來擬合這個模型,並生成測試集的預測值
5.像第(2)步一樣訓練第二階段模型
Stacking的模型可以在特徵空間上獲取更加多的信息,因爲第二階段模型是以第一階段模型的預測值會作爲特徵

(注:此圖是本人所畫,如有不對請指正)

Blending
Blending與Stacking大致相同,只是Blending的主要區別在於訓練集不是通過K-Fold的CV策略來獲得預測值從而生成第二階段模型的特徵,而是建立一個Holdout集,例如說10%的訓練數據,第二階段的stacker模型就基於第一階段模型對這10%訓練數據的預測值進行擬合。說白了,就是把Stacking流程中的K-Fold CV 改成 HoldOut CV。
Blending的優點在於:
1.比stacking簡單(因爲不用進行k次的交叉驗證來獲得stacker feature)
2.避開了一個信息泄露問題:generlizers和stacker使用了不一樣的數據集
3.在團隊建模過程中,不需要給隊友分享自己的隨機種子
而缺點在於:
1.使用了很少的數據(第二階段的blender只使用training set10%的量)
2.blender可能會過擬合(其實大概率是第一點導致的)
3.stacking使用多次的CV會比較穩健
對於實踐中的結果而言,stacking和blending的效果是差不多的,所以使用哪種方法都沒什麼所謂,完全取決於個人愛好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章