当前位置: 代码迷 >> 综合 >> 集成学习(“森林书”)之三大集成方法Boosting、Bagging、Stacking
  详细解决方案

集成学习(“森林书”)之三大集成方法Boosting、Bagging、Stacking

热度:33   发布时间:2024-02-22 23:57:49.0

最近入手了周志华老师的《集成学习:基础与算法》一书,对书中介绍的目前常用的三大集成方法Boosting、Bagging、Stacking进行了学习。这篇博客主要是对这三大集成思想的一些总结,不涉及理论层面的推导。

文章目录

        • 一、集成学习
        • 二、Boosting
          • 2.1 基本思想
          • 2.2 典型算法:Adaboost,XGBoost,LightGBM,Catboost
        • 三、Bagging
          • 3.1 基本思想
          • 3.2 典型算法:随机森林(Random Forest)
        • 四、Stacking
          • 基本思想


一、集成学习

任何弱学习器都有被提升为强学习器的潜力。

集成学习方法的两种范式:

  • 串行生成基分类器的串行集成方法,例如Boosting

    按残差降低(residual-decreasing)方式提升集成的预测性能,基本动机是利用基学习器之间的相关性。

  • 并行生成基分类器的并行集成方法,例如Bagging

    结合相互独立的基分类器能够显著减小误差,基本动机是利用基学习器之间的独立性。


二、Boosting

2.1 基本思想
  • 基本想法:纠正弱分类器 h1h_{1}h1? 所犯的错误。

  • 一般过程

    串行地训练一系列分类器,使得先前基分类器做错的样本在后续受到更多关注,并将这些分类器进行结合,以便获得性能完美的强分类器。

2.2 典型算法:Adaboost,XGBoost,LightGBM,Catboost

这一部分将在后续博客中展开,感兴趣的朋友可以关注一下哈!


三、Bagging

3.1 基本思想
  • 起源

    Bagging来源于Bootstrap Aggregating的缩写,自助和聚合是其两个关键步骤。

  • 自助

    由于聚合独立的基分类器可以显著降低误差,所以基分类器越独立越好。因此,引入自助采样得到训练子集用于训练基分类器。

    自助采样流程:给定一个样本数为mmm的训练集合,它通过有放回采样得到有mmm个训练样本的采样集。重复过程TTT次,得到TTT个样本数目为mmm的样本集。注意,这种采样第iii个样本被选中0,1,2,…次的概率近似为λ=1\lambda=1λ=1的泊松分布,第iii个样本至少出现一次的概率为1?(1/e)=0.6321-(1/e) = 0.6321?(1/e)=0.632,也就是训练时原始数据集中约有36.8%的样本未被使用。

  • 聚合

    采用最常用的方法来聚合基分类器,即在分类任务上投票,在回归问题上平均。

  • 性能

    Bagging的预测效果会随着集成规模即基学习器数目的增大而最终收敛。

    Bagging可以明显降低方差,在不稳定基学习器上格外有效,它通过平滑效果降低方法。

注:对训练数据不敏感的学习器称为稳定学习器。决策树为不稳定学习器,决策树桩更倾向于稳定学习器,kkk-近邻分类器这种高稳定分类器,Bagging并不起作用。当使用Bagging的时候,无须对决策树进行剪枝。


3.2 典型算法:随机森林(Random Forest)

随机森林是Bagging的升级,主要区别是引入了随机特征选择。即在每棵决策树选择分割点时,随机森林会先优先选择一个特征子集,然后在这个子集上进行传统的分割点选择。

随机森林参数KKK用来控制随机性。当KKK等于所有特征总数时,构建的决策树等价于传统确定性的决策树,建议K值为特征数的对数。

随机森林中的随机树只在特征选择阶段引入随机性,在选择分割点时不会引入。


四、Stacking

基本思想
  • 基本思想

    一种通用的通过训练学习器来结合个体学习器的方法。个体学习器被称为一级学习器,结合器被称为二级学习器,或者元学习器。

  • 一般过程

    首先使用原始的训练数据集来训练一级学习器;之后,使用一级学习器的输出作为输入特征,并使用对应原始标记作为新标记,组成一个新数据集来训练二级学习器。一级学习器经常使用不同的学习算法,因此Stacking集成通常是异质的。

    Stacking是一种通用框架,可以看成是多种集成方法的泛化,它也可以看成是一种通过学习进行结合的特殊结合方法。

注:可以使用交叉验证将验证集的结果作为二级学习器的输入作为二级学习器的训练数据,之后最终的一级学习器会在全部训练数据上训练并重新生成。

  相关解决方案