模型融合
最近小编接触了集成学习,学习之后觉得大有裨益,想着也要给小伙伴们分享一下,本文章将会详细介绍集成学习中模型融合的相关知识,顾名思义,就是将不同的学习模型融合起来,进而加强模型的预测效果。而Boosting则是一种重要的模型融合方法!
集成学习
模型融合分类
在集成学习中,模型融合被大致分为三种:
① bagging (随机森林模型是基于bagging融合的代表)
② boosting (GBDT和XGboost模型是基于boosting融合的代表)
③ Stacking
基本思路
集成学习的基本思路是:在建模阶段中,我们首先要基于一组独立的训练集,分别建立与训练集相对应的一组分类或者回归预测模型。我们所建立起来的每个预测模型称之为基础学习器(Base Learner)。在预测阶段,基础学习器会分别得出其预测出来的结果。将每一项预测结果进行平均或者投票处理,确定最终的预测结果。
一方面,集成学习可以解决预测模型的高方差问题。
另一方面,集成学习可将多个弱模型联合起来使其成为一个强模型。
为什么模型融合
模型融合优点
① 模型融合可以提高模型预测的准确性,适用于大多数情况。
以“三个臭皮匠顶过一个诸葛亮”的思想,特别是多人组队学习的比赛中,将不同队友的模型进行融合,可能会收获 意想不到的效果。往往模型相差越大且模型表现都不错的前提下,模型融合后结果会有大幅提升。
② 模型融合使得模型更加稳定,具有更好的泛化性能,从而确保在大多数情况下测试用例具有良好的性能。
融合多个不同的模型结果,来获得更好的泛化性能。目前,具有多层次架构的深度学习模型,相较于只有浅层结构的模型来说,具有更好的性能表现。
③ 模型融合可以用来补获数据中的线性和简单非线性复杂关系。
我们可以通过使用两个不同的模型并且形成两个集合来完成对于复杂关系的获取。
模型融合条件
在模型融合中,每一个个体学习器多样性越大、准确性越高,则模型融合的效果就越好。(E = 均E - 均A),E代表融合后的误差加权均值,均E代表个体学习器的误差加权均值,均A代表模型的多样性,也就是各个模型之间的分歧值)
每个Base Model 之间的相关性要尽可能得小。通常来说,非基于树模型的表现不会很好,但我们还是要将它们包括在集成学习里面。是因为集成的多样性越大,最终 Model 的 Bias 就越低。
每个Base Model 之间的性能表现不能有较大的差距。这其实是一个权衡条件,在我们实际的实验中很有可能表现相近的 Model 的数量非常少而且他们彼此的相关性也比较强。但是实践告诉我们即使在这种情况下集成还是能大幅提高成绩。
如何模型融合
Voting/Averaging
简单的Voting/Averaging分别对于分类问题和回归问题。
投票(Voting),基本原理就是少数服从多数。我们通常来说分为硬投票和软投票,硬投票:不考虑最后模型结果的相对重要度,对多个模型进行直接投票,选择最终投票数最多的类为最终被预测的类。软投票:在硬投票的基础之上增加了设置权重的功能,可以为不同模型设置不同权重,进而考虑不同模型的重要度。
平均(Averaging),基本原理就是对预测结果进行平均,对于回归问题,我们通常有算术平均融合和几何平均融合。如果我们使用加权平均法,每个模型的权值可以用排序的方法确定,举个例子,比如A、B、C、D四种基本模型,将模型的效果进行排序,假设排名分别是1,2,3,4,那么给这四个模型赋予的权值分别是4/10、3/10、2/10、1/10 。
虽然说上述的这两种方法看上去十分简单,其实后面的高级算法也可以说是基于这两种方法而产生的,Bagging或者Boosting都是一种把许多弱分类器(弱模型)这样融合成强分类器(强模型)的思想。
Bagging
Bagging是一种个体学习器没有依赖的模型融合方法。
Bagging算法的思想是通过对样本采用有放回的方式进行抽样,重复多次建立子模型并进行训练,最后完成模型的融合:
随机森林模型是对Bagging算法的改进。第一个改进之处是将基本学习器限定为决策树,使得模型融合的效果会更显著,第二个改进之处是除了在Bagging的样本上加上扰动,同时在属性上也加上扰动,也就是说将随机属性选择引入了决策树学习的过程中,对于基决策树上的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从挑选除了k个属性的子集中选择一个最优属性用于划分。
Boosting
Boosting则是一种个体学习器有依赖的模型融合方法。
Bagging算法可以在模型融合中并行处理,而Boosting的思想是一种迭代的方法,每经过一次训练,都需要更加关心分类错误的样例,并不断地给这些分类错误的样例增加更大的权重,使得下一次迭代是能够更加容易辨别出上一轮分类错误的样例,不至于犯同类型的错误。最终将这些弱分类器进行加权相加,得到一个强的分类器。
Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。
AdaBoost算法:是加法模型、损失函数为指数函数、学习算法为前向分布算法时的二分类算法。AdaBoost将会在Boosting系列第二篇有详细的介绍,感兴趣的话可以持续关注哦!
提升树:以分类与回归树(CART)为基本分类器的提升方法,不同问题的提升树学习算法,其主要区别在于损失函数不同:平方损失函数常用于回归问题,用指数损失函数用于分类问题,以及绝对损失函数用于决策问题。
梯度提升树(Gbdt):梯度提升树采用向前式分步可加建模方式。一方面,采用提升法,迭代过程中模型成员将不断进入“联合委员会”。先前进入“联合委员会”的模型不受后续进入模型的影响,且每次迭代仅需估计当前模型。另一方面,选代过程中基于损失函数,采用梯度下降法,找到使损失函数下降最快的模型(基础学习器或弱模型)
Gdbt在Boosting系列第三篇有过详细的讲解,不妨关注公众号,后续学习不落下!
AdaBoost算法使用贪心技术来最小化由错误分类损失上限的凸代理函数,在每次迭代的过程中,当前模型会通过适当增加权重的预测器进行扩充。AdaBoost 学习有效的集成分类器,因为它在学习的每个阶段利用错误分类的样本。将指数损失函数最小化,而梯度提升将这个框架推广到任意差分损失函数。
Bagging与Boosting的差异
样本选择:
Bagging:样本采用有放回的方式进行抽样,并且从原始集中选出的各轮训练集相互独立。
Boosting:训练集不发生改变,变化的是训练集上不同样例的权重,权值会根据每次的分类结果进行调整。
样例权重:
Bagging:采用均匀抽样的方法,权重不发生改变。
Boosting:根据分类的错误率会不断更新权值,错误率越大所更新的权重就越大。
预测函数:
Bagging:每一个预测函数的权重都是相等的。
Boosting:每一个弱分类器都有各自对应的权重,当分类器的分类误差越小,权重会越大。
并行计算:
Bagging:是并行的过程,目的是为了降低方差,减少模型的过拟合。
Boosting:是串行的过程,目的是为了降低偏差,使得简单模型变得更强。
Stacking
Stacking的基本思想是构建多层模型,并且利用多层模型的预测结果再进行拟合预测。通常而言,我们首先从初始数据集训练出一个初级学习器,一般使用交叉验证的方式,初始训练集D 被随机划分为k 个大小相似的集合D1 , D2 , … , Dk每次用k-1个部分训练T个模型,对另外一个部分产生T个预测值作为特征,遍历每一折后,也就得到了新的特征集合,初级学习器的输出结果会被当作样例的输入特征,而初始样本的标记仍被当作样例标记。为了防止过拟合,在次级模型我们要尽量使用简单的线性模型。
以上就是关于集成学习中模型融合的讲解。希望上述的内容可以给各位观众带来一些新的收获,如果小编有说的不对的地方,也希望大家批评指正!非常感谢各位同学们看到这里,想了解更多机器学习相关知识,可以持续关注本系列哦!
-The End-
文案|肖景昌
指导老师|曹菁菁 赵强伟
排版 | 邓诗怡