Blending 和 Stacking 对比

Blending 和 Stacking 对比

  • stacking
    • 二、如何构造stacking模型
  • Blending

Stacking和blending的区别在于数据的划分,blending用不相交的数据训练不同的基模型,并将其输出取加权平均。而stacking是将数据集划分为两个不相交的集合,在第一个集合的数据集中训练多个模型,在第二个数据集中测试这些模型,将预测结果作为输入,将正确的标签作为输出,再训练一个高层的模型。

stacking

stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为特征加入训练集进行再训练,从而得到完整的stacking模型。

二、如何构造stacking模型

以两层stacking模型为例,要得到stacking模型,关键在于如何构造第二层的特征(下记为元特征,meta feature),构造元特征的原则是尽可能的避免信息泄露,因此对原始训练集常常采用类似于K折交叉验证的划分方法。 从而尽可能的降低过拟合的风险。

  • 基模型的选择需要考虑的是:基模型之间的相关性要尽量小,同时基模型之间的性能表现不能差距太大。
  • 对于某一个基模型而言,对全部Train Data进行五折交叉验证,我如下图上半部分所示。
  • 所有基模型对Test Data 预测之后求平均,得到测试集对基模型的输入。
    Blending 和 Stacking 对比_第1张图片
    Blending 和 Stacking 对比_第2张图片
    上半部分是用一个基础模型进行5折交叉验证,如:用XGBoost作为基础模型Model1,5折交叉验证就是先拿出四折作为training data,另外一折作为testing data。

Blending

Blending与Stacking大致相同,只是Blending的主要区别在于训练集建立一个 Holdout集,只在Holdout集上继续预测,用不相交的数据训练不同的 Base Model,将它们的输出取(加权)平均。
例如Holdout是10%的训练数据,第二阶段的 stacker 模型就基于第一阶段模型对这10%训练数据的预测值进行拟合。说白了,就是把Stacking流程中的 K-Fold CV 改成 HoldOut CV

Blending的优点在于:
1.比stacking简单(因为不用进行k次的交叉验证来获得stacker feature)
2.避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集
3.在团队建模过程中,不需要给队友分享自己的随机种子

而缺点在于:
1.使用了很少的数据
2.blender可能会过拟合(其实大概率是第一点导致的)
3.stacking使用多次的CV会比较稳健

你可能感兴趣的:(机器学习原理)