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结合神经网络
  • 图示:


六、参考资料:

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

七、tips:

  1. stack模型(前置层)的差异性选择:

  2. stack模型(最终融合层):

  3. 基于stack模型(前置层)的结果同样可以进行特征工程:

  4. 如果建立stacknet,建议前一层每7.5个模型对应后一层1个模型。


猜你喜欢

转载自blog.csdn.net/qq_36080693/article/details/79782713