秦刚刚的机器学习成长之路之集成学习(Ensemble Learning)总结

写在前面的话:从去年11月开始研究集成学习方法,刚开始只是基于决策树知识零散地学习了RF(Random Forest)、AdaBoost(Adaptive Boosting)、GBDT(Gradient Boosting Decision Tree)、XGBoost(eXtreme Gradient Boosting)这四种方法,但是到后面发现这四种方法已经囊括了当前比较流行且高效的集成算法,所以基于此,我将先对集成学习方法做一个总结,然后再分别讲解这四种方法。

本文主要从以下4个部分来解释集成学习:

  • 1 集成学习是什么?
  • 2 集成学习分为哪几类?
    • 2.1 bagging
    • 2.2 boosting
    • 2.3 stacking
  • 3 偏差和方差
    • 3.1 模型的偏差和方差是什么?
    • 3.2 bagging的偏差和方差
    • 3.3 boosting的偏差和方差
    • 3.4 小结
  • 4 总结

1. 集成学习是什么?

关于集成学习是什么这一问题,我想引用一下周志华教授在《Ensemble Methods》中的一句话,如下:

     Ensemble methods train multiple learners to solve the same problem.In contrast to ordinary learning approaches 
which try to construct one learner from training data, ensemble methods try to construct a set of learners and 
combine them.

这句话表明:对于训练集数据,集成学习算法通过训练若干个弱学习器,通过一定的结合策略,就可以最终形成一个强学习器,达到其利断金的效果(也就是三个臭皮匠赛过诸葛亮^^)。
它的潜在思想是:即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。

2. 集成学习有哪几种类型?

结合上一节的内容不难发现:集成学习其实是一种技术框架,核心问题是如何训练若干个弱学习器以及用什么规则将它们组合起来。因此,按照处理这两个核心问题的方式,集成学习可以分为以下三类,其中,前两类是目前使用最多且效果最好的:

  • bagging
  • boosting
  • stacking

2.1 bagging

Bagging是bootstrap aggregating的简写。先说一下bootstrap,bootstrap也称为自助采样法,它是一种有放回的抽样方法,目的为了得到统计量的分布以及置信区间。具体步骤如下

  • 采用重抽样方法(有放回抽样)从原始样本中抽取一定数量的样本
  • 根据抽出的样本计算想要得到的统计量T
  • 重复上述N次(一般大于1000),得到N个统计量T
  • 根据这N个统计量,即可计算出统计量的置信区间

在Bagging方法中,使用bootstrap方法从整体数据集中得到N个数据集,然后并行地生成N个分类器,最后通过“少数服从多数”的原则来确定最终的预测结果,具体地:分类问题采用N个模型预测投票的方式,回归问题采用N个模型预测平均的方式。下图形象地描述了Bagging的思想:

随机森林(Random Forest)就是最典型的Bagging方法之一。具体地:随机森林在训练时采用Bootstrap方法对训练数据集采用生成多个训练数据集,然后在每一个数据集上生成一颗决策树(也就是说:随机森林的每一棵决策树之间是没有关联的),最后在预测时候使用“多数投票法”来决定最终预测类别。

需要注意的是:在随机森林中,有两个随机采样的过程:对输入数据的(数据的数量)与(数据的特征)都进行采样。对于行采样,采用有放回的方式,若有N个数据,则采样出N个数据(可能有重复),这样在训练的时候每一棵树都不是全部的样本,相对而言不容易出现overfitting;接着进行列采样,从M个feature中选择出m个(m<<M)。最近再将这些通过采样得到的数据集用于决策树的学习。

2.2 boosting

Boosting是一种可以用来减小监督学习中偏差的机器学习算法。主要也是学习一系列弱分类器,并将其组合为一个强分类器。下图形象地描述了Boosting的思想:

从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
 
Boosting中有代表性的是AdaBoost(Adaptive boosting)算法:刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。具体可以参考李航的《统计学习方法》。

之前提到过的GBDT(Gradient Boost Decision Tree)也是一种Boosting的方法,与AdaBoost不同,GBDT每一次的计算是为了减少上一次的残差,GBDT在残差减少(负梯度)的方向上建立一个新的模型。

Boosting 与 bagging 等方法的主要区别是前者的基(弱)学习器通过加权的数据进行顺序训练,同时,它也是一种框架算法,主要是通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器。

2.3 stacking

Stacking方法是指训练一个模型用于组合其他各个模型。首先我们先训练多个不同的模型,然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。理论上,Stacking可以表示上面提到的两种Ensemble方法,只要我们采用合适的模型组合策略即可。但在实际中,我们通常使用logistic回归作为组合策略。

如下图,先在整个训练数据集上通过bootstrap抽样得到各个训练集合,得到一系列分类模型,称之为Tier 1分类器(可以采用交叉验证的方式学习),然后将输出用于训练Tier 2 分类器。

3. 偏差和方差

偏差(bias)指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力;方差(variance)度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响。

如下图所示,当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。

当模型越简单时,即使我们再换一组数据,最后得出的学习器和之前的学习器的差别就不那么大,模型的方差很小。还是因为模型简单,所以偏差会很大

也就是说,当我们训练一个模型时,偏差和方差都得照顾到,漏掉一个都不行,即是Bias-Variance Trade-off》

对于Bagging算法来说,并行地训练很多不同的基(弱)分类器的目的就是降低方差(variance) ,因为采用了相互独立的基分类器多了以后,预测的值自然就会靠近。所以对于每个基分类器来说,目标就是如何降低这个偏差(bias),所以会采用深度很深甚至不剪枝的决策树。
  
对于Boosting来说,每一步都会在上一轮的基础上更加拟合原数据,所以可以保证偏差(bias)一直在减小直到足够小,所以对于每个基分类器来说,问题就在于如何选择方差(variance)更小的分类器,即更简单的分类器,所以我们选择了深度很浅的决策树。

另外,《Understanding the Bias-Variance Tradeoff》当中有一副图也形象地向我们展示了偏差和方差的关系:

3.1 模型的偏差和方差是什么?

模型的偏差很好解释,它表示的是训练出来的模型在训练集上的准确度

要解释模型的方差,首先需要重新审视模型:模型是随机变量。设样本容量为n的训练集为随机变量的集合 ( x 1 , x 2 , ⋯ &ThinSpace; , x n ) (x_1, x_2, \cdots, x_n) (x1,x2,,xn),那么模型是以这些随机变量为输入的随机变量函数(其本身仍然是随机变量) F ( x 1 , x 2 , ⋯ &ThinSpace; , x n ) F(x_1, x_2, \cdots, x_n) F(x1,x2,,xn)抽样的随机性带来了模型的随机性

定义随机变量的值的差异是计算方差的前提条件,通常来说,我们遇到的都是数值型的随机变量,数值之间的差异再明显不过(减法运算)。但是,模型的差异性呢?我们可以理解模型的差异性为模型的结构差异,例如:线性模型中权值向量的差异,树模型中树的结构差异等。在研究模型方差的问题上,我们并不需要对方差进行定量计算,只需要知道其概念即可。

研究模型的方差有什么现实的意义呢?我们认为方差越大的模型越容易过拟合:假设有两个训练集A和B,经过A训练的模型Fa与经过B训练的模型Fb差异很大,这意味着Fa在类A的样本集合上有更好的性能,而Fb反之,这便是我们所说的过拟合现象。

我们常说集成学习框架中的基模型是弱模型,通常来说弱模型是偏差高(在训练集上准确度低)方差小(防止过拟合能力强)的模型。但是,并不是所有集成学习框架中的基模型都是弱模型。bagging和stacking中的基模型为强模型(偏差低方差高),boosting中的基模型为弱模型。

在bagging和boosting框架中,通过计算基模型的期望和方差,我们可以得到模型整体的期望和方差。为了简化模型,我们假设基模型的权重( γ \gamma γ)、方差( σ \sigma σ)及两两间的相关系数相等。由于bagging和boosting的基模型都是线性组成的,那么有:

E ( F ) = E ( ∑ i m γ i ∗ f i )             = ∑ i m γ i ∗ E ( f i )           = γ ∗ ∑ i m E ( f i ) E(F) = E(\sum_{i}^{m}\gamma_i*f_i) \\ \ \ \ \ \ \ \ \ \ \ \ = \sum_{i}^{m}\gamma_i*E(f_i) \\ \ \ \ \ \ \ \ \ \ = \gamma*\sum_{i}^{m}E(f_i) E(F)=E(imγifi)           =imγiE(fi)         =γimE(fi)

V a r ( F ) = V a r ( ∑ i m γ i ∗ f i )                                   = C o v ( ∑ i m γ i ∗ f i , ∑ i m γ i ∗ f i )                                                                                      = ∑ i m γ i 2 ∗ V a r ( f i )   + ∑ i m ∑ j ≠ i m 2 ∗ ρ ∗ γ i ∗ γ j ∗ V a r ( f i ) ∗ V a r ( f j )                                                        = m 2 ∗ γ 2 ∗ σ 2 ∗ ρ   + m ∗ γ 2 ∗ σ 2 ∗ ( 1 − ρ ) Var(F) = Var(\sum_{i}^{m}\gamma_i*f_i) \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = Cov(\sum_{i}^{m}\gamma_i*f_i,\sum_{i}^{m}\gamma_i*f_i) \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = \sum_{i}^{m}\gamma_i^2*Var(f_i) \ +\sum_{i}^{m}\sum_{ j \neq i}^{m}2*\rho*\gamma_i*\gamma_j*\sqrt{Var(f_i)}*\sqrt{Var(f_j)} \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = m^2*\gamma^2*\sigma^2*\rho \ + m*\gamma^2*\sigma^2*(1-\rho) Var(F)=Var(imγifi)                                 =Cov(imγifi,imγifi)                                                                                    =imγi2Var(fi) +imj̸=im2ργiγjVar(fi) Var(fj)                                                       =m2γ2σ2ρ +mγ2σ2(1ρ)

3.2 bagging的偏差和方差

对于bagging来说,每个基模型的权重( γ \gamma γ)等于 1 m \frac{1}{m} m1且期望( μ \mu μ)近似相等(子训练集都是从原训练集中进行子抽样),故我们可以进一步化简得到:

E ( F ) = γ ∗ ∑ i m E ( f i ) = 1 m ∗ m ∗ μ = μ E(F) = \gamma*\sum_{i}^{m}E(f_i) =\frac{1}{m}*m*\mu = \mu E(F)=γimE(fi)=m1mμ=μ

V a r ( F ) = m 2 ∗ γ 2 ∗ σ 2 ∗ ρ + m ∗ γ 2 ∗ σ 2 ∗ ( 1 − ρ )                              = m 2 ∗ 1 m 2 ∗ σ 2 ∗ ρ + m ∗ 1 m 2 ∗ σ 2 ∗ ( 1 − ρ )   = σ 2 ∗ ρ + σ 2 ∗ ( 1 − ρ ) m Var(F) = m^2*\gamma^2*\sigma^2*\rho+m*\gamma^2*\sigma^2*(1-\rho ) \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ = m^2*\frac{1}{m^2}*\sigma^2*\rho+m*\frac{1}{m^2}*\sigma^2*(1-\rho) \\ \ = \sigma^2*\rho+\frac{\sigma^2*(1-\rho)}{m} Var(F)=m2γ2σ2ρ+mγ2σ2(1ρ)                            =m2m21σ2ρ+mm21σ2(1ρ) =σ2ρ+mσ2(1ρ)

根据上式我们可以看到,整体模型的期望近似于基模型的期望,这也就意味着整体模型的偏差和基模型的偏差近似。同时,整体模型的方差小于等于基模型的方差(当相关性为1时取等号),随着基模型数(m)的增多,整体模型的方差减少,从而防止过拟合的能力增强,模型的准确度得到提高。但是,模型的准确度一定会无限逼近于1吗?并不一定,当基模型数增加到一定程度时,方差公式第二项的改变对整体方差的作用很小,防止过拟合的能力达到极限,这便是准确度的极限了。另外,在此我们还知道了为什么bagging中的基模型一定要为强模型,否则就会导致整体模型的偏差度低,即准确度低。

Random Forest是典型的基于bagging框架的模型,其在bagging的基础上,进一步降低了模型的方差。Random Fores中基模型是树模型,在树的内部节点分裂过程中,不再是将所有特征,而是随机抽样一部分特征纳入分裂的候选项。这样一来,基模型之间的相关性降低,从而在方差公式中,第一项显著减少,第二项稍微增加,整体方差仍是减少。

3.3 boosting的偏差和方差

对于boosting来说,基模型的训练集抽样是强相关的,那么模型的相关系数近似等于1,故我们也可以针对boosting化简公式为:

E ( F ) = γ ∗ ∑ i m E ( f i ) E(F) = \gamma*\sum_{i}^{m}E(f_i) E(F)=γimE(fi)

V a r ( F ) = m 2 ∗ γ 2 ∗ σ 2 ∗ ρ   + m ∗ γ 2 ∗ σ 2 ∗ ( 1 − ρ )                                   = m 2 ∗ γ 2 ∗ σ 2 ∗ 1 + m ∗ γ 2 ∗ σ 2 ∗ ( 1 − 1 ) = m 2 ∗ γ 2 ∗ σ 2 Var(F) = m^2*\gamma^2*\sigma^2*\rho\ +m*\gamma^2*\sigma^2*(1-\rho) \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =m^2*\gamma^2*\sigma^2*1+m*\gamma^2*\sigma^2*(1-1) \\ =m^2*\gamma^2*\sigma^2 Var(F)=m2γ2σ2ρ +mγ2σ2(1ρ)                                 =m2γ2σ21+mγ2σ2(11)=m2γ2σ2

通过观察整体方差的表达式,我们容易发现,若基模型不是弱模型,其方差相对较大,这将导致整体模型的方差很大,即无法达到防止过拟合的效果。因此,boosting框架中的基模型必须为弱模型。

因为基模型为弱模型,导致了每个基模型的准确度都不是很高(因为其在训练集上的准确度不高)。随着基模型数的增多,整体模型的期望值增加,更接近真实值,因此,整体模型的准确度提高。但是准确度一定会无限逼近于1吗?仍然并不一定,因为训练过程中准确度的提高的主要功臣是整体模型在训练集上的准确度提高,而随着训练的进行,整体模型的方差变大,导致防止过拟合的能力变弱,最终导致了准确度反而有所下降。

基于boosting框架的Gradient Tree Boosting模型中基模型也为树模型(同Random Forest),我们也可以对特征进行随机抽样来使基模型间的相关性降低,从而达到减少方差的效果。

3.4 小结

任意需要调参的算法,它调参的目标为:模型在训练集上的准确度和防止过拟合能力的大和谐!

为此,总结以上内容得到:

  • 使用模型的偏差和方差来描述其在训练集上的准确度和防止过拟合的能力
  • 对于bagging来说,整体模型的偏差和基模型近似,随着训练的进行,整体模型的方差降低
  • 对于boosting来说,整体模型的初始偏差较高,方差较低,随着训练的进行,整体模型的偏差降低(虽然也不幸地伴随着方差增高),当训练过度时,因方差增高,整体模型的准确度反而降低
  • 整体模型的偏差和方差与基模型的偏差和方差息息相关

从而我们得出,那些让我们头疼的算法中的参数,现在可以粗略地分为两类了:(1)控制整体训练过程的参数和**(2)基模型的参数**,这两类参数都在影响着模型在训练集上的准确度以及防止过拟合的能力

4. 总结

最后,我再补充一点。

一个集成系统的成功,充分依赖于组成这个系统的分类器的多样性。

多样性的实现方法有很多种,以下是我所知道的(欢迎大家踊跃补充):

  • 使用不同的训练数据(由re-sampling技术获得,eg:bootstrap or bagging)去训练多个独立的分类器(弱分类器);
  • 使用不同的训练参数(eg:同样是MLP,但各个MLP的参数(初始权重、层数、节点个数‘激活函数等)不同)
  • 使用多个不同类型的分类器(在bagging中,弱(基)分类器可以有决策树、贝叶斯分类器、神经网络、感知器等)
  • 使用不同的特征或者不同的特征子集(random subspace method)

至此,集成学习的大体内容以及基本原理已经讲解完毕,我将会在后续文章中对本文中提到的集成方法:Random Forest、Adaboost、GBDT以及XGBoost分别进行详细讲解,谢谢你的阅读^^

以下是相关的参考文章:
集成学习(Ensemble Learning)
集成学习(ensemble learning)应如何入门?
集成学习总结
集成学习(ensemble learning)原理详解

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值