[Machine Learning]Stack (Ensemble Model )

  • 305
  • 0
  • 2019-04-30

最近專案在對英雄聯盟進行比賽預測,由於用了各種演算法進行測試都得不到好的結果,所以只好搬出大絕招,用super learning來對付!

一.基本概念

Stack又稱super learning,很常玩Kaggle的人對它應該不陌生,其實不用把它想的很複雜,它就是一個三個臭皮匠勝過一位諸葛亮的概念

我們通常分析資料都是用單一模型去進行預測,而Stack就是將多個單一模型組合為一的技術。以下會用我個人理解去簡單的介紹。

 

二.Stack的運作流程

1 . 利用Basic Model(你可以選擇用Random Forest、GLM、GBM,等等 )進行5-fold交叉驗證,例如:用GBM作為Basic Model1,5-fold就是先拿出4折作為Training Data,另外一折作為Testing Data。

注意:在Stack中此部分會用到整個Data Set。例如:假设Training Set為1000行數據,Testing Set為250行數據,總共1250的Data Set,每一次的交叉驗證中會對Training Set進行劃分(5-fold)

Training data會是800行,Testing data是200行。

2 . 每一次的交叉驗證包含兩個過程

  • 基于Training data訓練模型;
  • 生成的模型對Testing data進行預測

在第一次的交叉驗證完成之后我們會得到當前Testing data的預測值,(一维200行的數據,簡稱P1)。

注意!這部分進行完後,我們還要Data Set的Testing Set進行預測,過程會產生250行預測值(一维250行的數據,簡稱K1),這部分預測值將會作為Testing data的一部分,

由於我們進行的是5-fold,所以以上提及的過程將會進行5次,最終會生成Testing data預測的5列200行的數據P1~5,對Testing set的預測是5列250行數據K1~5。

3 . 將P1~5合併起来,會形成一個1000行一列的矩陣,稱PA1。而K1~5數據,我們每一列的每一行取平均,得到一个250行一列的矩陣,稱KA1。

以上就是Stack中一個模型的完整流程,Stack中通常包含多個模型,假設

  • Model2 : GLB
  • Model3:RF
  • Model4: XGboost
  • Model5:SVM

對於其他模型,我們重複以上步驟,可以得到新的PA1~5,KA1~5矩陣。

並把PA1~5合併得到一個1000行五列的矩陣作為Training data,KA1~5合併得到一個250行五列的矩陣作為Testing data。再提供給下一層模型作訓練,以此類推。

三.經驗分享

再進行建模時,我都會對每個模型進行HyperParameter,這點之後會再進行教學,主要是對個模型參數調到滿意的程度

經驗法則下來,個人對於Basic model的組合為 GBM*2~3 、 GLB*1 、 RF*2~3 、DL*1 ,當然這會因資料有所不同,但分析許多資料我都用以這組為優先也都得到不錯的結果。