#史上#最容易#图文理解#Xgboost

刚开始探索理解机器学习算法时,我会被所有数学内容弄得不知所措。我发现,如果没有完全理解算法背后的直觉,就很难理解其中的数学原理。所以,我会倾向于那些将算法分解成更简单、更易理解的步骤。这就是我今天尝试做的事情,以一种即使10岁小孩也能理解的方式来解释XGBoost算法。开始吧!

让我们从训练数据集开始,这个数据集包含了5个样本。每个样本记录了他们的年龄(AGE)、是否有硕士学位(MASTER’S DEGREE),以及他们的工资(SALARY)(以千为单位),目标是使用XGBoost模型预测工资。

图片

步骤1:做一个初步预测并计算残差

这个预测可以是任何值。但是让我们假设初步预测是我们想要预测的变量平均值。

图片

我们用如下公式计算残差(Residuals):

残差 = 观测值 − 预测值 残差 = 观测值 - 预测值 残差=观测值预测值

在这里,我们的观测值是 Salary 列中的值,所有预测值都等于 70(初始预测值)。

每个样本的残差值(Residuals)如下

图片

步骤2:构建XGBoost决策树

每棵树从一个根节点开始,所有的残差都进入那个该根节点。

图片

现在我们需要计算该根节点的相似度分数(Similarity Score)。

S i m i l a r i t y   S c o r e = ( S u m   o f   R e s i d u a l s ) 2 N u m b e r   o f   R e s i d u a l s + λ Similarity\ Score = \frac{(Sum\ of\ Residuals)^2}{Number\ of\ Residuals + \lambda} Similarity Score=Number of Residuals+λ(Sum of Residuals)2

其中Sum of Residuals的含义是残差的和,Number of Residuals的含义是残差的个数,λ(lambda)是一个正则化参数,它减少了预测对单个观测值的敏感性,并防止数据的过拟合(即模型完全符合训练数据集的情况)。λ的默认值是1,所以在这个例子中我们设λ=1。

在这里插入图片描述

现在我们应该看看,如果我们使用基于预测变量(年龄和硕士学位)的阈值将残差分成两组,是否能更好地聚类残差。拆分残差意味着为树添加分支。

首先,让我们尝试使用“是否有硕士学位?”来拆分这个叶子。

在这里插入图片描述

然后计算拆分后左右叶子节点的相似度分数:
在这里插入图片描述

现在通过“是否有硕士学位”将残差分成两组,并比较分裂前后的相似度。定义增益(Gain)为分裂后的相似度与分裂前的相似度之差,如果增益是正的,那么拆分是一个好主意,否则就不是。增益计算:

在这里插入图片描述

然后我们将这个增益与年龄的拆分增益进行比较。由于年龄是一个连续变量,找到不同拆分的过程有些复杂。首先,我们根据年龄的升序排列数据集的行,然后计算相邻年龄值的平均值。

在这里插入图片描述

现在我们使用这四个平均值作为阈值来拆分残差,并计算每个拆分的增益。第一个拆分使用年龄 < 23.5。

在这里插入图片描述

对于这个拆分,我们以与硕士学位相似的方式计算相似度分数和增益。

在这里插入图片描述

然后用同样的方法计算剩余的年龄拆分:

在这里插入图片描述

在所有的硕士学位拆分和四个年龄拆分中,“是否有硕士学位“拆分具有最大的增益值,因此我们将其作为我们的初始拆分。现在,我们可以通过再次使用上述描述的相同过程,将我们的硕士学位叶子拆分成更多分支。但是,这一次,我们将使用初始的硕士学位叶子作为根节点,并尝试通过获得大于0的最大增益值来拆分它们。

让我们从左节点开始。对于这个节点,我们只考虑是否有硕士学位?列中取值为“是”的观察值,因为只有这些观察值会落入左节点。

在这里插入图片描述

因此,我们使用与之前相同的过程来计算年龄拆分的增益,但这次只使用上图高亮显示的行中的残差。

在这里插入图片描述

由于只有年龄 < 25 给我们一个正增益,我们使用这个阈值来拆分左节点。

接下来,我们转向右节点,硕士学位取值为“否”的观察值。只计算下图高亮行的残差。

在这里插入图片描述

在右节点中我们只有两个观察值,所以唯一可能的拆分是年龄 < 24.5,因为这是高亮行中两个年龄值的平均值(高亮行的23和26)。

在这里插入图片描述

这个拆分的增益是正的,所以我们最终的树是:

在这里插入图片描述

步骤3:树修剪

树修剪是我们避免过度拟合数据的另一种方法。为了做到这一点,我们从树的底部开始,逐步向上查看拆分是否有效。为了确定有效性,我们使用 γ(gamma)。如果增益 (Gain)与γ的差 是正的,我们保留该拆分;否则,我们移除它。γ的默认值是0,但为了说明目的,让我们将γ设置为50。根据之前的计算,我们知道所有节点的增益值:

在这里插入图片描述

由于除了年龄 < 24.5 的拆分外,所有拆分的增益都大于γ ,我们可以移除那个分支。因此,最终的树结构是:

在这里插入图片描述

步骤4:计算叶子节点的值

由于叶子节点不能给出多个输出,因此需要根据叶子结点包含的样本值计算输出。

O u t p u t   V a l u e = S u m   o f   R e s i d u a l s N u m b e r   o f   R e s i d u a l s + λ Output\ Value = \frac{Sum\ of\ Residuals}{Number\ of\ Residuals + \lambda} Output Value=Number of Residuals+λSum of Residuals
其中Sum of Residuals的含义是残差的和,Number of Residuals的含义是残差的个数。

叶子结点输出值的计算类似于相似度分数,不过我们不会对残差进行平方。使用这个公式和 λ = 1,得到所有叶子结点的输出值:

在这里插入图片描述

步骤5:模型预测

现在,所有这些艰难的模型构建工作都已经完成,我们来到了令人兴奋的部分,看看我们的新模型如何改善我们的预测。我们可以使用下述公式进行预测。

在这里插入图片描述

如上图,70是模型的初始预测,是学习率,本文设置学习率为0.3。

因此第一个观测值的预测值(predicted value)是67.501。

70 + 0.3 ∗ ( − 8.33 ) = 67.501 70 + 0.3 *(-8.33) = 67.501 70+0.3(8.33)=67.501
同样地,我们可以计算其他观测值的预测值:

在这里插入图片描述

步骤6:计算新预测值的残差
在这里插入图片描述

我们发现新的残差比之前的小,这表明我们已经朝着正确的方向迈出了一小步。随着我们重复这个过程,我们的残差会变得越来越小,这表明我们的预测值逐渐接近观察到的值。

步骤7:重复步骤2-6

现在我们只需要一遍又一遍地重复这个过程:构建一棵新的树,进行预测,并在每次迭代中计算残差。我们会重复这个过程,直到残差变得非常小,或者我们达到了为算法设置的最大迭代次数。如果每次迭代构建的树用表示,其中i是当前迭代的次数,那么计算预测的公式是:

70 + ϵ x T 1 + ϵ x T 2 + ϵ x T 3 + . . . . . . + ϵ x T 1 i 70 + \epsilon xT_1 + \epsilon xT_2 + \epsilon xT_3 +......+ \epsilon xT_1i 70+ϵxT1+ϵxT2+ϵxT3+......+ϵxT1i
就是这样了!谢谢阅读,祝你在接下来的算法之旅中一切顺利!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Wiggles

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值