集成学习方法概述
Bagging
从训练集中进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果:
假设一个班级每个人的成绩都不太好,每个人单独做的考卷分数都不高,但每个人都把自己会做的部分做了,把所有考卷综合起来得到成绩就会比一个人做的高
Boosting
训练过程为阶梯状,基模型按次序一一进行训练(实现上可以做到并行),基模型的训练集按照某种策略每次都进行一定的转化。对所有基模型预测的结果进行线性综合产生最终的预测结果。
Stacking
将训练好的所有基模型对训练基进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测。
Random Forest(随机森林)
用随机的方式建立一个森林。随机森林算法由很多决策树组成,每一棵决策树之间没有关联。建立完森林后,当有新样本进入时,每棵决策树都会分别进行判断,然后基于投票法给出分类结果。
- 优点
在数据集上表现良好,相对于其他算法有较大的优势
易于并行化,在大数据集上有很大的优势;
能够处理高维度数据,不用做特征选择。
Random Forest(随机森林)是 Bagging 的扩展变体,它在以决策树为基学习器构建Bagging 集成的基础上,进一步在决策树的训练过程中引入了随机特征选择,因此可以概括 随机森林包括四个部分:
- 随机选择样本(放回抽样);
- 随机选择特征;
- 构建决策树;
- 随机森林投票(平均)。
随机选择样本和 Bagging 相同,采用的是Bootstraping 自助采样法;随机选择特征是指在每个节点在分裂过程中都是随机选择特征的(区别与每棵树随机选择一批特征)。
这种随机性导致随机森林的偏差会有稍微的增加(相比于单棵不随机树),但是由于随机森林的“平均”特性,会使得它的方差减小,而且方差的减小补偿了偏差的增大,因此总体而言是更好的模型。
AdaBoost算法
AdaBoost(Adaptive Boosting,自适应增强),其自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
用一句话概括该思想就是后一个模型的训练永远是在前一个模型的基础上完成
- 算法思想
• 初始化训练样本的权值分布,每个样本具有相同权重;
• 训练弱分类器,如果样本分类正确,则在构造下一个训练集中,它的权值就会被降低;反之提高。用更新过的样本集去训练下一个分类器;
• 将所有弱分类组合成强分类器,各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,降低分类误差率大的弱分类器的权重。
GBDT算法
GBDT(Gradient Boosting Decision Tree)是一种迭代的决策树算法,该算法由多棵决策树组成,GBDT 的核心在于累加所有树的结果作为最终结果,所以 GBDT 中的树都是回归树,不是分类树,它是属于 Boosting 策略。GBDT 是被公认的泛化能力较强的算法。
- GBDT 由三个概念组成:Regression Decision Tree(即 DT)、Gradient Boosting(即 GB),和 Shrinkage(缩减)
损失函数的负梯度在当前模型的值作为提升树的残差的近似值来拟合回归树
XGBoost
XGBoost 是大规模并行 boosting tree 的工具,它是目前最快最好的开源 boosting tree 工具包
,比常见的工具包快 10 倍以上。XGBoost 和GBDT 两者都是 boosting 方法,除了工程实现及解决问题上的一些差异外,最大的不同就是目标函数的定义。
- XGBoost的分裂方式
使用贪心方法,选增益( 𝑔𝑎𝑖𝑛 )最大的分裂方式。
贪心方法,众多𝑔𝑎𝑖𝑛中找到最大值做为最优分割节点(split point),因此模型会将所有样本按照(一阶梯度)从小到大排序,通过遍历,查看每个节点是否需要分割,计算复杂度是:决策树叶子节点数 – 1。
LightGBM
由微软提出,主要用于解决 GDBT 在海量数据中遇到的问题,以便其可以更好更快地用于工业实践中,其相对 XGBoost 具有训练速度快、内存占用低的特点。
-
LightGBM与XGBoost相比,主要有以下几个优势:
1)更快的训练速度
2)更低的内存消耗
3)更好的准确率
4)分布式支持,可快速处理海量数据 -
LightGBM 的主要改进
LightGBM与XGBoost相比,主要有以下几个改进:
• 基于梯度的单边采样算法(Gradient-based One-Side Sampling, GOSS);
• 互斥特征捆绑算法(Exclusive Feature Bundling, EFB);
• 直方图算法( Histogram );
• 基于最大深度的 Leaf-wise 的垂直生长算法;
LightGBM = XGBoost + GOSS + EFB+ Histogram
基于梯度的单边采样算法(Gradient-based One-Side Sampling, GOSS)
主要思想是通过对样本采样的方法来减少计算目标函数增益时候的复杂度。
GOSS 算法保留了梯度大的样本,并对梯度小的样本进行随机抽样,为了不改变样本的数据分布,在计算增益时为梯度小的样本引入一个常数进行平衡。
如果一个样本的梯度很小,说明该样本的训练误差很小,或者说该样本已经得到了很好的训练(well-trained)。
- 算法思想
输入:训练数据,迭代步数d,大梯度数据的采样率a,小梯度数据的采样率b,损失函数和若学习器的类型(一般为决策树)
输出:训练好的强学习器
(1)根据样本点的梯度的绝对值对它们进行降序排序;
(2)对排序后的结果选取前a*100%的样本生成一个大梯度样本点的子集;
(3)对剩下的样本集合(1-a)*100%的样本,随机的选取b *(1-a)*100%个样本点,生成一个小梯度样本点的集合;
(4)将大梯度样本和采样的小梯度样本合并;
(5)将小梯度样本乘上一个权重系数1−𝑎𝑏 ;
(6)使用上述的采样的样本,学习一个新的弱学习器;
(7)不断地重复(1)~(6)步骤直到达到规定的迭代次数或者收敛为止。
互斥特征捆绑算法(Exclusive Feature Bundling, EFB)
高维特征往往是稀疏的,而且特征间可能是相互排斥的(如两个特征不同时取非零值),如果两个特征并不完全互斥(如只有一部分情况下是不同时取非零值),可以用互斥率表示互斥程度。EFB算法指出如果将一些特征进行融合绑定,则可以降低特征数量。
论文给出特征合并算法,其关键在于原始特征能从合并的特征中分离出来
直方图算法
直方图算法的基本思想是将连续的特征离散化为𝑘个离散特征,同时构造一个宽度为𝑘的直方图用于统计信息(含有 𝑘 个 bin)。利用直方图算法我们无需遍历数据,只需要遍历 𝑘 个 bin 即可找到最佳分裂点。
- 直方图加速
在构建叶节点的直方图时,我们还可以通过父节点的直方图与相邻叶节点的直方图相减的方式构建,从而减少了一半的计算量。即:一个叶子节点的直方图可以由它的父亲节点的直方图与其兄弟的直方图做差得到。如节点分裂成两个时,右边叶子节点的直方图等于其父节点的直方图减去左边叶子节点的直方图。从而大大减少构建直方图的计算量