详解stacking过程
翻到之前自己寫的這篇博客,感覺寫的還是不夠簡潔明了,特地回來改一下,順便文末附上Kaggle內相關操作的代碼,希望能夠幫助學習的同學能夠瞬間理解stacking這個概念。
stacking:stacking是一種分層模型集成框架。以兩層為例,第一層由多個基學習器組成,其輸入為原始訓練集,第二層的模型則是以第一層基學習器的輸出作為特征加入訓練集進行再訓練,從而得到完整的stacking模型。stacking的方法在各大數據挖掘比賽上都很風靡,模型融合之后能夠小幅度的提高模型的預測準確度。
stacking詳解:
借用拍拍貸風控比賽幾位大神這張模型融合的例子,來講解一下。其中的第三模塊,預測M3數據就是一個stacking的過程。
- 第一層:我們采用RF、ET、GBDT、XGB四種模型,分別對訓練樣本進行預測,然后將預測結果作為下一層的訓練樣本。
具體訓練過程:
- 劃分training data為K折,為各個模型的訓練打下基礎;
- 針對各個模型RF、ET、GBDT、XGB,分別進行K次訓練,每次訓練保留K分之一的樣本用作訓練時的檢驗,訓練完成后對testing data進行預測,一個模型會對應5個預測結果,將這5個結果取平均;
- 最后分別得到四個模型運行5次之后的平均值,同時拼接每一系列模型對訓練數據集的預測結果帶入下一層;
圖解:
舉例:比如針對第一個模型RF,我們先將數據集劃分成5折,1,2,3,4,5。步驟如下:
- 保留2,3,4,5訓練,用1做測試數據(查看當前訓練的效果,可配合early stop)記錄下該折測試數據的預測結果,同時預測testing data(此處的testing data就是我們要最終提交結果的那部分數據);
- 保留1,3,4,5訓練,用2做測試數據并記錄下該折測試數據的預測結果,預測testing data;
- 保留1,2,4,5訓練,用3做測試數據并記錄下該折測試數據的預測結果,預測testing data;
- 保留1,2,3,5訓練,用4做測試數據并記錄下該折測試數據的預測結果,預測testing data;
- 保留1,2,3,4訓練,用5做測試數據并記錄下該折測試數據的預測結果,預測testing data;
- 訓練五輪之后得到針對testing data的五個預測值,取平均值,同時拼接每一系列模型對訓練數據集的預測結果;
接下來再用同樣的方法訓練ET、GBDT、XGB,注意保持K折數據的一致!全部訓練完成之后,將得到的四個預測結果帶入下一層預測。
- 第二層:將上一層的四個結果帶入新的模型,進行訓練再預測。第二層的模型一般為了防止過擬合會采用簡單的模型。
具體訓練過程:將四個預測結果,拼接上各個樣本的真實label,帶入模型進行訓練,最終再預測得到的結果就是stacking融合之后的最終預測結果了。
以上即為stacking的完整步驟!
Blending大體與stacking類似,只是將Kfold CV改為了HoldOut CV,也就是原來Kfold CV是等距劃分訓練集,HoldOut CV根據自己定義的百分比進行訓練集測試集的劃分。
為方便理解,附上Kaggle stacking代碼:https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python
總結
以上是生活随笔為你收集整理的详解stacking过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: srvctl命令_clc命令
- 下一篇: opencv教程菜鸟教程_vs open