集成学习(Ensemble Learning)入门
文章目录
- 集成学习(Ensemble Learning)入门
- 前言
- 一、绪论
-
- 1.1 基本概念
- 1.2 集成学习方法
- 1.3 多样性增强的几种方法
- 二、Boosting——经典串行集成学习方法
-
- 2.1 基本概念
- 2.2 Boosting一般过程
- 2.3 AdaBoost算法
- 2.4 GBDT梯度提升树
- 2.5 XGBoost
- 2.6 LightGBM
- 三、Bagging——经典并行集成学习方法
-
- 3.1 基本概念
- 3.2 Bagging算法
- 3.3 随机森林Random Forest
- 四
前言
文章内容部分来自于网络,如b站、CSDN等,如果侵权,请联系删除。
一、绪论
1.1 基本概念
集成学习:通过构建并结合多个学习器来完成学习任务。
如下图所示,其过程是:先产生一组“个体学习器”,再用某种策略将它们结合起来。个体学习器一般就是我们常见的机器学习算法,比如:决策树,神经网络等。
这里集成一般有两种:同质和异质。同质是指个体学习器全是同一类型,这种同质集成中的个体学习器又称“基学习器”。异质是指个体学习器包含不同类型得学习算法,比如同时包含决策树和神经网络。一般我们常用的都是同质的,即个体学习器都是同一类型的。
集成学习通过将多个基学习器结合,通常都会获得比单一学习器显著优越的泛化性能。也可能会获得相同或更差的性能。
要想获得较好的集成性能,基分类器需要满足两个基本条件:
(1)基分类器要有一定的性能,至少不差于随机猜测的性能,即基分类器准确率不低于50%。
(2)基学习器要具有多样性,即基学习器间要有差异性,不能像上图(b)中那样,三个基分类器都一样。
提升集成学习性能主要通过这一条“多样性”来做,因为第一条很容易满足。
证明:在基学习器误差相互独立的情况下,集成学习的错误率随着基分类器数目的增大呈指数下降,最终趋向于0。
相关证明
1.2 集成学习方法
集成学习方法的分类
(1)Boosting:这一类个体之间学习器之间存在强依赖关系,必须使用串行的方法去学习。
(2)Bagging:这一类方法个体学习器之间不存在强依赖关系,因此可用并行的方式去学习。
(3)Stacking:wiki中将这一类方法单独分了一类。
1.3 多样性增强的几种方法
一般的做法主要是对数据样本,输入属性,输出表示,算法参数进行扰动。
(1)数据样本扰动
这个其实主要就是采样,比如在bagging中的自助采样法,数据样本扰动对决策树,神经网络这样对数据样本变化非常敏感的学习算法非常有效,但是对支持向量机,朴素贝叶斯,k近邻这些对样本扰动不敏感的算法没用。对此类算法作为基学习器进行集成时往往需要使用输入属性扰动等机制。
(2)输入属性扰动
这个就是从样本的特征空间中产生不同的特征子集。这样训练出来的基学习器必然是不同的。在包含大量冗余属性的数据,在特征子集中训练基学习器不仅能产生多样性大的个体,还会因属性数的减少而大幅节省时间开销,同时,由于冗余属性多,减少一些冗余属性后训练出来的基学习器性能也不会差。若数据只包含少量属性,或者冗余属性少,则不适宜使用输入属性扰动法。
(3)输出表示扰动
这类做法的基本思路是对输出表示进行操纵以增强多样性。比如可对训练样本的label稍作变动,比如“翻转法”随机改变一些训练样本的标记;也可以对输出表示进行转化,如“输出调制法”将分类输出转化为回归输出后构建基学习器。这一类貌似用的不多。
(4)算法参数扰动
这个在现在深度学习比赛中很常见,主要是神经网络有很多参数可以设置,不同的参数往往可以产生差别比较大的基学习器。
二、Boosting——经典串行集成学习方法
两种模型范式
串行集成学习:利用模型相关性
如果第一个分类器分错了,第二个分类器要纠正第一个分类器的错误
并行集成学习:利用模型独立性
2.1 基本概念
Boosting由于各基学习器之间存在强依赖关系,因此只能串行处理,也就是Boosting实际上是个迭代学习的过程。
Boosting的工作机制为:先从初始训练集中训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整(比如增大被误分样本的权重,减小被正确分类样本的权重),使得先前基学习器做错的样本在后续的训练过程中受到更多关注,然后基于调整后的样本分布来训练下一个基学习器,如此重复,直到基学习器数目达到事先自定的值T,然后将这T 个基学习器进行加权结合(比如错误率小的基学习器权重大,错误率大的基学习器权重小,这样做决策时,错误率小的基本学习器影响更大)。Boosting算法的典型代表有AdaBoost和XGBoost。
从偏差-方差分解的角度看,Boosting主要关注降低偏差。
2.2 Boosting一般过程
将“弱学习算法”提升为“强学习算法”的过程,通过反复学习得到一系列的弱分类器(决策树和逻辑回归),组合这些弱分类器得到一个强分类器。
Boosting算法涉及到两个部分,加法模型和前向分步算法。
加法模型:强分类器由一系列弱分类器线性相加而成。一般组合形式如下:
F M ( x ; P ) = ∑ m = 1 n β m h ( x ; a m ) F_M(x;P)=\displaystyle\sum_{m=1}^{n} β_mh(x;a_m) FM?(x;P)=m=1∑n?βm?h(x;am?)
其中 F M ( x ; P ) F_M(x;P) FM?(x;P)是弱学习器, a m a_m am?是弱分类器学习到的最优参数, β m β_m βm?是弱学习器在强分类器中所占的比重,P是所有 a m a_m am?和 β m β_m βm?的组合。这些弱分类器线性相加组成强分类器。
前向分步算法:在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得到的。即 F m ( x ) = F m ? 1 ( x ) + β m h ( x ; a m ) F_m(x)=F_{m-1}(x)+β_mh(x;a_m) Fm?(x)=Fm?1?(x)+βm?h(x;am?)
2.3 AdaBoost算法
算法思想
? 初始化训练样本的权值分布,每个样本具有相同权重;
? 训练弱分类器,如果样本分类正确,则在构造下一个训练集中,它的权值就会被降低;反之提高。用更新过的样本集去训练下一个分类器;(指分错的样本的权重会变化)
? 将所有弱分类组合成强分类器,各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,降低分类误差率大的弱分类器的权重。
AdaBoost算法推导
分类正确–>降权处理
分类错误–>升权处理
AdaBoost(Adaptive Boosting,自适应增强),其自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
后一个模型的训练永远是在前一个模型的基础上完成!
Adaboost的思想是将关注点放在被错误分类的样本上,减小上一轮被正确分类的样本权值,提高被错误分类的样本权值。
Adaboost采用加权投票的方法,分类误差小的弱分类器的权重大,而分类误差大的弱分类器的权重小。
2.4 GBDT梯度提升树
GBDT(Gradient Boosting Decision Tree)是一种迭代的决策树算法,该算法由多棵决策树组成,GBDT 的核心在于累加所有树的结果作为最终结果,所以 GBDT 中的树都是回归树,不是分类树,它是属于 Boosting 策略。GBDT 是被公认的泛化能力较强的算法。
GBDT 由三个概念组成:Regression Decision Tree(即 DT)、Gradient Boosting(即 GB),和 Shrinkage(缩减)
2.5 XGBoost
XGBoost 是大规模并行 boosting tree 的工具,它是目前最快最好的开源 boosting tree 工具包,比常见的工具包快 10 倍以上。XGBoost 和GBDT 两者都是 boosting 方法,除了工程实现、解决问题上的一些差异外,最大的不同就是目标函数的定义。
2.6 LightGBM
LightGBM 由微软提出,主要用于解决 GDBT 在海量数据中遇到的问题,以便其可以更好更快地用于工业实践中,其相对 XGBoost 具有训练速度快、内存占用低的特点。
LightGBM与XGBoost相比,主要有以下几个优势:
1)更快的训练速度
2)更低的内存消耗
3)更好的准确率
4)分布式支持,可快速处理海量数据
三、Bagging——经典并行集成学习方法
3.1 基本概念
Bagging的主要思想如下图所示,首先从数据集中采样出T个数据集,然后基于这T个数据集,每个训练出一个基分类器,再讲这些基分类器进行组合做出预测。Bagging在做预测时,对于分类任务,使用简单的投票法。对于回归任务使用简单平均法。若分类预测时出现两个类票数一样时,则随机选择一个。
从上面的图中也能够看出,Bagging非常适合并行处理,这对于大数据量下非常有好处。关于从原始数据集里采样出m个数据集,这里要说下,我们希望能够产生m个不同的子集,因为这样训练出来的基分类器具有比较大的差异,满足开头所说的“多样性”,有助于提高集成算法最终的性能。但是呢,又不能让基分类器性能太差,比如我们采样时,采样出来的子集每个都完全不相同,这样训练出来的基分类器性能就比较差,因为每个基分类器相当于只用了一小部分数据去训练。因此,Bagging中采样自助采样法(bootstrap sampling)。
自助采样法(bootstrap sampling)
这个其实就是有放回的采样,每个采样出来的样本集都和原始数据集一样大。假如给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,然后再把该样本放回去,使得下次这个样本还有可能被选中,这样经过m次随机采样,我们得到包含m个样本的采样集,原始数据集中有的样本在采样集多次出现,有的则未出现。采样集中大约包含63.2%的原始数据,因为每个样本被抽到的概率为 1 m \frac{1}{m} m1?,则样本在m次采样中始终没被采到的概率为 ( 1 ? 1 m ) m (1-\frac{1}{m})^{m} (1?m1?)m,当m→∞时,其极限为 1 e ≈ 0.368 \frac{1}{e}\approx0.368 e1?≈0.368
从偏差-方差分解的角度看,Bagging主要关注降低方差。
3.2 Bagging算法
3.3 随机森林Random Forest
(Bagging+决策树)的升级版
在决策树中,引入了随机特诊选择
在每棵决策树选择分割点时,随机森林会先随机选择一个特征子集,然后在这个子集上进行传统的分割点选择。
用随机的方式建立一个森林。随机森林算法由很多决策树组成,每一棵决策树之间没有关联。建立完森林后,当有新样本进入时,每棵决策树都会分别进行判断,然后基于投票法给出分类结果。
优点
- 在数据集上表现良好,相对于其他算法有较大的优势
- 易于并行化,在大数据集上有很大的优势;
- 能够处理高维度数据,不用做特征选择。
- 消除了决策树容易过拟合的缺点
- 减少了预测的方差,预测值不会因为训练数据的小变化而剧烈变化
Random Forest(随机森林)是 Bagging 的扩展变体,它在以决策树为基学习器构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入了随机特征选择,因此可以概括 随机森林包括四个部分:
- 随机选择样本(放回抽样);
- 随机选择特征;
- 构建决策树;
- 随机森林投票(平均)。
随机选择样本和 Bagging 相同,采用的是Bootstraping 自助采样法;随机选择特征是指在每个节点在分裂过程中都是随机选择特征的(区别与每棵树随机选择一批特征)。这种随机性导致随机森林的偏差会有稍微的增加(相比于单棵不随机树),但是由于随机森林的“平均”特性,会使得它的方差减小,而且方差的减小补偿了偏差的增大,因此总体而言是更好的模型。