集成学习是通过多个基学习器的预测结果来优化模型的拟合能力与泛化能力,其中主要分为两大类:一种是基学习器之间存在强依赖关系,使用串行化训练,例如Boosting;另一种是基学习器之间不存在依赖关系,可使用并行化训练,例如Bagging和随机森林。
1、随机森林
Bagging集成学习方法的特点是有放回的抽样,训练多个基学习器,多数表决或简单平均,随机森林属于Bagging方法的变体,其训练过程没有强依赖关系。
- 步骤
- 随机选择样本(有放回的抽样)
- 随机选择特征属性
- 构建决策树
- 进行平均投票,防止过拟合
- Bagging与随机森林的区别
Bagging在训练的时候会考虑所有的特征,而随机森林会随机选择特征子集,随机森林的初始性能较差,但随着基学习器增多,其性能效率都优于Bagging - 优点
a)随机森林算法能解决分类与回归两种类型的问题
b)随机森林对于高维数据集的处理能力很好
c) 可以应对缺失数据
d)随机森林处理分类不平衡的数据时更加有效
e ) 高度并行化,易于分布式实现
f) 由于是树模型 ,不需要归一化即可之间使用 - 缺点
a) 随机森林不能给出一个连续型的输出,所以回归问题上效果不好,并且随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。
b) 随机森林的可解释性差
c) 忽略属性之间的相关性
2、GBDT
梯度提升决策树是一种Boosting的算法,是通过关注上一轮中错分的数据来获得新的分类器,并且每一轮选脸的CART数的权重代表着上一轮迭代的成功度。
- 梯度方向
GBDT的每一个新模型的建立都是为了使之前模型的残差往梯度减少,梯度是损失函数对预测值的导数。
算法步骤 - 与Boosting Tree的区别
Boosting Tree适合于损失函数为平方损失或者指数损失。而Gradient Boosting适合各类损失函数(损失函数为平方损失则相当于Boosting Tree拟合残差、损失函数为指数损失则可以近似于Adaboost,但树是回归树)
3、XGBoost
- 原理上
- XGBoost也是拟合数据的残差,但是它是用泰勒展开式对模型的损失函数进行近似,并且使用一阶和二阶导数
- 传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归)
- XGBoost在代价函数中加入了正则项,用于控制模型的复杂度
- 工具上
- 使用了缩减(学习率),削弱每棵树的影响,让后面有更大的学习空间
- 列采样
- 对缺失值的处理,分别将缺失该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向归类含缺失值样本,如果训练集没有缺失值而测试集出现缺失值,则要为缺失值(或者指定的值未出现的值)指定分支的默认方向,预测时自动将缺失值的划分到这一分支。
- 支持并行,每次分裂的时候特征增益计算时使用并行计算
- 缺点
- level-wise建树方式对当前层的所有叶子结点进行分类,有的叶子分裂的收益较少
- 与排序的方式空间消耗与时间消耗都很大
4、lightGBM
- 原理上
- 使用基于histogram的决策树算法
- 工具上
- 使用leaf-wise建树方式,减少了收益小的叶子分裂,但会引起过拟合,所以需要限制树的最大深度
- 使用直方图进行描述数据时,不需要像预排序算法那样记录所有数据排序后的序列,并且bin的数值相对于原数据在存储上使用更少的空间
- 直方图做差加速
- 支持直接输入类别特征
- 单边采样算法