Kaggle 機器學習之模型融合心得
本文作者吉他手,AI 研習社獲其授權發布。
此文道出了本人學習 Stacking 入門級應用的心路歷程。
在學習過程中感謝 @貝爾塔的模型融合方法(http://t.cn/R62UGLF),以及如何在 Kaggle 首戰中進入前 10%這篇文章(作者是章凌豪)。對於兩位提供的信息,感激不盡。同時還有 Kaggle 上一些關於 ensemble 的文章和代碼,比如這篇(http://t.cn/ROI2HyK)。
本文適用於被 stacking 折磨的死去活來的新手,在網上為數不多的 stacking 內容里,我已經假設你早已經看過了上述所提到的那幾篇有用的文章了。但是,看完之後內心還是卧槽的。我希望下面的內容能成為,你在學習 stacking 的曲折道路上的一個小火把,給你提供一些微弱的光亮。
本文以 Kaggle 的 Titanic(泰坦尼克預測,https://www.kaggle.com/c/titanic)入門比賽來講解 stacking 的應用(兩層!)。
數據的行數:train.csv 有 890 行,也就是 890 個人,test.csv 有 418 行(418 個人)。
而數據的列數就看你保留了多少個 feature 了,因人而異。我自己的 train 保留了 7+1(1 是預測列)。
在網上為數不多的 stacking 內容里,相信你早看過了這張圖:
這張圖,如果你能一下子就能看懂,那就 OK。
如果一下子看不懂,就麻煩了,在接下來的一段時間內,你就會卧槽卧槽地持續懵逼......
因為這張圖極具『誤導性』。(注意!我沒說這圖是錯的,儘管它就是錯的!!!但是在網上為數不多教學裡有張無碼圖就不錯啦,感恩吧,我這個小弱雞)。
我把圖改了一下:
對於每一輪的 5-fold,Model 1 都要做滿 5 次的訓練和預測。
Titanic 栗子:
Train Data 有 890 行。(請對應圖中的上層部分)
每 1 次的 fold,都會生成 713 行 小 train, 178 行 小 test。我們用 Model 1 來訓練 713 行的小 train,然後預測 178 行 小 test。預測的結果是長度為 178 的預測值。
這樣的動作走 5 次! 長度為 178 的預測值 X 5 = 890 預測值,剛好和 Train data 長度吻合。這個 890 預測值是 Model 1 產生的,我們先存著,因為,一會讓它將是第二層模型的訓練來源。
重點:這一步產生的預測值我們可以轉成 890 X 1 (890 行,1 列),記作 P1 (大寫 P)
接著說 Test Data 有 418 行。(請對應圖中的下層部分,對對對,綠綠的那些框框)
每 1 次的 fold,713 行 小 train 訓練出來的 Model 1 要去預測我們全部的 Test Data(全部!因為 Test Data 沒有加入 5-fold,所以每次都是全部!)。此時,Model 1 的預測結果是長度為 418 的預測值。
這樣的動作走 5 次!我們可以得到一個 5 X 418 的預測值矩陣。然後我們根據行來就平均值,最後得到一個 1 X 418 的平均預測值。
重點:這一步產生的預測值我們可以轉成 418 X 1 (418 行,1 列),記作 p1 (小寫 p)
走到這裡,你的第一層的 Model 1 完成了它的使命。
第一層還會有其他 Model 的,比如 Model 2,同樣的走一遍, 我們有可以得到 890 X 1 (P2) 和 418 X 1 (p2) 列預測值。
這樣吧,假設你第一層有 3 個模型,這樣你就會得到:
來自 5-fold 的預測值矩陣 890 X 3,(P1,P2, P3) 和 來自 Test Data 預測值矩陣 418 X 3, (p1, p2, p3)。
-----------------------------------------
到第二層了..................
來自 5-fold 的預測值矩陣 890 X 3 作為你的 Train Data,訓練第二層的模型
來自 Test Data 預測值矩陣 418 X 3 就是你的 Test Data,用訓練好的模型來預測他們吧。
---------------------------------------
最後 ,放出一張 Python 的 Code,在網上為數不多的 stacking 內容里, 這個幾行的 code 你也早就看過了吧,我之前一直卡在這裡,現在加上一點點註解,希望對你有幫助:
新人福利
關注 AI 研習社(okweiwu),回復1領取
【超過 1000G 神經網路 / AI / 大數據,教程,論文】
一個框架解決幾乎所有機器學習問題
※搜狗研究員講解基於深度學習的語音分離
※Theano 停止更新之後,開發者們怎麼說?
※搜狗研究員:基於LSTM-RNN的語音聲學建模技術
※如何用 MOOC 組合掌握機器學習?
TAG:唯物 |