模型融合(集成)

模型融合(集成)

参考博客:Kaggle Ensembling Guide (https_mlwave.com)

模型集成是融合多个训练好的模型,基于某种方式实现测试数据的多模型融合,这样来使最终的结果能够“取长补短”,融合各个模型的学习能力,提高最终模型的泛化能力。模型集成方法主要应用在几个模型差异性较大,相关性较小上。

常用的model ensemble方法有:投票(voting), 平均(averaging), 堆叠(Stacking),非交叉堆叠(Blending),其中投票法和平均法是通过对结果进行整合,stacking和blending是对模型进行融合。

目录

1.投票法

当三个模型相关性比较大时,如下:

model1:1111111100 = 80% 准确率

model2:1111111100 = 80% 准确率

model3:1011111100 = 70% 准确率

第一列111,投票为1;第二列110,投屏为1;第三列111投票为1;…

最终三个模型融合投票后到:1111111100=80%,最终的准去率还是80%,并没有提升。

当三个模型相关性小时,如下:

model1:1111111100 = 80% 准确率

model2:0111011101 = 70% 准确率

model3:1000101111 = 60% 准确率

第一列101,投票为1;第二列110,投屏为1;第三列110,投票为1;…

最终三个模型融合投票后到:1111111101=90%,准确率得到提升。

投票法在大预测时比较有意义,比如多分类任务。

2.加权表决融合

多数表决的融合方式默认了所有模型的重要度是一样的,但通常情况下我们会更重视表现较好的模型而需要赋予更大的权值。在加权表决的情况下,表现较差的模型只能通过与其他模型获得一样的结果来增强自己的说服力。

ModelPublic Accuracy Score
GradientBoostingMachine0.65057
RandomForest Gini0.75107
RandomForest Entropy0.75222
ExtraTrees Entropy0.75524
ExtraTrees Gini (Best)0.75571
Voting Ensemble (Democracy)0.75337
Voting Ensemble (3*Best vs. Rest)0.75667

可以看到加权表决融合比平均表决融合准确率有提升。

3.对结果取平均

但如果对结果取平均,可以在一定程度上减轻过拟合现象。可以算作减轻过拟合的一种方法。

在这里插入图片描述

用随机权重初始化5个感知器,并通过平均值组合它们的预测,所得到的结果也有所提升。

ModelPublic AUC Score
Perceptron0.95288
Random Perceptron0.95092
Random Perceptron0.95128
Random Perceptron0.95118
Random Perceptron0.95072
Bagged Perceptrons0.95427

4.等级平均

当平均多个不同模型的输出时,可能会出现一些问题。并不是所有的预测都是经过完美校准的:当预测低概率或高概率时,它们可能会过度自信或信心不足。或者预测在一定范围内杂乱无章。

可能会出现以下情况:将以下四个模型融合,结果进行平均,对准确率不会有任何提升。

Id  Prediction
1     0.57
2     0.04
3     0.96
4     0.99

所以采用一种等级平均方法:即将预测转化为等级,然后对等级进行平均。

Id, Rank,  Prediction
1,   1,    0.35000056
2,   0,    0.35000002
3,   2,    0.35000098
4,   3,    0.35000111

归一化等级

Id, Prediction
1,   0.33
2,   0.0
3,   0.66
4,   1.0

使用了多个Vowpal Wabbit模型和一个 GLMNet模型进行融合,对比平均和等级平均两种方法。

ModelPublicPrivate
Vowpal Wabbit A0.607640.59962
Vowpal Wabbit B0.607370.59957
Vowpal Wabbit C0.607570.59954
GLMNet0.604330.59665
Average Bag0.607950.60031
Rank average Bag0.610270.60187

5.Stacking

stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再训练,从而得到完整的stacking模型。

简单来说:数据集有Train和Test,模型对一层有5个基模型,第二层自己去构造(通常为线性模型LR)。

1.将Train划分5个小train,分别为train1,train2,train3,train4,train5。

将5个train进行组合有:

(1)训练集:train2,train3,train4,train5。预测集:train1

(2)训练集:train1,train3,train4,train5。预测集:train2

(3)训练集:train1,train2,train4,train5。预测集:train3

(4)训练集:train1,train2,train3,train5。预测集:train4

(5)训练集:train1,train2,train3,train4。预测集:train5

2.将(1),(2),(3),(4),(5)分别去训练、预测基模型1,得到5个预测结果,将这5个结果称作:元特征集1

将(1),(2),(3),(4),(5)分别去训练、预测基模型2,得到5个预测结果,将这5个结果称作:元特征集2

将(1),(2),(3),(4),(5)分别去训练、预测基模型3,得到5个预测结果,将这5个结果称作:元特征集3

将(1),(2),(3),(4),(5)分别去训练、预测基模型4,得到5个预测结果,将这5个结果称作:元特征集4

将(1),(2),(3),(4),(5)分别去训练、预测基模型5,得到5个预测结果,将这5个结果称作:元特征集5

3.将5个元特征集进行拼接得到完整的元特征集,将完整元特征集作为第二层模型的训练集。

4.对于Test,在每次基模型训练好时预测,再将预测值做均值处理,得到新Test,作为第二层的Test。

更通俗的解释

1.首先将所有数据集生成测试集和训练集(假如训练集为10000,测试集为2500行),那么上层会进行5折交叉检验,使用训练集中的8000条作为喂养集,剩余2000行作为验证集。

2.每次验证相当于使用了8000条数据训练出一个模型,使用模型对验证集进行验证得到2000条数据,并对测试集进行预测,得到2500条数据,这样经过5次交叉检验,可以得到5×2000条验证集的结果(相当于每条数据的预测结果),5×2500条测试集的预测结果。

3.接下来会将验证集的52000条预测结果拼接成10000行长的矩阵,标记为A1,而对于52500行的测试集的预测结果进行加权平均,得到一个2500一列的矩阵,标记为B1。

4.上面得到一个基模型在数据集上的预测结果A1、B1,这样当我们对3个基模型进行集成的话,相于得到了A1、A2、A3、B1、B2、B3六个矩阵。

5.之后我们会将A1、A2、A3并列在一起成10000行3列的矩阵作为training data,B1、B2、B3合并在一起成2500行3列的矩阵作为testing data,让下层学习器基于这样的数据进行再训练。

6.再训练是基于每个基础模型的预测结果作为特征(三个特征),次学习器会学习训练如果往这样的基学习的预测结果上赋予权重w,来使得最后的预测最为准确。

需要注意的是,在生成第二层特征的时候,各个基模型要采用 相同的K-fold,这样得到的元特征的每一折(对应于之前的K折划分)都将不会泄露进该折数据的目标值信息 ,从而尽可能的降低过拟合的风险。

6.Blending

Blending与Stacking大致相同,只是Blending的主要区别在于训练集不是通过K-Fold的CV策略来获得预测值从而生成第二阶段模型的特征,而是建立一个Holdout集,例如10%的训练数据,第二阶段的stacker模型就基于第一阶段模型对这10%训练数据的预测值进行拟合。说白了,Blending用90%的数据做基学习器的训练,而10%留出集用作训练元学习器,这样基学习器和元学习是用不同数据集来训练的,把Stacking流程中的K-Fold CV 改成 HoldOut CV。


相比于Stacking,Blending能有效防止信息泄露,但也正因为如此,元学习器只用了较小部分的数据集进行训练,且容易对留出集过拟合。如果数据量有限,个人更偏好于Stacking

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ee-redbull

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值