天天看點

Ensembling模型融合

>>本文所有内容整理自Coursera - Advanced Machine Learning-

How to Win a Data Science Competition: Learn from Top Kagglers

Advanced Machine Learning

一、average

最基礎的,将不同模型的結果平均(或權重平均),得到最終的估計

二、bagging

  • 概念:相同模型不同參數結果的平均,典型例如:random forest
  • 方法:seed、row sampling、shuffling、column sampling、model parameter、model number

    parallel并行計算

  • Code:
  • import numpy as np
    from sklearn.ensemble import RandomForestClassifier
    model=RandomForestClassifier()
    bags=10
    seed=1
    
    bagged_prediction=np.zeros(test.shape[0])
    
    for n in range(0,bags):
        model.set_params(random_state=seed+n)
        model.fit(train,y)
        preds=model.predict(test)
        bagged_prediction+=preds
    
    bagged_prediction/=bags
               

三、boosting

  • 概念:基于上一個模型的結果生成下一個模型和權重,分為weight based和residual based
    • weight based:計算上一個模型的誤差,給誤差大的行提高權重,計算下一個模型,例如AdaBoost
    • esidual based:計算上一個模型的誤差,作為下一個模型的目标值,例如:Xgboost、Lightgbm、H2Os FBM、CatBoost

四、stacking

  • 概念:
  1. 将原始train資料拆分為 train資料 和 validation資料
  2. 對train資料fit不同的模型model1、model2,并分别在validation資料上predict Y1、Y2值
  3. 将Y1、Y2等結果stack為一個矩陣A
  4. 基于A和validation資料的target值套用metamodel融合模型計算
  5. 将test資料同樣套用model1、model2和metamodel計算出最終的結果
  • 代碼:
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

training,valid,ytraining,yvalid = train_test_split(train,y,test_size=0.5)

model1=RandomForestRegressor()
model2=LinearRegression()

model1.fit(training,ytraining)
model2.fit(training,ytraining)

preds1=model1.predict(valid)
preds2=model2.predict(valid)

test_preds1=model1.predict(test)
test_preds2=model2.predict(test)

stacked_predictions=np.column_stack((preds1,preds2))
stacked_test_predictions=np.column_stack((test_preds1,test_preds2))

meta_model=LinearRegression()
meta_model.fit(stacked_predictions,yvalid)

final_predictions=meta_model.predict(stacked_test_predictions)
           
  • 要點:切分資料的時候注意時間序列、train模型的多樣性很重要、可以根據模型的數量和效果的變化趨勢,選擇合适的模型數量、meta模型一般來說會比較簡單

五、stacknet

  • 概念:stack結合神經網絡
  • 圖示:
  • Ensembling模型融合

六、參考資料:

StackNet工具(https://github.com/kaz-Anova/StackNet#installations) 指南(https://mlwave.com/kaggle-ensembling-guide/) heamy工具(https://github.com/rushter/heamy)

七、tips:

  1. stack模型(前置層)的差異性選擇:
  2. Ensembling模型融合
  3. Ensembling模型融合
  4. stack模型(最終融合層):
  5. Ensembling模型融合
  6. 基于stack模型(前置層)的結果同樣可以進行特征工程:
  7. Ensembling模型融合
  8. 如果建立stacknet,建議前一層每7.5個模型對應後一層1個模型。