Boosting 和 Gradient Boosting 理解

本文深入讲解了Boosting的思想,特别是GradientBoosting作为一种模型优化方法的工作原理。它通过将模型分解为可加形式,并进行多次迭代来减少损失函数,最终通过加权合并多个弱模型形成强大的预测模型。

Boosting主要是一种思想,表示“知错就改”。而Gradient Boosting是在这个思想下的一种函数(也可以说模型)的优化方法,首先将函数(模型)分解为可加的形式(其实所有的函数都是可加的,只是是否好放在这个框架中,以及最终的效果如何)。然后进行m次迭代,通过使得损失函数在梯度上减少,最终得到一个优秀的模型。值得一提的是,每次模型在梯度方向上减少的部分,可以认为是一个“小”或者"弱"的模型,最终我们会通过加权(也就是每次在梯度方向上下降的距离)的方式将这些弱的模型合并起来,形成一个更好的模型。


通用的Gradient Descent Boosting的框架:


写成梯度下降的方式就是下面的形式,也就是我们将要得到的模型fm(x)的参数{am,bm}能够使得fm的方向是之前得到的模型Fm-1(x)的损失函数下降最快的方向:


### Gradient Boosting与XGBoost的关系及区别 Gradient Boosting是一种通用的提升方法,它通过迭代的方式逐步构建模型来最小化损失函数。这种方法的核心思想在于每次训练一个新的弱学习器去拟合之前模型的残差[^1]。 XGBoost(Extreme Gradient Boosting)是对传统Gradient Boosting算法的一种优化实现。它的主要改进体现在以下几个方面: #### 1. **目标函数的设计** XGBoost引入了一个更加灵活的目标函数设计方式,允许用户自定义损失函数。此外,XGBoost还在目标函数中加入了正则项,用于控制模型复杂度,从而减少过拟合的风险。具体来说,其目标函数形式为: \[ \text{Obj}(\theta) = L(y, \hat{y}) + \Omega(f_k), \] 其中 \(L\) 是损失函数,\(\Omega\) 是正则化项[^2]。 #### 2. **分裂增益计算** 在树结构的选择上,XGBoost采用了一种更精确的方法来评估候选节点分裂的质量。它基于二阶泰勒展开近似计算分裂增益,使得即使面对复杂的非凸损失函数也能高效工作。这种技术显著提高了模型性能收敛速度[^3]。 #### 3. **稀疏感知分割** 针对数据中的缺失值或稀疏特性,XGBoost实现了特殊的处理机制——即所谓的“默认方向”。这意味着当遇到某个特征存在大量缺失值的情况时,算法能够自动决定最佳路径分配策略而不需额外预处理步骤[^4]。 #### 4. **并行化与分布式支持** 尽管单棵树的增长过程本质上是串行操作,但XGBoost充分利用了现代硬件资源,在多个层面实现了高效的并行运算。例如,它可以利用CPU多线程加速直方图统计;同时也提供了强大的分布式框架以便于大规模集群环境下的部署应用[^5]。 以下是两者的对比总结表: | 特性 | Gradient Boosting | XGBoost | |---------------------|--------------------------------------|----------------------------------| | 正则化 | 不具备显式的正则化手段 | 增加了L1/L2正则化选项 | | 缺失值处理 | 需要提前填充或者丢弃 | 自动识别并合理安排缺省分支 | | 并行能力 | 较低 | 支持高度并行化的内部组件 | | 用户可配置参数 | 少 | 提供丰富的调参空间 | ```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, n_informative=15, 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', 'eta': 0.1, 'max_depth': 6, 'lambda': 1, 'alpha': 0.1 } # 训练模型 bst = xgb.train(params=params, dtrain=dtrain, num_boost_round=100, evals=[(dtest,'eval')], early_stopping_rounds=10) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值