xgboost原理

本文深入探讨了XGBoost的核心组成部分,包括回归树作为基础学习器,树集成方法,以及梯度提升模型的学习过程。通过泰勒展开简化优化目标,并详细解释了如何使用贪心算法寻找分割点,以及剪枝和正则化的策略。内容基于陈天奇的研究论文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章主要参考了陈天奇的14年的slice[1],算是一个中文翻译+自我理解的笔记吧。

1.第一部分:

有监督学习包括三部分:模型、参数和优化目标。此部分略过不提。

2.第二部分:boosted tree

1. 回归树(base learner)

base learner是回归树,其决策规则与决策树(decision tree)类似,但是用来预测实数值,即每一个叶结点是一个实数,而不是如决策树那样的类标签。即使xgboost用于分类问题,其base learner依然是回归树,因为核心是树的结果的累加,分类标签显然是不可能累加的。(分到同一个叶子结点的训练样本的预测值不唯一的时候,以所有样本预测值的均值作为叶子结点输出的最终预测值)

rt.png

2. Tree Ensemble

base learner往往比较简单,预测能力有限,要用更强的模型-Tree Ensemble Method.通过base learner的共同决策来学习。这种思想应用广泛,gbrt,rf啊都用到了tree ensemble的方法。这种方法使得对特征不敏感,无需对特征进行归一化。
比如上边的例子,我们用两棵树来学习。

tree_ensemble.png
那么Tree Ensemble 严格的
[模型]:

tree ensemble model.png
可以把每一个回归树当成一个从特征空间到预测值的映射函数
[参数]:每个回归树的结构,以及叶结点上的值。此时,一般的参数是在实数,现在是functions(trees)

tree_ensemble_para.png
[优化目标]:如何学习参数,通过设计优化目标,并且去优化它而得到。

tree_ensemble_obj.png
不同的优化目标对应着不同的模型。
如果是平方损失,那就是普通的梯度渐进回归模型
square_loss.png

如果是Logistic损失,就是LogitBoost

logistic loss.png

3. Gradient Boosting(模型学习)

1.优化目标

我们不能采用如SGD这样的方式学习参数,因为参数不是数值型的向量,而是trees。我们采用additive training(boosting)的方式进行学习。每一次学习的时候保持原有模型不变,加入新的这一轮的 f(t)

boosting_1.png
如何得到每一轮加入的 f(t) ,方法是:选取一个 f(t) 来使得我们的目标函数尽量最大程度地降低

boosting_2.png
以平方损失为例,(第一步是讲抽象的损失函数替换成平方损失函数,
第二步,将 f(t) 当成变量, yi

<think>好的,用户想了解XGBoost的工作原理,属于机器学习算法方面的内容。我需要结合之前提供的引用资料来组织回答。首先,用户可能对集成学习有一定了解,但需要深入XGBoost的具体机制。 根据引用[2],XGBoost是基于Boosting思想的前向加法模型,将多个弱学习器组合成强学习器。每个弱学习器预测的是之前模型的残差,然后累加结果。这应该是XGBoost的核心机制,需要详细解释。 接下来,需要提到目标函数的构建。XGBoost的目标函数包括损失函数和正则化项,正则化控制模型复杂度,防止过拟合。这里可能需要数学公式,比如目标函数的形式:$Obj(\theta) = L(\theta) + \Omega(\theta)$,其中L是损失函数,Ω是正则项。 然后,关于梯度提升的具体步骤。引用[2]提到,XGBoost在每一步添加使目标函数下降最快的树。这里涉及到泰勒展开近似目标函数,计算一阶和二阶导数。可能需要写出泰勒展开后的表达式,比如$Obj^{(t)} \approx \sum_{i=1}^n [g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i)] + \Omega(f_t)$,其中g和h是梯度和二阶导数。 分裂节点的算法部分,XGBoost使用贪心算法,寻找最优分裂点。这里需要解释增益公式,比如$Gain = \frac{G_L^2}{H_L+\lambda} + \frac{G_R^2}{H_R+\lambda} - \frac{(G_L+G_R)^2}{H_L+H_R+\lambda} - \gamma$,并说明如何通过最大增益选择分裂特征和值。 还要提到工程优化,比如引用[3]中的直方图算法和并行学习,虽然LightGBM更强调这些,但XGBoost也有类似的处理,比如预排序和缓存优化,以加快计算速度。 最后,总结XGBoost的优势,比如高效、灵活、正则化等,并结合引用[1]中的内容,说明其在分类、回归、排序等任务中的应用。 用户可能需要进一步的细节,比如与其他算法(如LightGBM)的区别,或者实际应用案例。但当前问题主要聚焦在原理上,所以需要保持回答的结构清晰,逐步展开各个核心点,并适当使用数学公式和引用支持。</think>### XGBoost工作原理分步解析 XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升框架的高效机器学习算法,其核心原理可分为以下四个关键部分: #### 1. 加法模型与残差学习 采用**前向分步加法模型**,通过迭代生成$K$棵决策树实现预测: $$ \hat{y}_i = \sum_{k=1}^K f_k(x_i) $$ 每棵树的预测目标为前序模型的残差: $$ f_k(x_i) = y_i - \hat{y}_i^{(k-1)} $$ 这种残差学习机制使模型能逐步修正误差[^2]。 #### 2. 正则化目标函数 目标函数包含损失函数$L$和正则化项$\Omega$: $$ Obj(\theta) = \sum_{i=1}^n L(y_i, \hat{y}_i) + \sum_{k=1}^K \Omega(f_k) $$ 其中正则化项控制模型复杂度: $$ \Omega(f) = \gamma T + \frac{1}{2}\lambda||w||^2 $$ $T$为叶子节点数,$w$为叶子权重,$\gamma$和$\lambda$为超参数[^1]。 #### 3. 梯度提升与泰勒展开 通过泰勒二阶展开近似目标函数: $$ Obj^{(t)} \approx \sum_{i=1}^n \left[ g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i) \right] + \Omega(f_t) $$ 其中: - $g_i = \partial_{\hat{y}^{(t-1)}} L(y_i, \hat{y}^{(t-1)})$(一阶梯度) - $h_i = \partial_{\hat{y}^{(t-1)}}^2 L(y_i, \hat{y}^{(t-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值