stacking 图解Blendingamp;Stacking

编辑:
发布时间: 2020-12-24 02:04:35
分享:

模型融合有许多方法,简单的有平均融合,加权融合,投票融合等方法;较为复杂的就是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会比较稳健

相关阅读
热门精选
孩子 皮肤