图解Blending&Stacking

原文:http://www.pianshen.com/article/307957549/

图解Blending&Stacking

目录

1. Blending

1.1 Blending 流程

1.2 Blending 图解

2. Stacking

2.1 Stacking 流程

2.2 Stacking 图解

3. Blending与Stacking对比

 

模型融合有许多方法,简单的有平均融合,加权融合,投票融合等方法;较为复杂的就是Blending和Stacking了。后面两种模型融合方法理解起来比较困难,本文才有图解方式让读者可以更好的理解这两种融合方法。为了方便起见,本文只介绍基础的二层融合。由于网上很多的代码使用的是较早的sklearn的版本,其中的StratifiedKFold 使用方法有所改变,因此本文在sklearn 0.20上重新实现了这两种方法。

1. Blending

1.1 Blending 流程

Blending相较于Stacking来说要简单一些,其流程大致分为以下几步:

  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进行预测,该结果为整个测试集的结果

1.2 Blending 图解

Blending代码实现

2. Stacking

2.1 Stacking 流程

Stacking流程比较复杂因为涉及到交叉验证的过程,其流程与Blending类似,具体如下:

  1. 将数据划分为训练集和测试集(test_set),对训练集进行划分为K个大小相似的集合,取其中一份作为验证集val_set,其余的为训练集train_set;
  2. 创建第一层的多个模型,这些模型可以使同质的也可以是异质的;
  3. 对于每一个模型来说,train_set和val_set是不一样的,如2.2图所示;然后利用各自的train_set训练各自的模型,训练好的模型对各自的val_set和test_set进行预测,得到val_predict和test_predict;
  4. 创建第二层的模型,将每个模型对应的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会比较稳健

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值