《机器学习》小白Python学习笔记(十二) ————第八章 集成学习
集成学习(ensemble learning)是通过构建并结合多个学习器来完成学习任务。其思路是通过合并多个模型来提升机器学习性能,这种方法相较于单个模型通常能获得更好的效果。一般的说,根据目的和功能分类,集成学习有三种:
- bagging 通常用于减小方差
- boosting 通常用于减小偏差
- stacking 通常用于提升预测结果
根据模型组成结构分类有两种:
- 并行集成方法,并行地构建基础模型,生成若干个基础模型后,将它们一起进行学习,产生预测结果;
- 串行集成方法,串行地构建基础模型,生成一个基础模型后,先进行学习,给错分类的样本一个更大的权重,再生成下一个基础模型,依此类推;
根据基础模型的类型可以分类为:
- 同质集成,即通过一个基础的学习算法来生成同一种基础学习器;
- 异质集成,即通过不同类型的基础学习器进行集成;
Bagging
同一个学习算法在来自同一分布的多个不同的训练数据集上训练得到的模型偏差可能较大,即模型的方差(variance)较大,为了解决这个问题,可以综合多个模型的输出结果,对于回归问题可以取平均值,对于分类问题可以采取多数投票的方法。这就是Bagging的核心思想。
可以这样理解,我们知道下面这个函数当
a
=
x
‾
a=\overline x
a=x时,有最小值,此时函数即为该随机变量的方差,bagging就是可以这样来减小模型的方差。
∑
i
=
1
N
(
x
i
−
a
)
2
\sum _{i=1}^{N}(x_i-a)^2
i=1∑N(xi−a)2
Bagging(Bootstrap Aggregation)是常用的统计学习方法,其综合的基本学习器可以是各种弱学习器。
Bootstrap Sample
要想综合N个弱分类器(决策树)的结果,我们需要采样N个训练数据集,在实际应用中获取N个训练数据集往往不现实,BootStrap 采样提供了一种有效的解决方法,这是一种有放回的随机采样。
采用这样的方式解决了获取N个服从同一分布的原始数据集不现实的问题,而且在可接受程度上,可以认为Bootstrap 采样方式不影响到模型的准确性(以方差来衡量),即可以等价于使用N个不同的原始数据集。
Bagging算法就是将训练数据集进行N次Bootstrap采样得到N个训练数据子集,对每个子集使用相同的算法分别建立决策树,最终的分类(或回归)结果是N个决策树的结果的多数投票(或平均)。
Boosting
Boosting指的是通过算法集合将弱学习器转换为强学习器。boosting的主要原则是训练一系列的弱学习器,所谓弱学习器是指仅比随机猜测好一点点的模型,例如较小的决策树,训练的方式是利用加权的数据。在训练的早期对于错分数据给予较大的权重。
对于训练好的弱分类器,如果是分类任务按照权重进行投票,而对于回归任务进行加权,然后再进行预测。boosting和bagging的区别在于是对加权后的数据利用弱分类器依次进行训练。
boosting是一族可将弱学习器提升为强学习器的算法,这族算法的工作机制类似:
先从初始训练集训练出一个基学习器;
再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注;
基于调整后的样本分布来训练下一个基学习器;
重复进行上述步骤,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。
下面描述的算法是最常用的一种boosting算法,叫做AdaBoost,表示自适应boosting。
AdaBoost算法每一轮都要判断当前基学习器是否满足条件,一旦条件不满足,则当前学习器被抛弃,且学习过程停止。
AdaBoost算法中的个体学习器存在着强依赖关系,应用的是串行生成的序列化方法。每一个基生成器的目标,都是为了最小化损失函数。所以,可以说AdaBoost算法注重减小偏差。
Stacking
stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为特征加入训练集进行再训练,从而得到完整的stacking模型。