什么是集成学习?
构建并结合多个学习器来完成学习任务;
主要分为两类:
基本学习器之间存在强依赖关系,必须串行执行的序列化方法——Boosting
基本学习器之间不存在强依赖关系,可同时生成的并行化方法——Bagging,随机森林
Boosting
1. 介绍 Boosting
Boosting 通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合。
Boosting 主要关注两个问题:
每一轮如何改变训练数据的权重
提高在前一轮被错误分类的样本的权重,降低在前一轮被正确分类的样本的权重
如何将多个弱分类器组合成一个强分类器
- AdaBoost 通过加权多数表决
- 提升树是在每一步将模型进行叠加
2. 介绍 Boosting 的代表算法:AdaBoost
训练数据的过程:将训练数据集中的每个样本赋予一个权值,开始的时候,权重都初始化为相等值;1)首先,在整个数据集上训练一个弱分类器,并计算错误率;2)在同一个数据集上再次训练一个弱分类器,在训练的过程中,权值重新调整,其中在上一次分类中分对的样本权值将会降低,分错的样本权值将会提高。3)重复上述过程,串行的生成多个分类器,为了从所有弱分类器中得到多个分类结果,为每个分类器分配一个权值alpha,这些alpha值是基于每个弱分类器的错误率计算的。
优缺点
- 优点:泛化错误率低,易编码,可以应该在大部分分类器上,无参数可调
- 缺点:对离群数据点敏感
3. 介绍 GBDT
3.1 回归树(DT:Decision Tree)
GBDT中的树全部都是回归树(不是分类树),核心就是累加所有树的结果作为最终结果。
GBDT调整之后可以用于分类问题,但是内部还是回归树。(回归树与分类树主要的区别在于特征选择,回归树用的是最小化均方误差,分类树用的是最小化 Gini 指数)
3.2 梯度迭代(GB:Gradient Boosting)
提升树(Boosting Tree)是一种加法模型,逐个学习每一个模型,每一次学习的数据是上一个模型的残差,GBDT的核心就是,每一棵树学习的是上一个模型的负向梯度。
梯度 Gradient 体现在:无论前面一棵树的 cost funtion 是什么,是均方差还是方差,是要它以误差作为衡量标准,那么负向梯度就是它的全局最优方向。
3.3 缩减(Shrinkage)
Shrinkage 是 GBDT 算法的一个重要的演进分支,目前大部分源码都是基于这个版本的。
核心思想:Shrinkage 认为每次走一小步来逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易防止过拟合。也就是说,它不信任每次学习到的残差,它认为每棵树只学习到了真理的一小部分,累加的时候只累加一小部分,通过多学习几棵树来弥补不足。
具体做法:仍然以 gradient 作为学习目标,但是对于 gradient 学习出来的结果,只累加一小部分(step*梯度)逐步逼近目标,step 一般都比较小(0.01 ~ 0.001),导致各个树的 gradient 是渐变而不是陡变的。
本质上,Shrinkage 为每一棵树设置了一个 weight,累加时要乘以这个 weight,但和 gradient 没有关系。这个 weight 就是 step。跟 AdaBoost 一样,Shrinkage 能减少过拟合是经验证明的,目前还没有理论证明。
3.4 GBDT 适用范围
- GBDT 可以用于回归问题(线性和非线性),相对 LR 仅能用于线性回归,GBDT 适用面更广
- GBDT 也可以用于二分类问题(设定阈值,大于为正,否则为负)和多分类问题
3.5 GBDT 相关问题
GBDT 相比于决策树有什么优点
泛化性能更好!GBDT 的最好的好处在于,每一步的 gradient 计算其实就是变相的增加了分类错误的权重,而已经分对的样本的 gradient 则都趋近于 0. 这样后面更加专注于那些分错的样本。
- 与传统 Boosting 的区别
不是对样本进行权值改变,而是改变么一轮的回归目标(上一个模型的预测残差)
- GBDT 的优缺点
优点:
- 能够灵活处理各种类型的数据,不需要特征归一化(LR 需要)
- 在相对较少的调参情况下,预测的准确率相对较高(相对 SVM)
- 与传统决策树相比,每一步的 gradient 计算相当于沿着最优的防线过去学习,变相增大了分类错误样本的权重,使用更少特征来进行决策,防止过拟合
缺点:
是一个串行过程,不能并行化,不适合线性模型
- GBDT 如何防止过拟合
限制树的棵树、设置学习率、设置每个叶子结点的最小节点数、增加惩罚想、基于 Bagging 思想进行抽样
Bagging
1. 介绍 Bagging
Bagging (bootstrap aggregating),套袋法,算法过程如下:
- 假设训练集中共有 N 个样本,每次从中有放回的抽取 N 次,这样就得到一个有 N 个样本的数据集;然后我们这样抽取 S 次,就得到 S 个有 N 个样本的数据集(一般来说取出的样本包含了 63% 的原始数据,有 36% 的数据没有被采样到)
- 对这 S 个数据集,训练 S 个模型
- 最后的结果:
- 分类问题:对 S 个模型采用投票表决的方式
- 回归问题:对 S 个模型的结果求均值
Bagging 的代表算法:随机森林
2. Bagging 的优点
- 高效。Bagging 集成与直接训练集学习器的复杂度同阶
- Bagging 能不经修改的适用于分类、回归任务
- 包外估计(out-of-bag estimate)。使用剩下来的 32% 的样本作为验证集
3. 介绍 Bagging 的代表算法:随机森林
随机森林(Random Forest)是 Bagging 的一个变体。它是以决策树为基学习器构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入随机属性选择。
原来的决策树从所有属性中,选择最优属性。Random Forest 的每一颗决策树中的每一个节点,先从该节点的属性集中随机选择 K 个属性的子集,然后从这个属性子集中选择最优属性进行划分。 K 控制了随机性的引入程度,是一个重要的超参数。
最后的预测结果:
- 分类问题:简单投票法
- 回归问题:简单平均法
4. 随机森林的优缺点
优点
- 由于每次不再考虑全部的属性,而是一个属性子集,所有相比 Bagging 计算开销更小,训练效率更高
- 由于增加了属性的扰动,随机森林中基学习器的性能降低,使得随机森林在起始时性能较差,但是随着基学习器的增多,随机森林通常会收敛于相比 Bagging 更低的泛化误差
- 两个随机性的引入,使得随机森林不容易过拟合,具有很好的抗噪声能力
- 对数据的适应能力强,可以处理离散和连续的值,不需要规范化
- 可以得到变量的重要性,基于 oob 误分类率和基于 Gini 系数的变化
缺点
- 在噪声较大的时候容易过拟合
Boosting 与 Bagging
1. Boosting 与 Bagging 的区别
区别主要在这 5 个方面:
样本选择上
- Boosting:每一轮训练集不变,只是训练数据的权重发生变化,权值是根据上一轮的分类结果进行调整的
- Bagging:训练集是在原始数据集中有放回选取的,从原始数据集选出的各轮训练集之间是独立的
样本权重
- Boosting:根据错误率不断调整样本的权值,错误分类的样本的权重更大
- Bagging:每个样本的权值一样
预测函数
- Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器有更大的权重
- Bagging:所有若分类器权重相等
并行计算:
- Boosting:串行执行,因为后一个模型的样本权重需要前一轮模型的结果
GBDT 与 随机森林
相同点
- GBDT 和 随机森林 都是有多棵树组成
- 最终的结果都由多棵树共同决定
不同点
- 组成随机森林的树可以是分类树或者回归树;GBDT 只能是回归树
- 组成随机森林的树可以并行生成(Bagging);GBDT 只能串行生成(Boosting)
- 对于最终的输出结果而言,随机森林使用多数投票或者简单平均;GBDT 通常是累加,或者加权累加
- 随机森林对异常值不敏感;GBDT 对异常值非常敏感
- 随机森林对训练集一视同仁权值一样;GBDT 是基于权值的弱分类器的集成
- 随机森林通过减小方差提高性能;GBDT 通过减少偏差提高性能
注:
Bagging + 决策树 = 随机森林
AdaBoost + 决策树 = 提升树
Gradient Boosting + 决策树 = GBDT
从偏差方差去对boosting和bagging进行理解
https://www.cnblogs.com/earendil/p/8872001.html
Reference
http://www.cnblogs.com/dudumiaomiao/p/6361777.html (基本介绍和区别)
http://gitbook.cn/books/5a31eb9a7cdec87af6d848a0/index.html#undefined (RF,GBDT)
https://blog.csdn.net/qq_34896915/article/details/73771287 (GBDT,XGBOOST)