模型融合有许多方法,简单的有平均融合,加权融合,投票融合等方法;较为复杂的就是Blending和Stacking了。后面两种模型融合方法理解起来比较困难,本文才有图解方式让读者可以更好的理解这两种融合方法。为了方便起见,本文只介绍基础的二层融合。由于网上很多的代码使用的是较早的sklearn的版本,其中的StratifiedKFold 使用方法有所改变,因此本文在sklearn 0.20上重新实现了这两种方法。
1. Blending1.1 Blending 流程Blending相较于Stacking来说要简单一些,其流程大致分为以下几步:
将数据划分为训练集和测试集,其中训练集需要再次划分为训练集和验证集;
创建第一层的多个模型,这些模型可以使同质的也可以是异质的;
使用train_set训练步骤2中的多个模型,然后用训练好的模型预测val_set和test_set得到val_predict, test_predict1;
创建第二层的模型,使用val_predict作为训练集训练第二层的模型;
使用第二层训练好的模型对第二层测试集test_predict1进行预测,该结果为整个测试集的结果
1.2 Blending 图解Blending代码实现
2. Stacking2.1 Stacking 流程Stacking流程比较复杂因为涉及到交叉验证的过程,其流程与Blending类似,具体如下:
将数据划分为训练集和测试集,对训练集进行划分为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简单
2.避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集
3.在团队建模过程中,不需要给队友分享自己的随机种子
而缺点在于:
1.使用了很少的数据
2.blender可能会过拟合
3.stacking使用多次的CV会比较稳健