参考文献:
集成学习
1.概念
- 集成学习:通过多个多个学习器来完成学习任务,根据不同的集成方式可以分为boosting,bagging。
- 同质:如“决策树集成”(只包含决策树个体),集成中只包含同种类型的个体学习器。
- 弱学习器:泛化性能略优于随机猜想的学习器。
- boosting:个体学习器间存在强依赖关系,必须串行生成的序列方法。
- Bagging或随机森林:个体学习器不存在强依赖关系,可同时生成的并行化方法
- 集成学习的核心:如何产生并结合“好而不同”的个体学习器
集成学习分类:
- Bagging:训练多个同类型分类器,然后对结果取平均。(个体学习器之间无强依赖关系
- Boosting:对弱分类器加强,通过加权来训练。(学习器之间强依赖关系)
- Stacking:聚合多种分类/回归模型,对输出结果 逐层累加优化
2.Boosting(提升)
boost,顾名思义,就是一种增加、促进的意思。已经得到证明的是强学习和弱学习是等价的,对于已经发现了的“弱学习算法”,可以将其提升为(boost)为“强学习算法”。
而Boosting模型是一种前人栽树后人乘凉的算法它通过对weak learner中做错的训练样本多加关注并调整,然后生成下一个基学习器,不断迭代,直到学习器的数量达到预先设定的T个时停止,最终将这T个基学习器加权结合。经典Boosting方法有Adaboost、GDBT、Xgboost。2.0 概念
强可学习(strongly learnable):在概率近似正确学习的框架中,一个概念,如果一个多项式的算法能够学习它,并且正确率很高。
- 弱可学习(weakly learnable):在概率近似正确学习的框架中,一个概念,如果一个多项式的算法能够学习它,正确率仅比随机猜想略好。
-
2.1 AdaBoosting
全称:Adaptive Boosting 自适应增强算法
- 思想:带权学习(前人栽树,后人乘凉;后续学习器对前学习器的缺陷进行补充)
- 优点:
- 【最终性能强】Adaboost不像RF一样无脑并联,而是将后者的学习内容建立在前者的短板上。
- 2.【天花板高】Adaboost不像RF那样对输出结果求均值or众数,而是整合各个learner的输出结果,并在其基础上增加了权重。
- 缺点:
- 【性能起点低】对异常值、outlier很敏感
- 2.【计算速度慢】因为是后者需要不断改进前者,这种特殊的结果导致后者与前者无法并行计算。
- 权重更新策略:分类错误的样本的权重变好,分类正确的权重降低。
- 带权学习:根据样本的不同权重进行有侧重的学习
集学习算法不支持带权学习怎么办?可通过重采样法进行处理,可以做到和带权学习一样的效果。
2.2 GBDT
全称:Gradient Boosting Decision Tree (梯度提升决策树)
- 思想:利用损失函数的一阶导数模拟(替代)残差,对残差进行拟合,使得残差不断减小,最终取得较为准确的预测结果
- 基模型:boosting的基模型是弱分类器(欠拟合模型,高偏差,低方差)
- 对弱分类器的要求:足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度
- 方法:每一次建立模型是在之前建立模型损失函数的梯度下降方向
- 特点:
- 只需要求一阶导数
- 决策树是回归树,而不是决策树。
- 优点:
- 能灵活处理各种类型数据(包括离散值和连续值)
- 在有限的调参时间下,预测的准确度较高
- 缺点:
- 精度更高:GBDT 只用到一阶泰勒展开,而 XGBoost 对损失函数进行了二阶泰勒展开。XGBoost 引入二阶导一方面是为了增加精度,另一方面也是为了能够自定义损失函数,二阶泰勒展开可以近似大量损失函数;
- 灵活性更强:GBDT 以 CART 作为基分类器,XGBoost 不仅支持 CART 还支持线性分类器,(使用线性分类器的 XGBoost 相当于带 L1 和 L2 正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题))。此外,XGBoost 工具支持自定义损失函数,只需函数支持一阶和二阶求导;
- 正则化:XGBoost 在目标函数中加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、叶子节点权重的 L2 范式。正则项降低了模型的方差,使学习出来的模型更加简单,有助于防止过拟合;
- Shrinkage(缩减):相当于学习速率。XGBoost 在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间;
- 列抽样:XGBoost 借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算;
- 缺失值处理:XGBoost 采用的稀疏感知算法极大的加快了节点分裂的速度;
-
2.3.1 缺点
虽然利用预排序和近似算法可以降低寻找最佳分裂点的计算量,但在节点分裂过程中仍需要遍历数据集;
- 预排序过程的空间复杂度过高,不仅需要存储特征值,还需要存储特征对应样本的梯度统计值的索引,相当于消耗了两倍的内存。
2.4 LightGBM
LightGBM 由微软提出,主要用于解决 GDBT 在海量数据中遇到的问题,以便其可以更好更快地用于工业实践中。从 LightGBM 名字我们可以看出其是轻量级(Light)的梯度提升机(GBM),其相对 XGBoost 具有训练速度快、内存占用低的特点。
