boosting家族之综合理论篇

文章目录

    • 概述
    • 先验知识
      • 集成学习
    • boosting家族简述
      • boosting家族——AdaBoosting
      • boosting家族——GBDT
      • boosting家族——XGBoost
    • RandomForest 与 GBDT 的区别
    • 参考

概述

boosting往上了说,是集成学习的分支。往下分,有AdaBoost和GBDT以及xgboost和lightBgm。此文是我这个boosting小白对boosting家族的理论知识的学习的的大致学习记录。

先验知识

先验知识中,线性回归、决策树以及基本的特征工程相关的知识就不赘述了。主要学习下集成学习的来龙去脉。

集成学习

集成学习适合机器学习的几乎所有的领域:回归、分类、推荐、排序等等。
后文中:

1.什么是集成学习?

  • 在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不会这么理想。可能模型A在某个方面变现优于模型B,但模型B又不是处处都表现不好。也就是说:每个弱分类器具备一定的“准确性”,分类器之间具备“差异性”
  • 上面提到的模型A、B常被称为基学习器(注意,基学习器与弱学习器(weak learner)其实并不是同等概念,基学习器范围大于弱学习器)
  • 构建并结合多个学习器来完成学习任务,被称为集成学习。
  • 集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来

2.为什么理论上集成学习效果会更好?

  • 形象的说:集成学习的结果通过投票法(voting)产生,“少数服从多数”。也就是说,假设有5个若学习器,对于啊a,b,c三个事物的分类,分别有四个学习器结果相同,一个不相同。我们假设正确结果掌握在绝大多数“人”手中,那么投票会使得正确率由80%提升到100%
  • 抽象的说:【“西瓜”书P172、P173】
  • 总结:也就是我们常说的“博采众长”。

3.集成学习的思路、核心点、要点

  • 思路:通过迭代地训练一系列的分类器,每个分类器采用的样本的选择方式都和上一轮的学习结果有关。具体是如何关联的,不同的集成学习算法有不同的实现。
  • 集成学习的一个主要假设是:基学习器的误差相互独立。但是这可能吗?同一任务中的不同基学习器的目标是一样的,再次再次它们的误差也不可能相互独立。所以说,事实上每个基学习器的“准确率”和多样性是冲突的。如何产生并结合“好而不同”的基学习器,就是集成学习研究的核心。
    -可通过为每个基学习器拆分相互有一定交叉的子集,使得误差尽量大一些(但是不可完全独立的拆分子集)
  • 要点:
    每个基学习器好于“随机猜测”
    基学习器尽量误差相互独立
    基学习器各有优点,要有差异(Diversity)
    选用不同的基学习器

4.集成学习的大致阵营

  • 主要可以分为三大类,Boosting、Bagging、Stacking
  • 强依赖关系、必须串行生成的顺序方法(顺序构建多个学习器):Boosting(主要关注降低偏差)为代表
  • 不存在强依赖关系、可同时生成的并行化方法(主要是减少运算时间):Bagging(主要关注降低方差)、Stacking
  • Boosting的代表有AdaBoost, GBDT, XGBoost。而Bagging的代表则是随机森林 (Random Forest)。Stacking的

当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。当模型越简单时,即使我们再换一组数据,最后得出的学习器和之前的学习器的差别就不那么大,模型的方差很小。还是因为模型简单,所以偏差会很大。
(作者:于菲 链接:https://www.zhihu.com/question/45487317/answer/99153174)

5.集成学习之结合策略
参考[7]

6.集成学习的缺点

  • 计算复杂度大
  • 一般而言,所得到的模型比较难解释

boosting家族简述

在顺序方法中,我们顺序地构建多个学习器。在构建后面的学习器中,我们它能够“纠正”前面的学习器的错误,从而提高聚合后的准确度。
基于图形的理解见参考[3]

  • 思路:
    从初始训练集得到基学习器,根据其表现,对训练样本进行调整,后续计算中,之前分类错误的样本有较高的可能性被选到。(就像错题集,但是这里是把你的错题给其他人做,其他人多了,总会有人做对的。)然后拿调整后的样本训练下一个基学习器,直到达到预设的基学习器个数,最后再对这些个基学习器的结果进行加权求和。
  • 重采样与重赋权:
    1.Boosting算法要求基学习器能对特定数据分布进行学习,这可以通过”重赋权法“或者”重采样法“来处理。即在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重。对于无法接受带权重样本的基学习算法,可以通过“重采样法”来处理,即在每一轮学习中,根据样本分布对训练集合重新进行采样,再用重采样而得的样本集对基学习器进行训练。
    2.Boosting算法在训练的每一轮都要检查当前生成的基学习器是否满足设置的基本条件,如果不满足就直接抛弃当前基学习器,且学习过程停止。在这种情形下,初始设置的学习轮数T也许还远未达到,可能导致最终集成中只包含很少的基学习器而性能不佳。若采用“重采样”则可能获得**“重启动”的机会以避免训练过程过早停止**。即在抛弃不满足条件的当前基学习器之后,可以根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练出基学习器,从而使学习过程可以持续到预设的T轮完成
  • 从偏差-方差角度来看,Boosting主要关注降低偏差(广义的偏差(bias)描述的是预测值和真实值之间的差异,方差(variance)描述距的是预测值作为随机变量的离散程度)。因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。
  • Boosting方法的学习思想和模型结构上可以保证其不容易产生过拟合(除非Weak Learner本身出现过拟合)
    boosting家族之综合理论篇_第1张图片

boosting家族——AdaBoosting

1995年由Freund和Schapire提出。

算法推理:“西瓜”书175,或者此链接

整体思路之图片版:借用下涵子涵的图(兄dei,要不再练练字。。。)
boosting家族之综合理论篇_第2张图片

整体思路之文字版:http://www.52caml.com/head_first_ml/ml-chapter6-boosting-family/

最终模型的产出:

加大 分类误差率小 的弱分类器的权值,使其在表决中起较大的作用;减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

boosting家族——GBDT

梯度提升决策树(Gradient Boosting Decison Tree, 以下简称GBDT)
boosting tree(提升树)+ gradient boost(梯度提升算法)【提升树是迭代多棵回归树来共同决策。】

  • 概述:
    1.GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力较强的算法。GBDT中的树是回归树(不是分类树),GBDT用来做回归预测,调整后也可以用于分类。
    2.回顾下Adaboost,其利用前一轮迭代弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去。GBDT也是迭代,使用了前向分布算法,但是弱学习器限定了只能使用CART(分类与回归树)模型,同时迭代思路和Adaboost也有所不同

**参考[5]和参考[6]**真的写得很不错,我的实力“造”不出那样的轮子,推荐多次阅读
**参考[5]和参考[6]**真的写得很不错,我的实力“造”不出那样的轮子,推荐多次阅读
**参考[5]和参考[6]**真的写得很不错,我的实力“造”不出那样的轮子,推荐多次阅读

  • 要点
    GBDT中的回归树的每一个节点都会得一个预测值
    提升树是迭代多棵回归树来共同决策
    提升树利用加法模型和前向分步算法实现学习的优化过程。

boosting家族——XGBoost

与gbdt相比,具体的优点有:

1.损失函数是用泰勒展式二项逼近,而不是像gbdt里就是一阶导数
2.对树的结构进行了正则化约束,防止模型过度复杂,降低了过拟合的可能性
3.节点分裂的方式不同,gbdt是用的gini系数,xgboost是经过优化推导后的

gboost中的基学习器除了可以是CART(gbtree)也可以是线性分类器(gblinear)。下面所有的内容来自原始paper,包括公式。

。。。我真的看不下去了。。。
还是改天慢慢看参考[5]

这两天先具体的实践下XGBoost,实践调优的过程中慢慢回来补这部分的博客。

RandomForest 与 GBDT 的区别

相同点:

1.都由很多棵树组成

2.最终的结果是由多棵树一起决定的

不同点:

1.RandomForest中的树可以是分类树,也可以是回归树,而GBDT只能由回归树(CART)组成,这也说明GBDT各个树相加是有意义的

2.RandomForest中的树是并行生成的,而GBDT是串行生成的,GBDT中下一颗树要去拟合前一颗树的残差,所以GBDT中的树是有相关关系的,而RandomForest中的树的相关性依赖于Boostrap生成的样本子集的相关性

3.RandomForest 对异常值不敏感,GBDT敏感

4.RandomForest是通过降低模型方差来提高性能的,而GBDT是通过降低偏差来提高性能

参考

[1].《机器学习》-周志华
[2].《实用机器学习》-孙亮/黄倩
[3].博客园——机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting
[4]建议阅读此文,综合
[5]集成学习总结,综合
[6]博客园——梯度提升树(GBDT)原理小结
[7]博客园——集成学习的结合策略
[8]博客园——使用sklearn进行集成学习——理论

你可能感兴趣的:(Deep/Machine,Learning)