xgboost 和 gbdt的对比

xgboost 是gbdt的具体实现方案之一

1.gbdt的损失函数

1.1 回归损失函数: 均方损失函数、绝对值损失函数、huber损失函数(是均方损失函数 和 绝对值损失函数的折中)、分位数损失函数

1.2 分类损失函数:对数损失函数、指数损失函数

指数损失函数又分:二元分类和 多元分类

2.gbdt的正则化:

2.1 学习率,learning rate 在0到1之间

2.2 采样比例:subsample 取值范围是(0,1], 采样是无放回的采样,一般取值(0.5,0.8).子采样是为了减少过拟合,但是子采样会带来偏差。 

2.3 cart 树剪纸。

3. xgboost 比gbdt 的优势

3.1. 算法本身的优化:gbdt基模型是 CART决策树,xgboost 除了支持CART树之外,还支持线性分类器,可以使用L1和L2配合使用

      gbdt损失函数只对误差部分做了负梯度一阶导数展开,而xgboost 的损失函数增加了二阶导数,泰勒级数展开,这样更加准确。

     用用二阶导数的原因有2个:(1)可以加快收敛 (2)更加准确

3.2.健壮性的优化:对缺失值的处理,gbdt没有对缺失值做处理?xgboost 对缺失值,自动学习出缺失值的处理策略。

3.3.效率的优化:xgboost支持并行处理,这个并行不是在模型上的,而是在特征的并行上。

3.3.1:将特征排序后以block分组的形式存储在内存中,后面的排序会重复使用这个结构,这使得特征并行化成为了可能。

3.3.2:节点分裂的时候,计算每个特征的增益,最终分裂的时候选择增益最大的特征去做分裂。在 计算特征增益的时候,用贪心算法枚举所有的分裂点,会有并行计算。

3.4 最佳特征选取策略不同。GBDT遍历所有特征,XGBoost引入类似于RandomForest的列(特征)子采样,有利于防止过拟合与加速运算

### GBDTXGBoost的主要区别及对比分析 #### 1. 基本定义 GBDT(Gradient Boosting Decision Tree)是一种基于决策树的集成学习方法,其核心思想是通过迭代的方式逐步构建弱分类器并将其组合成强分类器。每次迭代都会根据前一次预测的结果计算残差,并尝试拟合这些残差来减少整体误差[^5]。 XGBoost则是GBDT的一种高效实现版本,由陈天奇博士开发,不仅继承了GBDT的核心思想,还在此基础上进行了多项优化,显著提高了模型的训练速度预测精度[^2]。 --- #### 2. 泰勒展开的应用 XGBoost在目标函数的设计中引入了二阶导数的信息,通过对损失函数进行泰勒展开近似处理,使得优化过程更加精确。这种做法能够更全面地捕捉数据中的非线性特性,从而提高模型的表现能力[^1]。 相比之下,传统的GBDT仅依赖于一阶导数(即梯度信息),忽略了更高阶的信息,在某些复杂场景下可能无法达到最优效果。 --- #### 3. 正则化项的加入 为了防止过拟合,XGBoost在其目标函数中加入了正则化项,包括L1正则化(Lasso)L2正则化(Ridge)。这有助于控制模型复杂度,使最终得到的模型更具泛化能力。 而标准的GBDT通常不显式包含这样的正则化机制,因此在面对噪声较多的数据集时可能会表现出较差的鲁棒性。 --- #### 4. 特征分裂策略 在节点划分过程中,XGBoost采用了更为精细的特征选择方式——它会综合考虑增益得分以及对应的代价因子,确保每一次分割都能带来最大的收益。此外,XGBoost支持稀疏感知分裂技术,对于含有缺失值的情况也能自动找到最佳切分点。 GBDT虽然也具备一定的特征重要性权重评估功能,但在实际操作层面往往显得较为简单粗暴,缺乏像XGBoost那样灵活高效的解决方案。 --- #### 5. 并行计算的支持 得益于底层C++框架的强大支撑,XGBoost充分利用多核CPU资源实现了列块级别的并行加速,大幅缩短了整个训练周期的时间消耗。与此同时,该工具包还兼容GPU硬件环境下的高性能运算模式,进一步拓宽了适用范围。 传统意义上的GBDT由于序列化的本质属性限制,难以直接利用现代计算机体系结构的优势来进行快速部署应用。 --- #### 6. 缺失值处理 当遇到样本存在部分字段为空的情形时,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, random_state=42) # 划分训练集测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 定义DMatrix对象供后续调用 dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test) # 设置参数配置字典 params = { 'objective': 'binary:logistic', 'eval_metric': 'error', 'max_depth': 6, 'eta': 0.3, } # 开始训练流程 bst = xgb.train(params=params, dtrain=dtrain, num_boost_round=100, evals=[(dtest,'eval')], early_stopping_rounds=10) ``` 上述代码片段展示了如何借助`xgboost`库完成基本建模任务的过程演示。 --- ### 总结 综上所述,尽管GBDT作为一种经典的机器学习算法已经取得了广泛的成功,但随着需求日益增长技术不断进步,人们迫切需要一种更快更强的新一代替代品。正是在这种背景下诞生出来的XGBoost凭借诸多技术创新成功脱颖而出成为当前最流行的开源项目之一[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值