集成学习bagging,boosting,gbdt,xgboost比较和代码实现

【集成学习】

集成学习根据各个弱分类器之间有无依赖关系,分为Boosting和Bagging两大流派:
1. Boosting流派,各分类器之间有依赖关系,必须串行,比Adaboost、GBDT(Gradient Boosting Decision Tree)、Xgboost
2. Bagging流派,各分类器之间没有依赖关系,可各自并行,比如随机森林(Random Forest)

1.【bagging】boostrap

1. 优点:并行训练模型
2. 输出:
	* 分类:投票
	* 回归:每个模型取平均

3.特点:
* 有放回的随机采样,(每次大概会采样63%的样本)
* 不稳定—>适合作为基分类器
目标:降低方差

【随机森林】

bagging的扩展变体,样本有重复的采样+特征随机采样
1. 特点:
* 训练多个决策树以提升准确性,树的稳定性提升。
* 训练成本和预测成本增加
2. 场景:
* 分类:投票
* 回归:取平均

2.【boosting】

1. 目标:降低偏差
2. 特点:按顺序学习每个模型 / 弱模型--->组合成强模型
3. 分类:
	* adaboost
	* gradient boosting:

【GBDT(Gradient boosting decidion trees)】

1.原理:原理可以类比resnet, 每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差。设置η起到正则化的作用,避免过拟合,
在这里插入图片描述
2.代码实现
在这里插入图片描述

【XGBoost】

名为 X (Extreme) GBoosted,XGBoost的核心算法思想不难,基本就是:
1. 不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数f(x),去拟合上次预测的残差。
2. 当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数
3. 最后只需要将每棵树对应的分数加起来就是该样本的预测值。

对于一个叶子节点如何进行分裂:
XGBoost作者在其原始论文中给出了一种分裂节点的方法:枚举所有不同树结构的贪心法,不断地枚举不同树的结构,然后利用打分函数来寻找出一个最优结构的树,接着加入到模型中,不断重复这样的操作。这个寻找的过程使用的就是贪心算法。选择一个feature分裂,计算loss function最小值,然后再选一个feature分裂,又得到一个loss function最小值,你枚举完,找一个效果最好的,把树给分裂,就得到了小树苗。如何停止树的循环生成。

凡是这种循环迭代的方式必定有停止条件,什么时候停止呢?
简言之,设置树的最大深度、当样本权重和小于设定阈值时停止生长以防止过拟合

如何停止树的循环生成
凡是这种循环迭代的方式必定有停止条件,什么时候停止呢?简言之,设置树的最大深度、当样本权重和小于设定阈值时停止生长以防止过拟合。具体而言,则
1. 当引入的分裂带来的增益小于设定阀值的时候,我们可以忽略掉这个分裂,所以并不是每一次分裂loss function整体都会增加的,有点预剪枝的意思,阈值参数为(即正则项里叶子节点数T的系数);
2. 当树达到最大深度时则停止建立决策树,设置一个超参数max_depth,避免树太深导致学习局部样本,从而过拟合;
3. 样本权重和小于设定阈值时则停止建树。什么意思呢,即涉及到一个超参数-最小的样本权重和min_child_weight,和GBM的 min_child_leaf 参数类似,但不完全一样。大意就是一个叶子节点样本太少了,也终止同样是防止过拟合;

XGBoost与GBDT有什么不同
除了算法上与传统的GBDT有一些不同外,XGBoost还在工程实现上做了大量的优化。总的来说,两者之间的区别和联系可以总结成以下几个方面。
1. GBDT是机器学习算法,XGBoost是该算法的工程实现。
2. 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模 型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
3. GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代 价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
4. 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类 器,比如线性分类器。
5. 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机 森林相似的策略,支持对数据进行采样。
6. 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺 失值的处理策略。

代码实现

参考链接

https://www.cnblogs.com/mantch/p/11164221.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值