模型融合是kaggle等比赛中常用的利器,通常可以在各种机器学习任务中提高结果。 fkdds,综合考虑不同于模型融合的模型情况,将这些结果进行融合。 模型融合主要通过从提交结果文件的融合、堆叠和混合几个部分来实现。
从提交结果文件中融合
最简单方便的方法是从竞赛提交结果文件中融合。 这是因为不需要重新训练模型,只要给出不同模型的测试结果,采取某些措施得出最终结果就可以了。
多数表决融合
首先,我要证明为什么是模型融合能提高准确率和对低相关的结果进行融合可以获得更好结果。
用概率的例子说明。 假设当前有10个记录,则各记录正确分类的概率为70%,或者某个模型将这10个记录分类后能够得到70%的精度。 当前,在拟合三个相当模型并采用多数表决的情况下,对于各记录,判断三个模型均正确的概率为0.7*0.7*0.7~=0.34,判断两个模型正确的概率为0.7 * 0.7 *
周志华教授在着作《机器学习》中表示,结果差异越大,最终模型融合的结果也越好。 用同样简单的例子来证明吧。 继上面的故事之后,现在的三个模型预测的结果是
模型1:111111100=80 %的精度
模型2:111111100=80 %的精度
模型3:101111100=70 %的精度
如果以多数表决组合这三个模型结果,则最终结果为1111111100=80%,该结果与第一个、第二个模型一致。 也就是说,这种模型融合是最终结果0.78
现在,我们来看看三个模型的结果
模型1:111111100=80 %的精度
模型2:011101101=70 %的精度
模型3:1000101111=60 %的精度
显然这三个模型之间的差异更大,而且表面上性能比上述三个模型差,但它们融合的结果是: 1111111101=没有任何的提升!
90% 准确率
多数表决的融合方式隐含地意识到所有模型的重要程度相同,但通常我们需要重视表现出更好的模型,赋予更大的权重。 在加权投票的情况下,表现不好的模型只能通过得到与其他模型相同的结果来增强自己的说服力。
加权表决融合
平均结果在许多机器学习问题和不同的评价标准下取得了良好的结果。
取平均的做法常常可以减少过拟合现象。 在机器学习的应用中,过拟合现象很普遍。 最根本的问题是,没有足够的训练数据量来支撑复杂的模型,模型会学习数据集上的噪声。 这样产生的问题是模型难以泛化。 这是因为模型被单方面“考虑”得太多了。
然而,平均结果可以在一定程度上减轻过拟合现象。 如图所示,单个模型通过拟合生成绿色决策边界,但实际上黑色决策边界具有更高的泛化能力,因此效果更好。 通过拟合多个模型并对模型的结果进行平均,对这些噪声点的考虑由于结果的平均而减少,决策边界也逐渐接近黑线。
请记住,机器学习的目的不是让模型记住训练数据,而是更好地传播未知数据。
对结果取平均
StackingBlending
Stacking
使用2-fold stacking作为示例。
1 .将培训数据分为a和b两部分
2 .使用第一阶段模型在a训练,然后对b生成预测值
3 .用同样的模型在b训练,生成a的预测值
4 .随后,使用整个训练集来拟合该模型,以产生测试集的预测值
5 .按照步骤(2)训练第二阶段模型
堆叠的型号为Stacking的基本思想是用一些基分类器进行分类,然后使用令一个分类器对结果进行整合。
(更新@ 2019.5.29 :删除说明图。 因为图中的文字表现错误)
第二阶段模型是以第一阶段模型的预测值会作为特征
Blending与Stacking几乎相同,只是Blending,例如10%的训练数据,第二阶段的stacker模型根据第一阶段模型拟合该10%的训练数据的预测值简言之,就是将堆叠过程的K-Fold CV更改为HoldOut CV。
Blending的优点包括:
比堆叠更简单(用于在不进行k次交叉验证的情况下获得堆叠功能)
避免了通用和堆栈使用不同数据集的信息泄露问题
3 .在团队建模过程中,不需要和队友共享自己的随机种子
缺点如下
1 .使用了较少的数据(第二阶段的blender只使用trainingset的10%的量) ) ) ) ) ) ) ) )。
2.blender可能会进行拟合(实际上很可能是因为第一点)
3.stacking多次使用CV会很稳定
至于实践结果,stacking和blending的效果大致相同,所以并不是说使用哪种方法都可以,而是取决于个人的兴趣爱好。