>>本文所有内容整理自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结合神经网络
- 图示:
六、参考资料:
StackNet工具(https://github.com/kaz-Anova/StackNet#installations)
指南(https://mlwave.com/kaggle-ensembling-guide/)
heamy工具(https://github.com/rushter/heamy)
七、tips:
- stack模型(前置层)的差异性选择:
- stack模型(最终融合层):
- 基于stack模型(前置层)的结果同样可以进行特征工程:
- 如果建立stacknet,建议前一层每7.5个模型对应后一层1个模型。