stacking和blending的对比分析

stacking和blending的对比分析

stacking

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

构造stacking模型

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

  • 基模型的选择需要考虑的是:基模型之间的相关性要尽量小,同时基模型之间的性能表现不能差距太大。
  • 对于某一个基模型而言,对全部Train Data进行五折交叉验证,我如下图上半部分所示。
  • 所有基模型对Test Data 预测之后求平均,得到测试集对基模型的输入。

stacking和blending的对比分析
我们将原始训练集分为5折,分别记为fold1、fold2、fold3、fold4和fold5。此时我们使用fold2-fold5的数据来训练基模型1,并对fold1进行预测,该预测值即作为基模型1对fold1生成的元特征;同样地,使用fold1、fold3-fold5的数据来训练基模型1,并对fold2进行预测,该预测值即作为基模型1对fold2生成的元特征;以此类推,得到基模型1对整个原始训练集生成的元特征。同样地,对其他基模型也采用相同的方法生成元特征,从而构成用于元模型训练的完整元特征集。对于测试集,我们可以在每次基模型训练好时预测,再将预测值做均值处理;也可以将基模型拟合全部的训练集之后再对测试集进行预测。
需要注意的是,在生成第二层特征的时候,各个基模型要采用相同的Kfold,这样得到的元特征的每一折(对应于之前的K折划分)都将不会泄露进该折数据的目标值信息 ,从而尽可能的降低过拟合的风险。虽然如此,实际上我们得到的元特征还是存在一定程度上的信息泄露,比如我们在预测第二折的时候,是利用了第一折的目标值信息用于训练基模型的,也就是说第一折的目标值信息杂糅在对第二折进行预测的基模型里。但是,实践中,这种程度的信息泄露所造成的过拟合程度很小。

下面是训练到测试的流程
stacking和blending的对比分析

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会比较稳健

原文部分转自:
1、https://blog.csdn.net/u010412858/article/details/80785429
2、https://blog.csdn.net/weixin_41838371/article/details/90638834