图解Blending&Stacking
作者:互联网
原文:http://www.pianshen.com/article/307957549/
图解Blending&Stacking
目录
模型融合有许多方法,简单的有平均融合,加权融合,投票融合等方法;较为复杂的就是Blending和Stacking了。后面两种模型融合方法理解起来比较困难,本文才有图解方式让读者可以更好的理解这两种融合方法。为了方便起见,本文只介绍基础的二层融合。由于网上很多的代码使用的是较早的sklearn的版本,其中的StratifiedKFold 使用方法有所改变,因此本文在sklearn 0.20上重新实现了这两种方法。
1. Blending
1.1 Blending 流程
Blending相较于Stacking来说要简单一些,其流程大致分为以下几步:
- 将数据划分为训练集和测试集(test_set),其中训练集需要再次划分为训练集(train_set)和验证集(val_set);
- 创建第一层的多个模型,这些模型可以使同质的也可以是异质的;
- 使用train_set训练步骤2中的多个模型,然后用训练好的模型预测val_set和test_set得到val_predict, test_predict1;
- 创建第二层的模型,使用val_predict作为训练集训练第二层的模型;
- 使用第二层训练好的模型对第二层测试集test_predict1进行预测,该结果为整个测试集的结果
1.2 Blending 图解
Blending代码实现
2. Stacking
2.1 Stacking 流程
Stacking流程比较复杂因为涉及到交叉验证的过程,其流程与Blending类似,具体如下:
- 将数据划分为训练集和测试集(test_set),对训练集进行划分为K个大小相似的集合,取其中一份作为验证集val_set,其余的为训练集train_set;
- 创建第一层的多个模型,这些模型可以使同质的也可以是异质的;
- 对于每一个模型来说,train_set和val_set是不一样的,如2.2图所示;然后利用各自的train_set训练各自的模型,训练好的模型对各自的val_set和test_set进行预测,得到val_predict和test_predict;
- 创建第二层的模型,将每个模型对应的val_predict拼接起来作为第二层的训练集,将所有模型的test_predict取平均值作为第二层的测试集;用训练好的第二层模型对第二层的测试集进行预测,得到的结果即为整个测试集的结果
2.2 Stacking 图解
Stacking代码实现
3. Blending与Stacking对比
Blending的优点在于:
1.比stacking简单(因为不用进行k次的交叉验证来获得stacker feature)
2.避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集
3.在团队建模过程中,不需要给队友分享自己的随机种子
而缺点在于:
1.使用了很少的数据(是划分hold-out作为测试集,并非cv)
2.blender可能会过拟合(其实大概率是第一点导致的)
3.stacking使用多次的CV会比较稳健
标签:set,训练,val,Stacking,模型,Blending,图解 来源: https://blog.csdn.net/sunnyxidian/article/details/89279875