>>本文所有内容整理自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
- 概念:
- 将原始train資料拆分為 train資料 和 validation資料
- 對train資料fit不同的模型model1、model2,并分别在validation資料上predict Y1、Y2值
- 将Y1、Y2等結果stack為一個矩陣A
- 基于A和validation資料的target值套用metamodel融合模型計算
- 将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:
- stack模型(前置層)的差異性選擇:
-
Ensembling模型融合 -
Ensembling模型融合 - stack模型(最終融合層):
-
Ensembling模型融合 - 基于stack模型(前置層)的結果同樣可以進行特征工程:
-
Ensembling模型融合 - 如果建立stacknet,建議前一層每7.5個模型對應後一層1個模型。