一、Stacking流程圖

Stacking是個多層的多模型集合方法。每一層都可包括多個模型,下一層利用上一層模型的結果進行學習。下面以2層為例介紹此方法:

  • 2層Stacking運行示意圖

  • Stacking第一層中模型Mi的運行示意圖

二、Stacking步驟說明

  • 數據集說明

訓練數據集設為DT,假設樣本數為3000;預測數據集合為DP,假設樣本數為500;將訓練數據集進行K-Fold(K折)處理,也就是將訓練數據集均分為K份,每一份之間都是不重複的。將其中1份當做驗證(測試)數據集,其中K-1份當做訓練數據集;這樣就行成了K對訓練數據集和測試數據集的組合;在本例中如果將K定義為為10,也就是每一折的訓練數據為2700條,測試數據為300條,預測數據始終為500條。將這10折數據集定義為k1,K2,……,k10,其中ki=(DTi,DAi),兩者分別表示第i折數據集中的訓練,驗證。

  • 層說明
  • 第一層

假設第一層有M個模型,分別是M1,M2,……, MM。現在以模型M1為例,針對第1折的訓練數據進行學習,學習完成後,對測試數據預測得到結果TE_M1_k1,其序列長度為300,因為每一折的測試數據為300條。接著對預測數據進行預測得到結果DP_M1,其序列長度為500,因為預測數據集為500條。 按照此步驟,待10折數據集全部學習完畢後:

  1. 測試數據集得到的結果為TE_M1_k1,TE_M1_k2,……,TE_M1_k10,其實將他們結合起來恰好是原始訓練數據集的條數10*300=3000,也就是說每個訓練樣本都對應有一個結果。將這個結果序列定義為訓練數據集的特徵F_M1。

  2. 預測數據集得到的結果為DP_M1,DP_M2,……,DP_M10,也就是對於預測數據集中的樣本而言,每個樣本都有10個結果,現在對這10個結果計算平均值,得到的序列定義為預測數據集的特徵F_M1。

M個模型均按照上面的說明,完成後。就可以得到訓練數據集的新的M個特徵:F_M1,,F_M2,……,F_MM。同樣的,預測數據集得到了同樣的10個特徵。

  • 第二層

如果多層的話,這一層的設置可以類似於第一層進行設計。因為本例是2層的,因此在這一層,就利用一個模型M0,然後將上一層得到的新的特徵作為訓練數據集的輸入,此處注意不再利用原始的特徵,為了避免過擬合。當然輸出還是原始訓練數據集的輸出,進行學習。學習完畢後,對由新特徵形成的預測數據集進行預測,從而得到最終的結果

三、Stacking實例

  • 北京Pm2.5預測(回歸)
  • Stacking第一層模型的各自結果

  • Stacking第二層BPNN的訓練誤差曲線
  • Stacking最終的結果
  • 成年人收入(分類)
  • Stacking第一層模型結果

  • 第二層為XGBoost最終結果

代碼下載:

Anfany/Machine-Learning-for-Beginner-by-Python3?

github.com圖標

歡迎Fork,感謝Star!!!

微信搜索,關注微信訂閱號pythonfan, 獲取更多機器學習實例和代碼


推薦閱讀:
相關文章