xgboost 相比GBDT有什么区别

最近刚看完xgboost的paper,权当是 整理一下思路。
算法层面的:
1.XGB加了正则项,普通GBDT没有。为了防止过拟合

T为叶子节点的数量,W为叶子的权重。
Y帽子 为预测值,Y为目标值。
gamma ,delta 为参数

2.xgboost损失函数是误差部分是二阶泰勒展开,GBDT 是一阶泰勒展开。因此损失函数近似的更精准。

3.对每颗子树增加一个参数,使得每颗子树的权重降低,防止过拟合,这个参数叫shrinkage
对特征进行降采样,灵感来源于随机森林,除了能降低计算量外,还能防止过拟合。

4.实现了利用分捅/分位数方法,实现了全局和局部的近似分裂点算法,降低了计算量,并且在eps参数设置合理的情况下,能达到穷举法几乎一样的性能

5.提出并实现了特征带权重的分位数的方法(好像是用到rank 场景下的,没太懂。。。)
6.增加处理缺失值的方案(通过枚举所有缺失值在当前节点是进入左子树,还是进入右子树更优来决定一个处理缺失值默认的方向)。

系统层面:
7.对每个特征进行分块(block)并排序,使得在寻找最佳分裂点的时候能够并行化计算。这是xgboost比一般GBDT更快的一个重要原因。

8.通过设置合理的block的大小,充分利用了CPU缓存进行读取加速(cache-aware access)。使得数据读取的速度更快。因为太小的block的尺寸使得多线程中每个线程负载太小降低了并行效率。太大的block尺寸会导致CPU的缓存获取miss掉。

9. out-of-core 通过将block压缩(block compressoin)并存储到硬盘上,并且通过将block分区到多个硬盘上(block Sharding)实现了更大的IO 读写速度,因此,因为加入了硬盘存储block读写的部分不仅仅使得xgboost处理大数据量的能力有所提升,并且通过提高IO的吞吐量使得xgboost相比一般实利用这种技术实现大数据计算的框架更快。


### XGBoostGBDT的关系及差异 #### 关系 XGBoostGBDT (Gradient Boosting Decision Tree) 都属于提升树(Boosting Trees)家族的一部分。GBDT 是一种基于梯度下降思想构建的集成学习方法,而 XGBoost 则是在此基础上进行了优化和发展的一种高效实现方式[^1]。 #### 差异 ##### 计算效率方面 相比于传统的 GBDT 实现,XGBoost 提供了更高效的计算性能。这得益于其内部采用了更加先进的缓存机制、并行化处理以及硬件资源的有效利用策略。这些改进使得 XGBoost 可以更快地完成训练过程,在大规模数据集上表现尤为明显。 ##### 正则化项引入 为了防止过拟合现象的发生,XGBoost 明确加入了正则化项到目标函数之中。这一特性有助于提高模型泛化能力,并且可以通过调整参数来控制复杂程度。相比之下,标准版 GBDT 并未内置类似的显式正则化手段。 ##### 自动处理缺失值 当面对含有大量缺失特征的数据时,XGBoost 能够自动推断最佳分裂方向而不需额外预处理操作;而在传统 GBDT 中,则可能需要先填补或删除那些存在缺失情况下的样本记录才能继续建模工作。 ```python import xgboost as xgb from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split # 创建模拟分类数据集 X, y = make_classification(n_samples=1000, n_features=20) # 将数据分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25) # 定义DMatrix对象用于后续输入给XGBoost算法 dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test) param = { 'max_depth': 6, 'eta': 0.3, 'objective': 'binary:logistic', 'eval_metric': ['error', 'logloss'] } num_round = 100 bst = xgb.train(param, dtrain, num_round) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值