提示:这些是自己整理 可以借鉴 也可能存在错误 欢迎指正
“三个臭皮匠赛过诸葛亮”
集成学习
(Ensemble Learning)就是通过某种策略将多个模型集成起来,通过群体决策来提高决策准确率.
困难点:
一个有效的集成需要各个基模型的差异尽可能大.为了增加模型之间的差异性,可以采取Bagging
和Boosting
这两类方法。
Bagging 类方法是通过随机构造训练样本、随机选择特征等方法来提高每个基模型的独立性,代表性方法有Bagging 和随机森林等
通过不同模型的训练数据集的独立性
来提高不同模型之间的独立性.
在原始训练集上进行有放回的随机采样
,得到 个比较小的训练集并训练 个模型,然后通过投票的方法进行模型集成.
在Bagging的基础上再引入了随机特征
,进一步提高每个基模型之间的独立性.
在随机森林中,每个基模型都是一棵决策树.
Boosting 类方法是按照一定的顺序来先后训练不同的基模型,
每个模型都针对前序模型的错误进行专门训练.根据前序模型的结果,来调整训练样本的权重,从而增加不同基模型之间的差异性.
Boosting 类方法是一种非常强大的集成方法,只要基模型的准确率比随机猜测高,就可以通过集成方法来显著地提高集成模型的准确率.
Boosting 类方法的代表性方法有AdaBoost[Freund et al., 1996] 、GBDT/GBRT、XGBoost和LightGBM等
.假设已经训练了 个弱分类器,在训练第第 + 1 个弱分类器时,增加已有弱分类器分错样本的权重,使得第 + 1 个弱分类器“更关注”于已有弱分类器分错的样本.
.这样增加每个弱分类器的差异,最终提升集成分类器的准确率.这种方法称为AdaBoost(Adaptive Boosting)算法.
XGBoost
LightGBM
------------- | Value | LightGBM |
---|---|---|
树木生长算法 | 按层生长的方式有利于工程优化,但对学习模型效率不高 | 直接选择最大收益的节点来展开,在更小的计算代价上去选择我们需要的决策树控制树的深度和每个叶子节点的数据量,能减少过拟合 |
划分点搜索算 法 | 对特征预排序的方法 | 直方图算法:将特征值分成许多小筒,进而在筒上搜索分裂点,减少了计算代价和存储代价,得到更好的性能。另外数据结构的变化使得在细节处的变化理上效率会不同 |
内存开销 | 8个字节 | 1个字节 |
划分的计算增益 | 数据特征 | 容器特征 |
高速缓存优化 | 无 | 在Higgs数据集上加速40% |
类别特征处理 | 无 | 在Expo数据集上速度快了8倍 |
总结起来,LightGBM相较于XGBoost的提升主要在于:
支持类别特征,无需one-hot编码;
采用叶节点分裂而非层分裂,学习精度更高;
GOSS(基于梯度的单边采样),对海量学习数据,根据其梯度,筛除绝大部分的小梯度样本(几乎无更新作用),保持精度的同时加快速度;
EFB(独立特征合并),针对海量稀疏数据,根据数据间的冲突度(如cos夹角,0101和1010的冲突很小,因为非零位不相同,非零位不相同的占比越高,冲突度越少),对冲突度小的特征进行合并,变稀疏矩阵为稠密矩阵,减少特征维度;
在直方图加速算法中,支持直方图减法,对下一层样本的直方图绘制,减少时间(右孩子直方图=父节点直方图-左孩子直方图);
优化了多线程加速问题。
Bagging 和 Boosting 两种常用的集成学习方法对比:
过拟合
的弱学习器来获得更好的效果。欠拟合
的弱学习器来获得更好的效果。