Ensembling模型融合

12 篇文章 1 订阅
4 篇文章 0 订阅

>>本文所有内容整理自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个模型。


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模型集成是一种强大的技术,可以在任务中取得最佳成果。它通过将多个不同模型的预测结果汇集在一起,从而得到更好的预测结果。集成的基本假设是,不同模型的良好表现可能是因为它们从不同的角度观察数据并做出预测,每个模型都得到了数据真相的一部分。将每个模型的观点汇聚到一起,就可以得到更准确的结果。\[1\] 近年来,一种成功的基本集成方法是宽且深的模型类型,它结合了深度学习和浅层学习。这种模型联合训练一个深度神经网络和一个大型的线性模型,以实现模型集成的目的。另外,集成的模型应尽可能好,同时尽可能不同,这意味着使用非常不同的构架,甚至使用不同类型的机器学习方法。一种有效的方法是将基于树的方法和深度神经网络进行集成,因为它们提供了不同的信息,可以改进集成结果。\[2\]\[3\] 总而言之,模型集成是一种通过汇集多个模型的预测结果来提高预测准确性的技术。它依赖于不同模型从不同角度观察数据并做出预测的假设,并通过将每个模型的观点汇聚到一起来得到更准确的结果。近年来,宽且深的模型类型以及将基于树的方法和深度神经网络进行集成的方法在实践中取得了成功。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [模型集成(model ensembling)](https://blog.csdn.net/weixin_47492805/article/details/130448661)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [谈谈深度学习中的模型集成](https://blog.csdn.net/AnneQiQi/article/details/104015889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值