集成学习方法之Bagging,Boosting,Stacking

        “团结就是力量,这力量是铁,这力量是钢… …”,小学学的一首歌,至今还刻骨铭心。“团结就是力量”,完美的阐述了机器学习中非常强大的集成学习方法的思想。其实,集成学习方法就这么简单,将多个模型组合在一起会得到更强大的模型。本篇就让我们一起来探讨比赛必用神技——集成学习方法(Ensemble Learning Method)。
       

1)什么是集成学习方法

        集成学习是一种技术框架,训练多个基模型,按照不同的思路组合基模型,以达到更好的结果。用于组合的基模型,在大多数情况下并不是很好,比如低方差高偏差而准确度不够或者低偏差高方差而缺乏泛化能力。因此,集成学习的思想是,将这些基模型组合在一起,以减少偏差或者方差,创建一个表现更好的强大的模型。
        用以组合的基模型可以选择同质模型(Bagging,Boosting),比如基模型全部为决策树模型;也可以选择使用非同一类模型,即异质模型(Stacking),比如基模型包括随机森林,KNN,支持向量机。需要注意的是,我们选择的基模型必须和我们的组合方式一致。如果我们选择的基模型是高方差低偏差,选择的组合方式应该倾向于减小方差,比如bagging;相反,我们选择的基模型是高偏差低方差,选择的组合方式应该倾向于减小偏差,比如boosting。
        目前,有三种常见的集成学习框架:bagging,boosting和stacking。

       

2)Bagging

        Bagging(bootstrap aggregating)的框架思想是,选择同质的基学习器,让基学习器之间相互独立并行训练,最后将所有基学习器的结果组合(分类使用投票,回归使用平均)在一起。基学习器主要选择高方差低偏差的模型。
       

集成学习方法之Bagging,Boosting,Stacking_第1张图片
        从上图中可以看出,bagging是在初始的数据集上进行 L L L次随机有放回的采样(bootstrap sampling)得到 L L L个不同的训练集,利用 L L L个不同的训练集训练 L L L个基分类器,再对这 L L L个弱学习器通过投票或者平均的策略得到最终的强学习器。
        其中,bootstrap sampling叫自助采样法或者有放回的采样,是指对于样本量为 m m m的训练集,每次采样一个样本并将样本放回,重复采样 m m m次,得到一个样本量为 m m m的采样集。由于是随机采样,得到的 L L L个数据集是不一样的,这样保证子模型之间的差异性。同时,对于样本量为 m m m的训练集,平均只有63%的样本被每个分类器采样,剩余的37%没有被采样到。正是因为如此,原始训练集中有噪音的数据才有机会不被采样到,所以,bagging可以降低模型的不稳定性即方差。
       基于bagging框架的代表算法有随机森林,我们下篇具体再探讨。

       

3)Boosting

       Boosting框架思想是,选择同质的基学习器,让基学习器之间按照顺序进行训练,并让每个基学习器都尝试去修正前面的分类。
集成学习方法之Bagging,Boosting,Stacking_第2张图片
        从上图可以看出,boosting自适应的依次拟合多个基学习器,当前模型训练是基于上一个基学习器的训练结果进行训练的,当前基学习器会增加被错分样本的权重,进而减少预测的错误率。因此,和bagging不一样,boosting主要集中减少模型的偏差,通常基模型选择具有高偏差低方差的模型。如果选择决策树作为基模型,则大多数选择深度较浅的决策树,同时也降低模型拟合的计算成本。
        需要注意的是,由于boosting将注意力集中在分类错误样本上,因此boosting对训练数据的噪音非常敏感,如果训练数据含有很多的噪音数据,那基学习器都会集中在噪音数据上做训练,反而会影响整个模型的效果。
        基于boosting框架的代表算法有AdaBoost(Adaptive Boosting)和Gradient Boosting,后面我们再详细探讨。
       

4)Stacking

       Stacking和bagging和boosting完全不一样。Stacking使用异质的基学习器,bagging和boosting使用同质的基学习器。另外,Stacking聚合基模型使用的方式是模型融合,而bagging和boosting采用的是一些指定的策略。
       Stacking框架思想是,选择异质的基学习器并行的在训练集上进行训练,将训练好的所有基模型对预测集进行预测,将所有基模型的预测值作为另一个融合模型的训练集进行训练,当有新的数据集过来,首先通过基模型预测,再输入到融合模型做最终的预测输出。比如我们拟合由m 个基学习器组成的 stacking 集成模型。首先我们将训练数据分为训练集和测试集,在训练集上分别训练m个基学习器,利用训练好的基学习器对预测集进行预测输出m个预测指标,m个预测指标作为融合模型的训练集对融合模型进行训练。实际应用中,我们通常使用K折交叉验证进行模型训练,融合模型一般选择逻辑回归。
       Stacking框架思想有点类似神经网络。下图就是两层的stacking集成模型。
集成学习方法之Bagging,Boosting,Stacking_第3张图片
       

5)总结

  • 集成学习只能降低风险,并不能保证优于最好的基学习器,但通常情况集成学习得到的模型效果是最好的。
  • 集成学习的提前假设是,我们以一定的策略组合基模型,能够得到更具有撸棒性或更精准的模型;
  • bagging通过平均(分类是投票)的策略进行模型组合,因此可以降低模型的方差,无法显著降低模型的偏差。但有一个前提条件,基模型之间必须有差异性,当基模型之间相互独立,方差降低的效果最好。bagging使用bootstrap采样生成不同的模型,random forest在bagging的基础上,增加了特征的随机。
  • boosting是序列化对损失函数进行最小化,因此可以降低模型的偏差,无法显著降低模型的方差。基模型之间有强相关性。
  • stacking主要也是降低模型的偏差。

       
        以上就是我们对集成学习方法原理进行的简单探讨,后面我们再详细探讨基于这些集成学习方法的一些算法,比如Random Forest,AdaBoost,GBDT,Xgboost。好了,再让我们一起来唱一遍,“团结就是力量,这力量是铁,这力量是钢… …”
       
       
(欢迎大家在评论区探讨交流,也欢迎大家转载,转载请注明出处)

上篇:Scikit-learn决策树算法库总结与简单实践
下篇:随机森林(Random Forest)算法原理总结

你可能感兴趣的:(机器学习)