如何向10岁小孩解释XGBoost回归算法

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

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

image-20240713183042081

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

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

image-20240713183454659

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

残差观测值预测值

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

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

image-20240713183719781

步骤2:构建XGBoost决策树

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

image-20240713184016874

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

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

image-20240713190458782

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

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

image-20240713190729979

然后计算拆分后左右叶子节点的相似度分数:

image-20240713190840994

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

image-20240713191309635

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

image-20240713191530851

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

image-20240713191747058

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

image-20240713191842650

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

image-20240713191912685

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

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

image-20240713192319459

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

image-20240713192426375

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

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

image-20240713192638507

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

image-20240713192743467

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

image-20240713193339880

步骤3:树修剪

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

image-20240713193650700

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

image-20240713194256016

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

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

image-20240713194522667

其中Sum of Residuals的含义是残差的和,Number of Residuals的含义是残差的个数。

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

image-20240713194853250

步骤5:模型预测

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

image-20240713195115030

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

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

image-20240713195341693

同样地,我们可以计算其他观测值的预测值:

image-20240713195454778

步骤6:计算新预测值的残差

image-20240713195540219

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

步骤7:重复步骤2-6

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

image-20240713195745800

就是这样了!谢谢阅读,祝你在接下来的算法之旅中一切顺利!

欢迎扫码关注:

相关推荐

  • 两份报告:AIGC APP流量与场景研究+AI行业设计领域
  • OpenAI披露AGI评估标准,目前接近第2级
  • 私活必备,一个react+vite+antd的标准后台管理系统开发模版,动态菜单配置、权限精确到按钮
  • 老外整了个领先的幻觉检测模型Lynx
  • 孟晚舟:不要选择和机器竞争的职业,萝卜无人车会是特洛伊木马吗?
  • 复旦教授:当初脑子一定被驴踢了,不然怎么会上这帮龟孙子的当
  • 成都周报 | 174亿最大重组案获批,首批未来产业天使子基金签约
  • 一家半导体研发商融了三个亿丨投融周报
  • 这几个Python效率工具非常好用~
  • 枪手射8发子弹!观众1死2伤!特朗普遭枪击事件细节披露
  • 聊一聊ES2024有啥新特性
  • 【文末赠书】大模型时代,如何用时间序列与机器学习解锁未来?
  • 招聘|Anytime AI-全栈开发工程师
  • 金融场景中的指标体系建设与应用
  • 7B最强长视频模型! LongVA视频理解超千帧,霸榜多个榜单
  • Meta开发System 2蒸馏技术,Llama 2对话模型任务准确率接近100%
  • 数据匮乏仍是通用具身智能面前的高墙吗?
  • 非法阻止员工披露AI安全风险,OpenAI严厉「封口协议」再遭举报
  • 直击真实的甲方AGI需求,人工智能赋能产业融通发展论坛顺利召开
  • AI大模型有望再扩1000倍!剑桥耶鲁康奈尔:PNN是变革关键