模型融合作为kaggle等比赛的提分方法,你不知道可就落伍了,对于网上的大部分讲解个人看法是把一个简单的问题说的复杂了,反而不好理解,所以本文将通过简短的几句话讲述一下Stacking原理,文章最后附上kaggle对Stacking的一个案例,这样你就会完全掌握了,好的,下面开始
Staching原理
这里假设你的训练集有10000条,测试集有2500条,并且基学习器有10个(这个是你自己设定的),5折交叉验证,每一折8000训练集,2000验证集
基学习器1
第一折:基学习器1对8000训练集进行训练模型,对2000验证集进行验证,得到2000行1列的结果a1;对2500测试集进行训练得到2500行1列的结果b1.
第二折:基学习器1对8000训练集进行训练模型,对2000验证集进行验证,得到2000行1列的结果a2;对2500测试集进行训练得到2500行1列的结果b2…
第三折:基学习器1对8000训练集进行训练模型,对2000验证集进行验证,得到2000行1列的结果a3;对2500测试集进行训练得到2500行1列的结果b3…
第四折:基学习器1对8000训练集进行训练模型,对2000验证集进行验证,得到2000行1列的结果a4;对2500测试集进行训练得到2500行1列的结果b4.
第五折:基学习器1对8000训练集进行训练模型,对2000验证集进行验证,得到2000行1列的结果a5;对2500测试集进行训练得到2500行1列的结果b5.
注意:每一折的训练集和验证集都发生了变化,所以最后得到的a1,…,a5是不相同的。
下面是关键
对5折后的验证集结果a1,…,a5按列拼接,得到10000行1列的结果 ,这里记为A1;对5个测试集结果求均值得到2500行1列的结果B1
以上是一个基分类器的结果,假如有十个基分类器,最后的验证集的结果就是A1,A2,A3,…,A10,测试集结果就是B1,B2,B3,…,B10。
画重点:
由上面得到的结果得到新的训练集,新的测试集,如下表所示
A1 | A2 | … | A10 | y |
---|---|---|---|---|
… | … | … | … | … |
A1,A2,A3,…,A10为新的数据集的特征(10000x10的数据),标签y还是原数据的标签,
测试集变为
B1 | B2 | … | B10 | y |
---|---|---|---|---|
… | … | … | … | ? |
当然这里的y是你接下来要预测的
好了,以上就是两层的Stacking融合模型,当然你也可以继续构造层数,原理一毛一样,但Stacking融合模型有时候会过拟合,你在构造的时候需要添加正则化向防止过拟合。
介绍完毕,看了这篇文章相信你已经了解了Stacking是个什么鬼了,附上kaggle案例介绍,传送门,结合着案例就会更好的理解了,欢迎大家留言。