集成学习详解

╄→гoц情女王★ 提交于 2020-03-12 11:56:14

摘要:本文主要目的是梳理集成学习的知识体系

 

一、什么是集成学习?

面对一个机器学习问题,我们一般有两种方案:

1)训练不同的模型,选取一个效果最好的模型作为解决方案,进行重点调参优化

2)训练多个模型,可能每一个模型并不是最优的,但是综合考虑所有模型的输出结果,就会得到较好的最终结果

方案2便是集成学习

如果训练的多个模型是同一类型的模型(同为决策树或者神经网络等),则称该集成为“同质”的,所用算法称为“基学习算法”,每一个模型叫做“基学习器”

如果训练的多个模型非同一类型,则称该集成为“异质”的,此时不存在“基学习算法”的概念,每一个模型叫做“组件学习器”或“个体学习器”。

 

 

二、集成学习的分类

集成学习主要分为两大类,一类是bagging,另一类是boosting,他们分别对应着不同的训练和预测过程

首先我们要明确的是,不同基学习器的训练肯定对应着不同的样本分布或者不同的模型参数,如果使用同一个训练集的相同样本分布且模型参数相同(所选择模型),则集成学习没有意义。

1)在训练方面,bagging是通过对训练集的不同采样+基分类器选择不同超参数的方式进行训练,基分类器之间无强依赖,所以可以并行独自训练;boosting则是按照顺序,首先赋予样本相同的权重去训练第一个基分类器,然后根据该分类器在决策上的表现,提高该分类器分错的样本对应的权重,训练下一个基分类器,所以boosting的训练过程是串行的

2)在预测方面,bagging采用vote(投票)的方式,采用得票数最多的决策作为决策结果;boosting采用stack(堆叠)的方式,将基分类器按照训练顺序叠加输出结果,形成最终的决策。

3)在原理方面,bagging是通过不同的平等的分类器投票,有效减小了预测的方差,使预测结果更稳定,从而提高了泛化效果;boosting是通过有加权的基分类器的堆叠,每一个基分类器都会重点修正上一个基分类器的错误和不足,减少了偏差,从而提高了泛化效果

 

三、常用的基分类器

最常用也最热门的集成学习算法的基分类器为决策树,原因如下

1)决策树可以将样本的权重整合到训练过程中,从而避免使用过采样等方法来调整样本权重。具体来讲,我猜测可以在两个方面使用权重,一方面是特征选择时,计算信息增益等指标的时候加入权重,另一方面是给叶子结点打标签时进行权重衡量。

2)决策树的表达能力和泛化能力,可以通过调节树的层数等方式进行折中

3)数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大(这正是集成学习的灵魂,调整样本权重/分布使得基分类器有所区别,举个例子,当我们集思广益想一个解决方案的时候,我们更希望每个参加头脑风暴的成员都有比较大的想法差异(注意要至少保证每个人的想法比无脑瞎猜要好),如果一个人发言后,其他人都附和同意,这就相当尴尬,集成学习也没有意义),这种基分类器更加适合集成学习。

除了决策树,神经网络也适合作为基分类器,这个会在以后单独介绍,一般情况,说到“集成学习”,第一个想到的就是基于决策树的相关集成学习方法,至于基学习器是神经网络的集成学习,我们更多地把集成学习当做神经网络避免过拟合的一种方式。

 

四、Bagging介绍

首先明确,bagging的基学习器不确定,并不限定于决策树

采样方法:采用自助采样法,即在包含m个样本的数据集中,进行m次有放回的采样,形成训练集T1,此时,数据集中约有63.2%被采样,计算方式如下

 

 

;重复该过程n次,共生成n个训练集T1,T2……Tn,每个训练集可以单独并行训练一个基学习器,共生成n个基学习器。每个基分类器都可以用每个训练集中的未被采样的36.8%的样本进行验证。

最后,模型的输出结果综合n个基学习器的输出,

如果是分类任务就进行简单投票,如果是回归任务就简单地取平均值即可。

 

五、随机森林介绍

随机森林是用决策树作为基分类器的bagging方法,但是!!!重点强调,随机森林!=bagging+决策树,随机森林=bagging+(决策树+随机属性选择)

通常决策树在每个结点选择最佳分裂属性时会选择信息增益等指标最优的属性,但随机森林引入了随机属性(特征)选择,即每次选择属性时随机从属性集中生成具有k(建议取logk)个属性的子集,从子集中进行选择。

这样做的目的在于增加基学习器的多样性,bagginng只是通过改变样本的选取和分布增加多样性,而随机森林在此基础上通过随机属性选择进一步增强了基学习器的多样性,从而提高模型最终的泛化性能。同时,由于每次只考虑子集,减少了特征选择的计算开销。

 

六、Boosting介绍

boosting,顾名思义,是提升算法,可以将弱学习器提升为强学习器的一类集成算法。这类算法的机制是先初始化训练集(一般赋予相同的样本初始权重),然后训练初始的基学习器。根据基学习器的结果,提升被预测错误的样本的权重,再训练下一个基学习器,直到基学习器的数目到达预先设定的阈值T才停止,最终将T个基学习器进行加权组合,得到最终结果。

boosting的具体算法有adaboost,GBDT,xgboost等等,以为篇幅原因,将在下一篇博文中进行讲解

 

七、结合策略

1)回归任务,可以采用简单平均法和加权(权重通过学习产生)平均法

2)分类任务,可以采用绝对多数投票法(过半则胜出)和相对多数投票法(多个类别票数并列第一,则随机选取一个)和加权投票法

其中,绝对多数投票法独有“拒绝预测”的功能,没有超过半数的类别则拒绝进行预测,如果强制预测则退化为相对多数投票法。

!!重点细节:分类任务的基学习器可能输出的是硬投票(具体的分类标签)或者软投票(类别的后验概率)。如果基学习器种类相同,则可以直接对概率进行综合,一般效果会比综合分类标签要好;但当组合分类器不同,就应该都转换为分类类别进行综合。

据此可以推测,集成学习器(如随机森林)输出的概率结果应该由每个基分类器的软投票或硬投票结果计算产生,但至于具体实现,如sklearn中的RandomforestClassifier是根据哪一个进行计算的,就不得而知了。

3)另一种结合策略,就是stacking,单独训练一个学习器用于组合基学习器的输出结果。

 

八、多样性

集成学习的灵魂在于基学习器的多样性,要丰富基学习器的多样性,可以有如下思路

1)样本多样性:每次训练随机选择样本子集

2)特征多样性:每次训练随机选择特征子集

3)输出多样性:改变基学习器的输出,比如将类别转化为连续值,拆分等等

4)参数多样性:选择模型训练的不同超参数

 

另外补充,抛开深度学习不谈,在xgboost出现之前,随机森林几乎是效果是监督学习效果最好的算法,随后一系列boosting算法的出现,使得在较多情况下boosting算法优于随机森林,具体还是要看数据。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!