集成学习之bagging、boosting、stacking

集成学习

以下内容仅作为自己的学习记录。
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务。

集成学习中的个体学习器通常由一个现有的算法从训练数据集产生,比如决策树算法、神经网络算法。集成学习主要有两种方式:同质集成(个体学习器都是一个类型的,比如都是神经网络算法)和异质集成。

要获得好的集成,个体学习器应“好而不同”,即个体学习器的准确率要高,同时个体学习器之间的差异要高,即要有多样性。

集成学习方法主要分为两大类:

  1. 个体学习器间存在强依赖关系、必须串行生成的序列化方法,代表算法有Boosting;
  2. 个体学习器间不存在强依赖关系、可同时生成的并行化方法,代表算法有Bagging和Random Forest;

Boosting

boosting算法是一族可以将弱学习器提升为强学习器的算法。boosting族算法最著名的是AdaBoost算法。AdaBoost算法可以这样理解:属于加性模型,学习算法为前向分步算法;具体地,对于AdaBoost二分类算法而言,损失函数为指数损失函数,对于AdaBoost回归而言,损失函数为均方差损失函数。

从偏差-方差均衡的角度看,boosting算法主要关注降低偏差,因此boosting算法能基于泛化性能相当弱的学习器构建出很强的集成。

Bagging与随机森林
Bagging

Bagging在采样生成具体的训练样本集的时候使用的是bootstrap sampling。在对预测输出进行结合时,bagging对分类任务使用简单投票法;对回归任务使用简单平均法。

训练一个bagging集成 与直接使用基学习器训练一个学习器的复杂度同阶,说明bagging是一个非常高效的集成学习算法;与标准的adaboost算法只能适用于二分类不同,bagging算法可以不经修改地适用于分类和回归任务。

bagging所采用的自助采样法给bagging带来了另外一个优点:由于每个基学习器只使用了初始训练集中约63.2%的样本,剩下约36.8%的样本可用作验证集来对泛化性能进行“包外估计”(out-of-bag estimation)。(和K折交叉验证的作用很像)

包外样本还要很多其他用途。比如当基学习器是决策树时,可以利用包外样本来辅助剪枝;当基学习器是神经网络时,可以使用包外样本来进行early stopping以减少过拟合的风险。

从偏差-方差均衡角度来看,bagging更关注于减少方差,因此bagging在不剪枝的决策树、神经网络等易受样本扰动的学习器上效果更为显著。

随机森林

是Bagging的扩展变体。RF的基学习器同样是决策树,但是和bagging不同的地方在于RF在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时,是在当前节点的属性集合中选择一个最优属性(对于CART而言,选择标准为平方误差最小或者基尼指数最小);但是在RF中,对基决策树的每个节点,先从该节点的属性集合中随机选择一个包含 k k k个属性的子集,然后在这个子集中选择一个最优属性用于划分。这里的 k k k值控制了随机性的引入程度,一般而言 k = log ⁡ 2 b k=\log_2b k=log2b(b表示总的属性个数)。

bagging中基学习器的不同(即多样性)来自于对样本的扰动(通过对初始训练集进行自助采样),而RF的不同还来自于对属性的扰动,这使得RF的集成泛化性能能够通过基学习器的多样性的增加而提升。

结合策略

学习器结合可能从三个方面带来好处:

  1. 统计的角度;由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能,此时若使用单学习器可能因误选而导致泛化性能不佳,结合多个学习器会减少这一风险;
  2. 计算的角度;学习算法往往会陷入局部极小,有的局部极小点所对应的泛化性能可能很糟糕,通过多次运行之后进行结合,可以降低陷入糟糕局部极小值的风险;
  3. 表示的角度;某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用单学习器肯定无效,通过结合多个学习器,能够扩大相应的假设空间,使得实际使用算法所对应的假设空间更有可能覆盖到真实的假设空间,从而学习到更好的近似。
平均法

主要针对回归问题而言;主要有两种:

  1. 简单平均法;
  2. 加权平均法;
投票法

主要针对分类问题而言,主要有三种:

  1. 绝对多数投票法;
  2. 相对多数投票法;
  3. 加权投票法。
学习法

当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合,Stacking是学习法的典型代表。这里我们把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或者元学习器。

Stacking先从初始数据集训练处初级学习器,然后生成一个新数据集用于训练次级学习器。在这个新的数据集中,初级学习器的输出被当做次级学习器的输入,初始样本的标记仍被当做样例标记。在次级学习器的训练阶段,用的是初级学习器产生的新的数据集,如果直接用初始训练集来训练次级学习器,会产生比较大的过拟合风险。

多样性增强

在集成学习中需要有效地生成多样性大的个体学习器,那么如何增强多样性呢?一般的思路是在学习过程中引入随机性,常见做法是对数据样本输入属性输出表示算法参数进行扰动。

  1. 数据样本扰动。给定初始数据集,可以从中产生出不同的数据子集,再利用不同的数据子集训练出不同的个体学习器。数据样本扰动通常是基于采样法,例如在bagging中使用自助采样,在AdaBoost中使用序列采样(这个怎么处理的?)。数据样本扰动法对“不稳定基学习器”,比如决策树、神经网络等很有效;对于数据样本扰动不敏感的学习器,比如SVM、朴素贝叶斯、K近邻,效果不是那么显著;
  2. 输入属性扰动。训练样本通常由一组属性描述,不同的“子空间”提供了观察数据的不同视角。当训练数据集冗余属性多,可以采用这种方法;当数据属性少,或者冗余属性少,则不宜采用这种方法。
  3. 输出表示扰动。目前不是很懂,后续完善补充。
  4. 算法参数扰动。基学习器算法一般都有参数需要设置,例如神经网络的隐层神经元数量、权重值,通过设置不同的参数,可以产生差别比较大的个体学习器。实际上,在使用单一学习器的时候,我们通常利用交叉验证的方式来确定参数值,这事实上已经使用了不同参数来训练多个学习器,只是我们最后选择效果最好的那个学习器,而集成学习相当于把这些学习器都利用起来;由此可以看出,集成学习技术的实际计算开销并不比使用单一学习器大很多。

书中在最后提到一句:为什么Adaboost在训练误差达到零之后继续训练仍能提高泛化性能?但是如果一直训练下去,过拟合还是会出现。(没有给出理论的分析和解释)

后续再补充完善。

突然想到一点:在偏差一定的情况下,学习器的方差越大,是不是说明这个学习器越容易过拟合? 由于RF是bagging,关注于减少方差,并且我们知道RF是不容易过拟合的,即RF方差小,不容易过拟合;所以想到是不是方差大,学习器容易过拟合呢?即学习器的方差和学习器的过拟合间有没有什么联系呢?

过拟合的本质是学习器学到了数据集中的异常数据模式(噪声数据导致),导致模型复杂度高;而RF由于是bagging,引入了样本随机和属性随机,所以可能只有部分基学习器会遇到噪声数据(假设噪声数据比较少,那么在自助抽样的时候采样到噪声数据的可能性就比较少),导致该基学习器学习的是异常的数据模式,并且由于两个随机的引入,基学习器本身的学习能力就比较弱,所以可能学习不了异常的数据模式,即使学习到了异常的数据模式,导致基学习器过于复杂(决策树过深,叶子节点过多),但是也只有少数的基学习器会这样,由于bagging算法的特性,这些异常的基学习器对于最终的强学习器的影响比较弱(平均,投票),所以整体而言bagging算法的方差比较低,不容易过拟合。相对的,boosting算法就容易过拟合,因为boosting算法关注的是减少偏差,在串行训练基学习器的时候,都是用的整个训练数据集,一旦训练数据集中存在异常的数据模式,那么在每一轮的训练过程中,每个基学习器都会受到这些异常数据模式的影响,从而导致最终的强学习器容易过拟合,方差大。

还有一个问题:bagging中的树(比如RF)和boosting中的树(比如GBDT)平均而言谁更深?

个人理解:bagging中的树更深。我们知道bagging中的每棵树在生成的时候都是尽可能生长,尽可能的去拟合该棵树的训练数据集,尽可能减少单棵树的偏差,增强单棵树的学习能力;而boosting中的树如果都完全生长,则过拟合风险大大增加,所以相对而言boosting中的树会浅一些。既然bagging中的树更深,boosting中的树相对浅,那为什么说boosting是专注于减少偏差呢?虽然bagging中的树可能深一些,但是由于两个随机性的引入(RF),导致训练每棵树的样本和属性都只是部分的,但是boosting训练的时候用的是整个数据集,没有引入随机性,所以虽然相对浅一些,但偏差肯定更小,所以说boosting专注减少偏差。

参考

《机器学习》,周志华

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: bagging:是一种集成学习方法,通过对训练数据进行有放回的随机抽样,生成多个子集,然后在每个子集上训练一个基学习器,最后将这些基学习器的预测结果进行平均或投票来得到最终的预测结果。 boosting:也是一种集成学习方法,但与bagging不同的是,它是通过对训练数据进行加权,使得基学习器更加关注那些难以分类的样本,从而提整体的预测准确率。 stacking:是一种更加级的集成学习方法,它不仅仅是将多个基学习器的预测结果进行简单的平均或投票,而是将这些预测结果作为新的特征,再训练一个元学习器来得到最终的预测结果。 ### 回答2: BaggingBoostingStacking都是集成学习(Ensemble Learning)中常用的方法。 Bagging(自举汇聚法)是一种并行集成方法,基于自助采样的思想,通过构建多个相互独立的分类器(如决策树),再进行投票或求平均等方式进行集成。每个子分类器都是在不同的训练数据集上训练得到的,可以减少模型的方差,提模型的稳定性,有效降低过拟合风险。 Boosting(提升法)则是一种串行集成方法,通过迭代训练一系列弱分类器(如决策树),通过不断调整样本权重以使错误样本更加关注,然后再结合所有弱分类器形成一个强分类器。Boosting可以提模型的准确性,特别适用于处理复杂的分类问题。 Stacking(堆叠泛化法)是一种更为复杂的集成方法,它结合了BaggingBoosting的优势。在Stacking中,首先构建多层的分类器(如基分类器、元分类器等),每层的输出作为下一层的输入。最后通过一个元分类器来整合各层的输出结果,以获得最终的预测结果。 总结起来,Bagging通过并行地构建多个相互独立的分类器进行集成,Boosting通过迭代地训练一系列弱分类器形成一个强分类器,而Stacking通过构建多层的分类器以获得更强大的预测能力。这些集成方法在实际应用中,能够有效提分类模型的准确性和稳定性,达到更好的预测效果。 ### 回答3: BaggingBoostingStacking都是常用于集成学习(ensemble learning)中的方法。 Bagging是基于自助采样(bootstrap sampling)的一种集成学习方法。在Bagging中,我们从原始数据集中使用有放回地进行采样得到多个不同的子样本集,并使用这些子样本集独立地训练多个基学习器。最后,通过对基学习器的预测结果进行投票或求平均来得到最终的集成模型。Bagging能够减少过拟合,提模型的稳定性和泛化能力。 Boosting也是一种集成学习方法,与Bagging不同的是它是基于序列训练的。在Boosting中,基学习器是按顺序训练的,每个基学习器都会根据前一个学习器的预测结果对样本进行调整。Boosting的核心思想是通过迭代训练一系列弱学习器,使得它们能够逐步提升性能并最终形成一个强学习器。常用的Boosting算法有AdaBoost和Gradient BoostingStacking是一种更级的集成学习方法,它将多个不同类型的基学习器集成在一起。在Stacking中,我们首先使用训练数据集对多个基学习器进行训练,然后使用这些基学习器对测试数据集进行预测。接着,我们将基学习器的预测结果作为输入,再训练一个元学习器来得到最终的集成模型。Stacking通过将不同类型的基学习器进行组合,可以充分利用它们的优势,提模型的性能和泛化能力。 综上所述,BaggingBoostingStacking都是集成学习中常用的方法,它们通过组合多个基学习器来提模型的性能和泛化能力,从而在实际应用中取得更好的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值