XGBoost详解

本文深入解析XGBoost,它是陈天奇提出的梯度提升树系统,对GBDT做了算法和系统层面的改进。XGBoost在优化目标中引入二阶导数和正则项,处理缺失值,使用加权分位数草图算法加速训练。系统设计上,采用块结构和核外学习实现并行计算,提高效率。文章详述了优化目标函数、稀疏感知算法和加权分位数草图算法,并探讨了系统设计的并行计算策略。

原创:程祥国

1. XGBoost概述

XGBoost是陈天奇提出的一个端对端的梯度提升树系统,该算法在GBDT【关于GBDT这里不再展开叙述,可以参考李航老师统计学习方法一书中对该算法的讲述】的基础之上,在算法层面和系统设计层面都做了一些创新性的改进,可以把XGBoost看作是GBDT更好更快的实现。XGBoost在许多机器学习以及数据挖掘的任务中表现惊艳,2015年,kaggle竞赛平台上发布了29个挑战获胜的解决方案,其中17个解决方案用了XGBoost。由于XGBoost在实际任务中的良好表现,因此搞清XGBoost的实现细节对于在实践中应用XGBoost是非常有帮助的。因此本文基于陈天奇的论文XGBoost: A Scalable Tree Boosting System,详细阐述XGBoost的各种细节。

上述我们提到XGBoost在算法层面和系统设计层面都做了一些创新性的改进,我们首先将XGBoost的创新做一个总结:

算法层面

(1)在GBDT目标函数的基础上,在对优化目标求解的时候使用了二阶导数的信息,因此会使优化目标的定义更加精确,训练速度会更快;此外,XGBoost在优化目标函数中加入了正则项,这会限制模型的复杂度,防止过拟合的发生。

(2)提出了一种处理缺失值的算法,XGBoost能够自动对缺失值进行处理

(3)在树生成选择特征划分节点的时候,通过加权分位数草图算法,预先对每个特征建立候选的划分节点,不在使用原先的贪婪算法(遍历每个特征所有取值),从而大大加快训练速度

系统设计层面

(1)对训练的每个特征排序并且以块(block)的结构存储在内存中,方便后续训练迭代重复使用,减少计算量。对于不同的特征的特征划分点,XGBoost分别在不同的线程中并行选择分裂的最大增益,从而实现了并行训练。

(2)提出了一种有效的缓存感知块结构用于树模型的核外学习

下面我们将分别对上述5项进行分析。

2. 模型层面

2.1 优化目标函数

假设数据集D有n个样本m个特征:D=(xi,yi)(∣D∣=n,xiϵRm,yiϵR)D={(x_i,y_i)}(|D|=n,x_i \epsilon R^m,y_i \epsilon R)D=(xi,yi)(D=n,xiϵRm,yiϵR),树集成算法使用加法模型对K个基学习器进行合成,作为最终的预测输出。如图1所示。

图1:树集成模型,最终的预测结果为两棵树的和
图1:树集成模型,最终的预测结果为两棵树的和

为了使上述预测的结果尽可能的接近实际值,我们首先定义模型的优化目标函数,优化目标函数如下所示:
L(ϕ)=∑il(y‾i,yi)+∑Ω(fk)(1.1) L(\phi) = \sum_{i}l(\overline y_i,y_i)+\sum\Omega (f_k) \tag{1.1} L(ϕ)=il(yi,yi)+Ω(fk)(1.1)

∑Ω(fk)=γT+12λ∣∣ω∣∣2(1.2) \sum\Omega (f_k)=\gamma T +\frac{1}{2}\lambda||\omega||^2 \tag{1.2} Ω(fk)=γT+21λω2(1.2)

这里LLL是一个可微的凸损失函数,它表示预测y‾i\overline y_iyi和目标yiy_iyi之间的差值。T是每棵树叶子的数量,ω\omegaω表示模型对叶子节点的预测数值。第二项$\sum\Omega (f_k) 是惩罚项,限制回归树模型的复杂度。正则化项有助于使最终学习到的权值更加平滑,避免过拟合。直观地说,带有正则化的目标函数倾向于选择简单的预测模型。当第是惩罚项,限制回归树模型的复杂度。正则化项有助于使最终学习到的权值更加平滑,避免过拟合。直观地说,带有正则化的目标函数倾向于选择简单的预测模型。当第使t$颗树生成的时候,我们可以将公式1.1变成如下形式:
Lt=∑inl(y‾it−1+ft(xi),yi)+ L^t = \sum_{i}^{n}l(\overline y^{t-1}_i+f_t(x_i),y_i)+ Lt=inl(yit1+ft(xi),yi)+
γJ+12λ∑j=1Jωtj2(1.3) \gamma J +\frac{1}{2}\lambda \sum_{j=1}^{J}\omega_{tj}^2 \tag{1.3} γJ+21λj=1Jωtj2(1.3)

在公式1.3中,y‾it−1\overline y^{t-1}_iyit1是前t−1t-1t1颗树对样本iii的预测值,ft(xi)f_t(x_i)ft

贝叶斯优化(Bayesian Optimization, BO)是一种高效的全局优化方法,特别适用于代价高昂的黑盒函数优化问题。在机器学习中,它常用于超参数调优,尤其是在XGBoost等模型上,可以显著提升模型性能并减少调参时间。 ### 贝叶斯优化的基本原理 贝叶斯优化通过构建目标函数的概率模型(通常是高斯过程回归),并基于该模型选择下一个最有希望的超参数组合进行评估。其核心思想是利用**代理模型(Surrogate Model)**和**采集函数(Acquisition Function)**来平衡探索与利用之间的关系。 - **代理模型**:通常使用高斯过程(Gaussian Process, GP)建模目标函数的分布。 - **采集函数**:决定下一步应该尝试哪一组超参数,常见的有UCB(Upper Confidence Bound)、EI(Expected Improvement)等[^3]。 ### XGBoost 模型调参中的应用 XGBoost 是一个强大的梯度提升树模型,具有大量可调超参数,包括: - `learning_rate`:控制每一步的学习强度 - `max_depth`:树的最大深度 - `min_child_weight`:子节点最小权重和 - `subsample`:训练样本采样比例 - `colsample_bytree`:特征采样比例 - `n_estimators`:弱学习器数量 - `gamma`:分裂所需的最小损失下降值 - `reg_alpha`, `reg_lambda`:L1/L2正则化项系数 使用贝叶斯优化可以自动搜索这些参数的最优组合,避免手动调参的盲目性。 ### 实现方法 以下是一个使用 `BayesianOptimization` 库对 XGBoost 进行超参数调优的完整示例: ```python from xgboost import XGBRegressor from sklearn.model_selection import cross_val_score from bayes_opt import BayesianOptimization import numpy as np # 定义目标函数 def xgb_evaluate(learning_rate, max_depth, min_child_weight, subsample, colsample_bytree, gamma, reg_alpha, reg_lambda): params = { 'learning_rate': learning_rate, 'max_depth': int(max_depth), 'min_child_weight': min_child_weight, 'subsample': subsample, 'colsample_bytree': colsample_bytree, 'gamma': gamma, 'reg_alpha': reg_alpha, 'reg_lambda': reg_lambda, 'eval_metric': 'rmse', 'n_estimators': 100, 'random_state': 42 } model = XGBRegressor(**params) score = -cross_val_score(model, X_train, y_train, cv=5, scoring='neg_root_mean_squared_error').mean() return -score # 最大化目标函数 # 设置超参数搜索空间 pbounds = { 'learning_rate': (0.01, 0.3), 'max_depth': (3, 10), 'min_child_weight': (1, 10), 'subsample': (0.6, 1.0), 'colsample_bytree': (0.6, 1.0), 'gamma': (0, 10), 'reg_alpha': (0, 10), 'reg_lambda': (0, 10) } # 初始化优化器 optimizer = BayesianOptimization( f=xgb_evaluate, pbounds=pbounds, random_state=42 ) # 执行优化 optimizer.maximize(init_points=5, n_iter=30) ``` ### 优势与总结 相比传统的网格搜索(Grid Search)或随机搜索(Random Search),贝叶斯优化具有以下优势: - **高效性**:能更快地收敛到最优解,尤其适合高维搜索空间。 - **自适应性**:根据历史评估结果动态调整搜索方向,避免无效尝试。 - **泛化性**:不仅适用于XGBoost,还可扩展到LightGBM、CatBoost、神经网络等模型的调参任务中[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值