Adaboost&GBDT&Xgboost&LightGBM&CatBoost
- 总体来说,boosting算法还是需要大量的数据集的,因为模型相对于单一的学习器来说还是比较复杂的,数据简单就更不能用subsample了
0简介
0.0发展史
年份 | 算法/理论 | 成就/改进 |
---|---|---|
1988 | General Boosting | 先前的弱评估器上预测错误的样本应该在后续得到更多关注 |
1997 | AdaBoost | 从0到1,首次在工程上实现了boosting理论 确立了决策树作为弱评估器,生长规则为C4.5 自适应地调整数据分布 自适应地计算每个弱分类器的权重 |
2000 | GBDT 在ADB基础上改进 | 更新损失函数
L
(
x
,
y
)
L(x,y)
L(x,y),在数学流程上推广到任意可微函数 放弃调整数据分布、放弃弱分类器权重 自适应地调整后续弱评估器拟合的目标 |
2014 | XGBoost 在GBDT基础上改进 | 更新损失函数
L
(
x
,
y
)
L(x,y)
L(x,y),在损失函数中加入正则项 改进弱评估器 f ( x ) f(x) f(x)生长规则,自适应地调整后续弱评估器的结构 改进拟合中的数学过程,提升拟合精度 首次在工程上实现了boosting树的并行,提升运算速度 支持GPU加速 |
2016 | LGBM 在GBDT基础上改进 受XGBoost启发 | 改进弱评估器
f
(
x
)
f(x)
f(x)生长规则,自适应地调整后续弱评估器的结构 设计了适合于GBDT的数据分布调整方式GOSS,自适应地调整数据分布 设计了加速弱分类器分枝的计算方式EFB,在工程上大幅度降低了运算时间与内存消耗 支持GPU加速 |
2017 | CatBoost 在GBDT基础上改进 受XGBoost启发 | 改进弱评估器
f
(
x
)
f(x)
f(x)生长规则,自适应地调整后续弱评估器的结构 设计了适用于梯度下降的弱分类器权重调整方式,自适应地调整弱分类器的权重 改进离散型变量的分枝方式,提升拟合精度 支持GPU加速 |
0.1 经典文章链接/文章总结链接
GBDT算法推导-------刘建平
XGBoost 知乎答主写的这一篇太棒了
XGBoost算法参数---------刘建平
GBDT和XGBoost区别
B站菜菜的机器学习
0.2 bagging和boosting
-
bagging实际上本质就是通过单一的弱模型通过加权或投票等(可以并行)的方式生成新的强学习器,我们常见的还是通过多个决策树级集成形成的强学习器随机森林,本质上和模型融合相似,不过模型融合主要是融合不同的模型,也就是多种模型集成形成的集成模型。
-
boosting是通过若干个弱评估器通过递进的方式集成形成的强学习器,bagging可能是由多个强学习器组成弱评估器,boosting是弱评估器,效果为啥在一定程度上比bagging更加有效?是因为boosting还是通过想着损失函数极小化方向进行,虽然说是弱评估器,叠加起来却能很好的拟合结果,并在一定程度上抗过拟合的发生,但是也不能说不可能发生过拟合,毕竟boosting算法是较为复杂的学习器,在样本数据集简单时还是很容易发生过拟合的现象,抗过拟合的能力还是相对于bagging特别是随机森林来说的。
-
Boosting PK Bagging
装袋法 Bagging | 提升法 Boosting | |
---|---|---|
弱评估器 | 相互独立,并行构建 | 相互关联,按顺序依次构建 先建弱分类器的预测效果影响后续模型的建立 |
建树前的抽样方式 | 样本有放回抽样 特征无放回抽样 | 样本有放回抽样 特征无放回抽样 先建弱分类器的预测效果可能影响抽样细节 |
集成的结果 | 回归平均 分类众数 | 每个算法具有自己独特的规则,一般来说: (1) 表现为某种分数的加权平均 (2) 使用输出函数 |
目标 | 降低方差 提高模型整体的稳定性来提升泛化能力 本质是从“平均”这一数学行为中获利 | 降低偏差 提高模型整体的精确度来提升泛化能力 相信众多弱分类器叠加后可以等同于强学习器 |
单个评估器容易 过拟合的时候 | 具有一定的抗过拟合能力 | 具有一定的抗过拟合能力 |
单个评估器的效力 比较弱的时候 | 可能失效 | 大概率会提升模型表现 |
代表算法 | 随机森林 | 梯度提升树,Adaboost |
在以随机森林为代表的Bagging算法中,我们一次性建立多个平行独立的弱评估器,并让所有评估器并行运算。在Boosting集成算法当中,我们逐一建立多个弱评估器(基本是决策树),并且下一个弱评估器的建立方式依赖于上一个弱评估器的评估结果,最终综合多个弱评估器的结果进行输出,因此Boosting算法中的弱评估器之间不仅不是相互独立的、反而是强相关的,同时Boosting算法也不依赖于弱分类器之间的独立性来提升结果,这是Boosting与Bagging的一大差别。如果说Bagging不同算法之间的核心区别在于靠以不同方式实现“独立性”(随机性),那Boosting的不同算法之间的核心区别就在于上一个弱评估器的评估结果具体如何影响下一个弱评估器的建立过程。
与Bagging算法中统一的回归求平均、分类少数服从多数的输出不同,Boosting算法在结果输出方面表现得十分多样。早期的Boosting算法的输出一般是最后一个弱评估器的输出,当代Boosting算法的输出都会考虑整个集成模型中全部的弱评估器。一般来说,每个Boosting算法会其以独特的规则自定义集成输出的具体形式,但对大部分算法而言,集成算法的输出结果往往是关于弱评估器的某种结果的加权平均,其中权重的求解是boosting领域中非常关键的步骤。
并使用 L ( x , y ) L(x,y) L(x,y)自适应地影响下一个弱评估器 f ( x ) t f(x)_t f(x)t的构建。
集成模型输出的结果,受到整体所有弱评估器 f ( x ) 0 f(x)_0 f(x)0 ~ f ( x ) T f(x)_T f(x)T的影响。
0.3 简记
0.3.0 mean_squared_error
sklearn.metrics.mean_squared_error( y_true, # 真实值
y_pred, # 预测值
squared=True,
# True 表示MSE均方误差
# False 表示RMSE均方根误差
)
1 Adaboost
https://blog.csdn.net/weixin_54884881/article/details/126001037?spm=1001.2014.3001.5502
2 GBDT
https://blog.csdn.net/weixin_54884881/article/details/126000988?spm=1001.2014.3001.5502
3 Xgboost
https://blog.csdn.net/weixin_54884881/article/details/126004133
LightGBM
CatBoost
6 问题
6.1 RF和GBDT之间区别
6.2 XGBoost和GBDT之间区别