机器学习--集成学习(ensemble learning)原理及常见问题总结

机器学习–集成学习(ensemble learning)原理详解

     在机器学习的有监督学习算法中,集成学习作为其中一员广泛应用于各个行业、领域。那么,什么是集成学习呢?首先假设我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。那么就要考虑到集成学习了。集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型,集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。

官方一点的讲:集成学习(Ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)、基于委员会的学习等。 -----Zhou老师西瓜书
下面主要从以下五部分来分析集成学习的原理

1、个体与集成

集成学习的一般结构为:先产生一组“个体学习器”,再用某种策略将它们结合起来。集成中只包含同种类型的个体学习器,称为同质,当中的个体学习器亦称为“基学习器”,相应的算法称为“基学习算法”。集成中包含不同类型的个体学习器,称为“异质”,当中的个体学习器称为“组建学习器”。
机器学习--集成学习(ensemble learning)原理及常见问题总结_第1张图片
集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。
在一般的经验中,如果把坏好坏不等的东西掺到一起,那么通常结果会是比最坏的要好一些,比最好的要坏一些。通常要获得好的集成,个体学习器应“好而不同”,即个体学习器要有一定的“准确性”,即学习器不能太坏,并且要有“多样性”,即学习器间具有差异。
机器学习--集成学习(ensemble learning)原理及常见问题总结_第2张图片 集成个体应“好而不同”(其中hi表示第i个分类器)
根据个体学习器的生成方式,目前的集成学习方法大致可以分为两类:
个体学习器间存在强依赖关系、必须串行生成的序列化方法,代表为Boosting;
个体学习器间不存在强依赖关系、可同时生成的并行化方法,代表为Bagging和随机森林(Random Forest)。

2、Boosting

Boosting是一簇可将弱学习器提升为强学习器的算法。其工作机制为:先从初始训练集训练出一个基学习器,再根据基学习器的表现对样本分布进行调整,使得先前的基学习器做错的训练样本在后续收到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到实现指定的值T,或整个集成结果达到退出条件,然后将这些学习器进行加权结合。
Boosting族算法最著名的代表是AdaBoosting。
Adaboost 算法采用调整样本权重的方式来对样本分布进行调整,即提高前一轮个体学习器错误分类的样本的权重,而降低那些正确分类的样本的权重,这样就能使得错误分类的样本可以受到更多的关注,从而在下一轮中可以正确分类,使得分类问题被一系列的弱分类器“分而治之”。对于组合方式,AdaBoost采用加权多数表决的方法,具体地,加大分类误差率小的若分类器的权值,减小分类误差率大的若分类器的权值,从而调整他们在表决中的作用。

AdaBoosting算法有多种推导方式,比较容易理解的是基于“加性模型”(additive model),即基学习器的线性组合。
在这里插入图片描述
来最小化指数损失函数(exponential loss function)
在这里插入图片描述
若H(x)能令指数损失函数最小化,则考虑上式对H(x)求偏导
在这里插入图片描述
令上式为零,即可解得:
在这里插入图片描述
因此,有
机器学习--集成学习(ensemble learning)原理及常见问题总结_第3张图片
这意味着sign(H(x))达到了贝叶斯最优错误率。也就是说,若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务原本0/1损失函数的一致的替代损失函数。由于这个替代函数有更好的数学性质,一次我们可以用它替代0/1损失函数作为优化目标。
下面叙述AdaBoosting算法。假设给定一个二分类的训练数据集
机器学习--集成学习(ensemble learning)原理及常见问题总结_第4张图片
机器学习--集成学习(ensemble learning)原理及常见问题总结_第5张图片
机器学习--集成学习(ensemble learning)原理及常见问题总结_第6张图片
机器学习--集成学习(ensemble learning)原理及常见问题总结_第7张图片
机器学习--集成学习(ensemble learning)原理及常见问题总结_第8张图片

3、Bagging与随机森林

Bagging与Boosting的串行训练方式不同,Bagging方法在训练过程中,个基分类器之间无强依赖,可以进行并行训练。
bagging 基于自助采样法(bootstrap sampling),也叫有放回重采样法.即给定包含m个样本的数据集,先随机从样本中取出一个样本放入采样集中,再把该样本返回初始数据集,使得下次采样时该样本仍可以被选中,这样,经过m次随机采样操作,就可以得到包含m个样本的采样集,初始数据集中有的样本多次出现,有的则未出现,其中,初始训练集中约有63.2%的样本出现在采样集中。
照上面的方式进行T次操作,采样出T个含有m个训练集的采样集,然后基于每个采样集训练出T个基学习器,再将这些基学习器进行结合,即可得到集成学习器。在对输出进行预测时,Bagging通常对分类进行简单投票法,对回归使用简单平均法。若出现形同,则任选其一。
Bagging的优点:

1、训练一个 Bagging集成与直接使用基分类器算法训练一个学习器的复杂度同阶,说明Bagging是一个高效的集成学习算法。
2、与标准的AdaBoost算法只适用于二分类问题不同,Bagging能不经过修改用于多分类、回归等任务。
3、由于每个基学习器只使用63.2%的数据,所以剩下36.8%的数据可以用来做验证集来对泛化性能进行“包外估计”。

从偏差-方差的角度来说,boosting主要关注减小偏差,而Bagging主要关注降低方差,也就说明boosting在弱学习器上表现更好,而降低方差可以减小过拟合的风险,所以Bagging通常在强分类和复杂模型上表现得很好。举个例子:bagging在不减枝决策树、神经网络等易受样本扰动的学习器上效果更为明显。
随机森林是bagging的扩展体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体地,传统决策树在选择划分属性时是在当前结点的属性集合(假定有d个属性)中选择一个最优属性,而在RF上,对基决策树的每个结点,先从该结点的属性集中随机选择其中的k个属性组成属性集,然后从该属性集中选择最优的划分属性。

4、结合策略

集成算法就是训练一堆基学习器,然后通过某种策略把各个基学习器的结果进行合成,从而得到集成学习器的结果。下面我们就来认识一下常用的结合策略:
4.1平均法
机器学习--集成学习(ensemble learning)原理及常见问题总结_第9张图片
4.2加权平均法
机器学习--集成学习(ensemble learning)原理及常见问题总结_第10张图片
4.3投票法
机器学习--集成学习(ensemble learning)原理及常见问题总结_第11张图片
即预测为得票最多的标记,若同时有多个标记获最高票,则从中随机选取一个。
加权投票法
机器学习--集成学习(ensemble learning)原理及常见问题总结_第12张图片
学习法
当数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来结合。其中典型代表为Stacking,在 stacking中我们把个体学习器称为初级学习器,用于结合的学习器称为次学习器或者元学习器。
Stacking本身就是一种出名的集成学习方法,且有不少集成学习方法可以认为是其变体或者特例,stacking也可以认是一种结合策略,此处同周志华的西瓜书一样,把其看成一种结合策略。
stacking的主要思想为:先从初始数据集训练出初级学习器,然后“生成”一个新的数据集用于训练次级学习器。生成的该新数据中,初级学习器的输出被当做样例输入特征,而初始样本的标记仍被当做样例标记。也就是说,假设初级学习器有M个,那么对于一个原始数据集中的样本(x; y),通过这M个初级学习器有M个输出{h1(x),h2(x),…,hM(x)},把{h1(x),h2(x),…,hM(x); y}作为新数据的一个样本,所以一个初级学习器的输出作为新数据集中对应样本的一个特征,而其标记为原始数据中该样本的标记。算法描述如下图(图来自周志华《机器学习》),假定初级学习器使用不同的算法,如LR、RF、SVM、GBDT等。
由于平均和投票可能学习误差较大,于是就有了学习法这种方法,对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。

以上就是集成学习原理的一个总结

集成学习常见的问题

1、集成学习一般分为哪三个步骤?

(1)找到误差互相独立的基分类器
(2)训练基分类器
(3)合并基分类器的结果
合并基分类器的方法有voting和stacking两种。前者是用投票的方式,将获得最多选票的结果作为最终的结果。后者用串行的方式,把前一个基分类器的结果输出到下一个分类器,将所有基分类器的输出结果相加作为最终的输出。以Adaboosting为例,其基分类器的训练和合并的基本步骤如下:
(1)确定基分类器
(2)训练基分类器
(3)合并基分类器

2、常用的基分类器是什么?

最常用的基分类器是决策树,主要有以下3个方面的原因。
(1)决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重。
(2)决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。
(3)数据样本的扰动对于决策树的影响较大,因此不同字样本集合生成的决策树基分类器随机性较大这样的“不稳定学习器”更适合作为基分类器。此外,在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性,很好地引入了随机性。
除了决策树外神经网络模型也适合作为基分类器,主要是由于神经网络模型也比较“不稳定”,而且还可以通过调整神经元数量、连接方式、网络层数、初始权值等方式引入随机性。

3、可否将随机森林中的基分类器,由决策树替代为线性分类器或K-近邻?解释为什么?

随机森林属于Bagging类的集成学习。Bagging的主要好处是集成后的分类器的方差,比基分类器的方差小。Bagging所采用的基分类器,最好是本身对样本分布较为敏感的(即所谓的不稳定的分类器),这样Bagging才能有用武之地。线性分类器或者K-近邻都是较为稳定的分类器本身方差就不大,所以以他们为基分类器使用Bagging并不能在原有基分类器的基础上获得更好的表现,甚至可能因为Bagging的采用,而导致他们在训练中更难收敛,从而增加了集成分类器的偏差。

你可能感兴趣的:(机器学习,python)