机器学习:集成学习
1、个体与集成
集成学习(ensemble learning):构建并结合多个学习器来完成学习任务
集成学习可以只包含同种类型的个体学习器,如全是决策树、神经网络,称为“同质”(homogeneous);也可以包含不同类型的个体学习器,如同时包含决策树、神经网络,称为异质的(heterogeneous)
集成学习对学习器的要求:
- 个体学习器不能太坏
- 学习器间有多样性(有差异)
目前集成主要有两个方法:
- Boosting:个体学习器间有序列的生成,后学习的模型修正上一个模型的bias
- bagging/随机森林(Random forest):个体学习器间没有关系,可以同时生成
2、boosting
Boosting是一族可将弱学习器提升为强学习器的算法,这族算法的工作机制类似:
先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合.
Boosting是一种串行的工作机制,即个体学习器的训练存在依赖关系,必须一步一步序列化进行。
Boosting族算法最著名、使用最为广泛的就是数据挖掘十大算法之一的AdaBoost。
Adaboost
AdaBoost使用的是指数损失函数,因此AdaBoost的权值与样本分布的更新都是围绕着最小化指数损失函数进行的。看到这里回想一下之前的机器学习算法,不难发现机器学习的大部分带参模型只是改变了最优化目标中的损失函数:如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是log-Loss,那就是Logistic Regression了。
AdaBoost算法有多种推导方式,比较容易理解的是基于“加性模型”(additive model),即基学习器的线性组合。
具体说来,整个Adaboost 迭代算法分为3步:
- 初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。
- 训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
- 将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。
更新样本权重的方法
Boosting算法要求基学习器能对特定分布的数据进行学习,即每次都更新样本分布权重,这里书上提到了两种方法:“重赋权法”(re-weighting)和“重采样法”(re-sampling):
-
重赋权法 : 对每个样本附加一个权重,这时涉及到样本属性与标签的计算,都需要乘上一个权值。
-
重采样法 : 对于一些无法接受带权样本的基学习算法,适合用“重采样法”进行处理。方法大致过程是,根据各个样本的权重,对训练数据进行重采样,初始时样本权重一样,每个样本被采样到的概率一致,每次从N个原始的训练样本中按照权重有放回采样N个样本作为训练集,然后计算训练集错误率,然后调整权重,重复采样,集成多个基学习器。
从偏差-方差分解来看:Boosting算法主要关注于降低偏差,每轮的迭代都关注于训练过程中预测错误的样本,将弱学习提升为强学习器。从AdaBoost的算法流程来看,标准的AdaBoost只适用于二分类问题。
3、Bagging与随机森林
Bagging
Bagging是一种并行式的集成学习方法,即基学习器的训练之间没有前后顺序可以同时进行,Bagging使用“有放回”采样的方式选取训练集(Bootstrap),对于包含m个样本的训练集,进行m次有放回的随机采样操作,从而得到m个样本的采样集,这样训练集中有接近36.8%的样本没有被采到。
按照相同的方式重复进行,我们就可以采集到T个包含m个样本的数据集,从而训练出T个基学习器,最终对这T个基学习器的输出进行结合。
Bagging算法的流程:
可以看出Bagging主要通过样本的扰动来增加基学习器之间的多样性,因此Bagging的基学习器应为那些对训练集十分敏感的不稳定学习算法,例如:神经网络与决策树等。
从偏差-方差分解来看,Bagging算法主要关注于降低方差,即通过多次重复训练提高稳定性。不同于AdaBoost的是,Bagging可以十分简单地移植到多分类、回归等问题。总的说起来则是:AdaBoost关注于降低偏差,而Bagging关注于降低方差。
随机森林
在以决策树为基学习器构建Bagging集成的基础上,在决策树训练中引入了随机属性选择。
传统决策树选择当前节点属性集合中的最优属性;而随机森林先从该节点的属性集合中随机选择包含K个属性的子集,再从该子集中选择一个最优属性用于划分。
这样随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,从而进一步提升了基学习器之间的差异度。相比决策树的Bagging集成,随机森林的起始性能较差(由于属性扰动,基决策树的准确度有所下降),但随着基学习器数目的增多,随机森林往往会收敛到更低的泛化误差。同时不同于Bagging中决策树从所有属性集中选择最优划分属性,随机森林只在属性集的一个子集中选择划分属性,因此训练效率更高。
4、结合策略
结合策略指的是在训练好基学习器后,如何将这些基学习器的输出结合起来产生集成模型的最终输出。
- 学习任务的假设空间很大,如果只用单一学习器,可能因为误选导致泛化性能不佳,多个分类器结合可以减少风险
- 学习算法有可能陷入局部极小,泛化性能不好,而多次运行可能降低陷入局部极小的风险
- 若学习任务的真实假设不在当前算法考虑的假设空间中,通过学习多个学习器,可以扩大假设空间。
⭐平均法(averaging):回归问题
- 简单平均
- 加权平均
如果任务中样本不充分或存在噪声,学习的权重不靠谱;对于规模大的集成,学习的权重过多容易过拟合。
⭐投票法(voting):分类问题
- 绝对多数投票
- 相对多数投票
- 加权投票
如果基学习器的类型不同,概率值不能直接进行比较;可以将概率输出转化为类标记输出再投票
⭐学习法(stacking)
通过另一个学习器来结合。把个体学习器称为初级学习器,用于结合的学习器称为次级学习器。stacking先从初始数据集训练出初级学习器,然后把初级学习器的输出当作样例输入特征,把初始样本的标记当作样例标记,产生一个新的数据集,用于训练次级学习器。
5、多样性
在集成学习中,基学习器之间的多样性是影响集成器泛化性能的重要因素。因此增加多样性对于集成学习研究十分重要,一般的思路是在学习过程中引入随机性,常见的做法主要是对数据样本、输入属性、输出表示、算法参数进行扰动。
多样性的增强
在学习过程中引入随机性
⭐数据样本扰动
- 从给定数据集中产生不同的子集(基于采样法,例如自助采样),训练不同的个体学习器。
⭐输入属性扰动
- 从训练样本的一组属性描述中,选取不同的子属性组训练个体学习器。对包含大量冗余属性的数据,能产生多样性大的个体,还会因为属性数减少大幅节省时间开销。若数据只包含少量属性,或冗余属性很少,不宜用输入扰动法。
⭐输出表示扰动法
- 对输出表示进行操纵以增强多样性。可对训练样本的类标记稍作变动;或将分类输出转化为回归输出后构建个体学习器;或将原任务拆解为多个可同时求解的子任务。
⭐算法参数扰动
- 通过随机设置不同的参数,产生差别较大的个体学习器。
6、参考文献
《机器学习》周志华