机器学习:集成学习4(XGBoost推导)

目录标题

一、概念

二、推导概述

XGBoost(极限梯度提升树,Extheme Gradient Boosting Tree),基于 打分函数的结果 决定是否分枝

步骤: 1.在损失函数的基础上 + 正则化项

2.基于特勒展开二阶式进行转换, 转成 近似函数

3.把问题从 样本角度 -> 叶子点角度 进行分析

4.得到最终结论,打分函数 ->Gian值 = 拆分前的分 - (拆分后左子树的分 - 拆分后右子树的分)

三、推导第一步

特勒展开看我前置知识 blog:机器学习:集成学习4(XGBoost前置知识泰勒展开式1)(或自行学习)

这里t轮的预测 怎么等于 t- 1 的预测 + t棵树的输出 这步转换在 blog

机器学习:集成学习2(GBDT算法)

1、先看原始目标函数

图片上方写的是:

o b j ( t ) = ∑ i = 1 n L ( y i , y ^ i ( t ) ) + ∑ k = 1 t Ω ( f k ) obj^{(t)} = \sum_{i=1}^n L\left(y_i, \hat{y}i^{(t)}\right) + \sum{k=1}^t \Omega(f_k) obj(t)=i=1∑nL(yi,y^i(t))+k=1∑tΩ(fk)

这里:

  • ( t (t (t) 表示第 ( t (t (t) 轮
  • ( y ^ i ( t ) (\hat{y}_i^{(t)} (y^i(t)) 是第 ( t (t (t) 轮的预测值
  • ( L (L (L) 是损失函数
  • ( Ω ( f k ) (\Omega(f_k) (Ω(fk)) 是第 ( k (k (k) 棵树的正则化项
  • y i y_i yi就是真实值,不是本轮真实,右上角可没有标t(老师讲课讲错了,使用t-1 个弱学习器 预测值 和 t 个弱学习器的预测值 算 t 弱学习器 的输出,和这个 y i y_i yi就是真实值没关系, 最终二阶泰勒展开算的是 f t ( x i ) f_t(x_i) ft(xi))

2、关键:预测值是怎么累加的?

XGBoost 是加法模型,每一轮新加一棵树。

所以第 (t) 轮的预测值等于:

y ^ i ( t ) = y ^ i ( t − 1 ) + f t ( x i ) \hat{y}_i^{(t)} = \hat{y}_i^{(t-1)} + f_t(x_i) y^i(t)=y^i(t−1)+ft(xi)

意思是:

第 (t) 轮的预测值 = 前 (t - 1) 轮的预测值 + 第 (t) 棵树的输出

这个公式是理解这一步的全部关键。

四、推导第二步

泰勒可以将一个函数变成各阶导数和

五、推导第三步

理解下面前置知识图片

前置知识:区分 f t ( x i ) f_t(x_i) ft(xi)和 w w w 区别

结论先放在前面:

  1. ( w (w (w) 确实是这个叶子节点的输出值(也就是这个样本的输出)。
  2. PPT 并没有写错, ( f t ( x i ) (f_t(x_i) (ft(xi)) 和 ( w (w (w) 其实是同一个东西的两种不同表达方式,只是站在了不同的视角。

为了让你彻底明白,我们把这两张图拆开,用大白话一步步理顺。


1、为什么 PPT 没有写错? ( f t ( x i ) (f_t(x_i) (ft(xi)) 到底是什么?

首先,我们要搞懂 ( f t ( x i ) (f_t(x_i) (ft(xi)) 这个符号代表什么。

  • ( t (t (t):代表第 ( t (t (t) 棵树。
  • ( x i (x_i (xi):代表第 ( i (i (i) 个样本的特征。
  • ( f t ( x i ) (f_t(x_i) (ft(xi)):意思是"第 ( t (t (t) 棵树,对第 ( i (i (i) 个样本给出的预测值"。

现在,假设你有一棵树(比如图里的那棵树),样本 ( i (i (i) 顺着树的分支往下走,最后落在了 D 这个叶子节点上。

那么,这棵树对这个样本的预测值 ( f t ( x i ) (f_t(x_i) (ft(xi)) 是多少呢?就是 D 这个叶子节点的输出值。

我们把 D 叶子节点的输出值命名为 ( w 1 (w_1 (w1)。

所以,对于落在 D 节点的样本来讲, ( f t ( x i ) = w 1 (f_t(x_i) = w_1 (ft(xi)=w1)。

PPT 右图只是把"某个具体样本的预测值"统一抽象成了 ( w 1 , w 2 , w 3 , w 4 (w_1, w_2, w_3, w_4 (w1,w2,w3,w4)。它们本质上是一回事,只是叫法不同。就像同一个人,在家里叫"爸爸",在公司叫"张总"。


2、为什么 PPT 左边写 ( f t ( x i ) (f_t(x_i) (ft(xi)),右边写 ( w (w (w)?

因为这两张图在推导不同的阶段,视角发生了转换:

  • 左图(宏观/样本视角):

    我们要算总损失 ( o b j ( t ) (obj^{(t)} (obj(t)),公式是 ( ∑ i = 1 m g i f t ( x i ) + 1 2 h i f t 2 ( x i ) (\sum_{i=1}^m g_i f_t(x_i) + \\frac{1}{2} h_i f_t\^2(x_i) (∑i=1mgift(xi)+21hift2(xi))。

    这里是在遍历每一个样本 ( i (i (i),把每个样本的预测值加起来。对于样本 ( i (i (i) 来说,它的预测值就是 ( f t ( x i ) (f_t(x_i) (ft(xi))。

    所以公式里只能写 ( f t ( x i ) (f_t(x_i) (ft(xi)),因为还没确定它落在哪个叶子节点。

  • 右图(微观/叶子节点视角):

    我们需要把上面的公式整理一下,合并同类项。

    如果 10 个样本里,有 3 个样本落在了 D 节点,那么这 3 个样本的预测值都是同一个数,也就是 D 节点的输出值 ( w 1 (w_1 (w1)。

    所以,原本的 ( ∑ i = 1 m (\sum_{i=1}^m (∑i=1m)(按样本求和),就变成了按叶子节点求和:

( g 1 w 1 + g 2 w 1 + g 3 w 1 ) + ( g 4 w 2 + g 5 w 2 ) + ... (g_1 w_1 + g_2 w_1 + g_3 w_1) + (g_4 w_2 + g_5 w_2) + \dots (g1w1+g2w1+g3w1)+(g4w2+g5w2)+...

提取公因式 ( w 1 (w_1 (w1) 之后,就变成了 ( ( g 1 + g 2 + g 3 ) w 1 ((g_1 + g_2 + g_3)w_1 ((g1+g2+g3)w1)。

所以,PPT 右图并没有把 ( f t ( x i ) (f_t(x_i) (ft(xi)) 错写成 ( w (w (w),而是把 ( f t ( x i ) (f_t(x_i) (ft(xi)) 替换成了它实际代表的数值 ( w (w (w),用来做合并同类项化简。

对应样本角度转成叶节点角度(公式转换)

所有样本一阶导之和和二阶导之和带入 转换

求导算出 w ,然后带入公式

六、推导第四步

相关推荐
Shockang6 小时前
llama.cpp 本地运行 9B 模型:部署、工具调用与微调数据
人工智能
Shockang6 小时前
n8n 智能体工作流实战:触发、工具、记忆与发布护栏
人工智能
冬奇Lab8 小时前
开源项目第241期:YuE2 —— 用符号乐谱当“白盒“接口的开源音乐生成模型,SongBench 超越 Suno v5/v6
人工智能
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天9 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源