集成学习(五)Stacking

1. 导言

Stacking集成算法可以理解为一个两层的集成,第一层含有多个基础分类器,把预测的结果(元特征)提供给第二层,而第二层的分类器通常是逻辑回归,他把一层分类器的结果当作特征拟合输出预测结果。Blending是简化版的Stacking。

2. Blending集成学习算法

  • (1)将数据划分为训练集和测试集(test_set),其中训练集需要再次划分为训练集(train_set)和验证集(val_set);
  • (2)创建第一层的多个模型,这些模型可以使同质的也可以是异质的
  • (3)使用train_set训练步骤2中的多个模型,然后用训练好的模型预测val_set和test_set得到val_predict, test_predict1;
  • (4)创建第二层的模型,使用val_predict作为训练集训练第二层的模型
  • (5) 使用第二层训练好的模型对第二层测试集test_predict1进行预测,该结果为整个测试集的结果。


    image.png

Blending缺点:只使用了一部分数据集作为留出集进行验证,也就是只能用上数据中的一部分。

3. Stacking集成学习算法

前文提到,Blending在集成的过程中只会用到验证集的数据,对数据实际上是一个很大的浪费。在Blending中,我们产生验证集的方式是使用分割的方式,产生一组训练集和一组验证集,那么可以用交叉验证的方式来处理吗?


image.png
  • 首先将所有数据集生成测试集和训练集(假如训练集为10000行,测试集为2500行),那么上层会进行5折交叉校验,使用训练集中的8000条作为训练集,剩余2000行作为验证集(橙色)。
  • 每次验证相当于使用了蓝色的8000条数据训练出一个模型,使用模型对验证集进行验证得到2000条数据,并对测试集进行预测,得到2500条数据,这样经过5次交叉检验,可以得到中间的橙色的52000条验证集的结果(相当于每条数据的预测结果),52500条测试集的预测结果。
  • 接下来会将验证集的52000条预测结果拼成10000行长的矩阵,标记为,而对于52500行的测试集的预测结果进行加权平均,得到一个2500一列的矩阵,标记为
  • 上面得到一个基模型在数据集上的预测结果,这样当我们对3个基模型进行集成的话,相当于得到了、、、、、六个矩阵
  • 之后我们将、、并列在一起成10000行3列的矩阵作为training data,、、、合并在一起成2500行3列的矩阵作为testing data,让下层学习器基于这样的数据进行再训练。
  • 再训练是基于每个基础模型的预测结果作为特征(三个特征),次学习器会学习训练如果往这样的及学习的预测结果上赋予权重,来使得最后的预测最为准确
    image.png

4. Blending与Stacking的对比

Blending的优点:

  1. 比stacking简单(因为不用进行k次的交叉验证来获得stacker feature)
  2. 避开了一个信息泄露的问题:generalizrs和stacker使用了不一样的数据集
  3. 在团队建模过程中,不需要给队友分享自己的随机种子
    缺点在于:
  4. 使用了很少的数据(是划分hold-out作为测试集,并非cv)
  5. blender可能会过拟合(其实大概率是第一点导致的)
    3.stacking使用多次的cv会比较稳健。
    refer

图解Blending&Stacking_学如不及,犹恐失之-CSDN博客_blending
模型融合之stacking&blending - 知乎 (zhihu.com)
Stacking方法详解 - Christina_笔记 - 博客园 (cnblogs.com)

你可能感兴趣的:(集成学习(五)Stacking)