梯度提升决策树树(GBDT)公式推导

news/2025/1/23 9:45:37/

### 逻辑回归的损失函数

逻辑回归模型用于分类问题,其输出是一个概率值。对于二分类问题,逻辑回归模型的输出可以表示为:

\[ P(y = 1 | x) = \frac{1}{1 + e^{-F(x)}} \]

其中 \( F(x) \) 是一个线性组合函数,通常表示为:

\[ F(x) = \sum_{m=0}^{M} h_m(x) \]

这里的 \( h_m(x) \) 是学习到的决策树

### 损失函数的推导

对于单个样本 \((x_i, y_i)\),逻辑回归的损失函数通常采用对数似然损失(也称为交叉熵损失),定义如下:

\[ \text{loss}(x_i, y_i) = -y_i \log \hat{y}_i - (1 - y_i) \log (1 - \hat{y}_i) \]

其中:
- \( \hat{y}_i \) 是模型预测的概率。
- \( y_i \) 是实际的标签(0 或 1)。

### GBDT 中的损失函数

在 GBDT 中,我们假设第 \( k \) 步迭代之后当前学习器为 \( F(x) \),则损失函数可以写为:

\[ \text{loss}(x_i, y_i | F(x)) = y_i \log \left(1 + e^{-F(x_i)}\right) + (1 - y_i) \left[F(x_i) + \log \left(1 + e^{-F(x_i)}\right)\right] \]

### 推导步骤

1. **定义预测概率**:
   \[ \hat{y}_i = \frac{1}{1 + e^{-F(x_i)}} \]

2. **代入损失函数**:
   \[ \text{loss}(x_i, y_i) = -y_i \log \hat{y}_i - (1 - y_i) \log (1 - \hat{y}_i) \]
   \[ = -y_i \log \left(\frac{1}{1 + e^{-F(x_i)}}\right) - (1 - y_i) \log \left(1 - \frac{1}{1 + e^{-F(x_i)}}\right) \]

3. **简化表达式**:
   \[ \text{loss}(x_i, y_i) = -y_i \log \left(\frac{1}{1 + e^{-F(x_i)}}\right) - (1 - y_i) \log \left(\frac{e^{-F(x_i)}}{1 + e^{-F(x_i)}}\right) \]
   \[ = -y_i \log \left(\frac{1}{1 + e^{-F(x_i)}}\right) - (1 - y_i) \left[\log(e^{-F(x_i)}) - \log(1 + e^{-F(x_i)})\right] \]
   \[ = -y_i \log \left(\frac{1}{1 + e^{-F(x_i)}}\right) - (1 - y_i) \left[-F(x_i) - \log(1 + e^{-F(x_i)})\right] \]
   \[ = y_i \log \left(1 + e^{-F(x_i)}\right) + (1 - y_i) \left[F(x_i) + \log \left(1 + e^{-F(x_i)}\right)\right] \]

求梯度

为了求出给定损失函数的梯度,我们需要对损失函数关于 \( F(x_i) \) 求导。给定的损失函数是:

\[
\text{loss}(x_i, y_i | F(x)) = y_i \log \left(1 + e^{-F(x_i)}\right) + (1 - y_i) \left[F(x_i) + \log \left(1 + e^{-F(x_i)}\right)\right]
\]

我们分两部分来计算梯度:

1. 对于第一部分 \( y_i \log \left(1 + e^{-F(x_i)}\right) \)
2. 对于第二部分 \( (1 - y_i) \left[F(x_i) + \log \left(1 + e^{-F(x_i)}\right)\right] \)

### 第一部分的梯度

对于 \( y_i \log \left(1 + e^{-F(x_i)}\right) \),我们对其求导:

\[
\frac{\partial}{\partial F(x_i)} \left[ y_i \log \left(1 + e^{-F(x_i)}\right) \right]
\]

使用链式法则:

\[
\frac{\partial}{\partial F(x_i)} \left[ y_i \log \left(1 + e^{-F(x_i)}\right) \right] = y_i \cdot \frac{\partial}{\partial F(x_i)} \left[ \log \left(1 + e^{-F(x_i)}\right) \right]
\]

\[
= y_i \cdot \frac{1}{1 + e^{-F(x_i)}} \cdot (-e^{-F(x_i)})
\]

\[
= y_i \cdot \frac{-e^{-F(x_i)}}{1 + e^{-F(x_i)}}
\]

\[
= -y_i \cdot \frac{e^{-F(x_i)}}{1 + e^{-F(x_i)}}
\]

### 第二部分的梯度

对于 \( (1 - y_i) \left[F(x_i) + \log \left(1 + e^{-F(x_i)}\right)\right] \),我们对其求导:

\[
\frac{\partial}{\partial F(x_i)} \left[ (1 - y_i) \left(F(x_i) + \log \left(1 + e^{-F(x_i)}\right)\right) \right]
\]

\[
= (1 - y_i) \cdot \left[ \frac{\partial}{\partial F(x_i)} F(x_i) + \frac{\partial}{\partial F(x_i)} \log \left(1 + e^{-F(x_i)}\right) \right]
\]

\[
= (1 - y_i) \cdot \left[ 1 + \frac{1}{1 + e^{-F(x_i)}} \cdot (-e^{-F(x_i)}) \right]
\]

\[
= (1 - y_i) \cdot \left[ 1 - \frac{e^{-F(x_i)}}{1 + e^{-F(x_i)}} \right]
\]

\[
= (1 - y_i) \cdot \left[ \frac{1 + e^{-F(x_i)} - e^{-F(x_i)}}{1 + e^{-F(x_i)}} \right]
\]

\[
= (1 - y_i) \cdot \left[ \frac{1}{1 + e^{-F(x_i)}} \right]
\]

### 合并两部分

将两部分合并起来:

\[
\frac{\partial}{\partial F(x_i)} \left[ y_i \log \left(1 + e^{-F(x_i)}\right) + (1 - y_i) \left[F(x_i) + \log \left(1 + e^{-F(x_i)}\right)\right] \right]
\]

\[
= -y_i \cdot \frac{e^{-F(x_i)}}{1 + e^{-F(x_i)}} + (1 - y_i) \cdot \frac{1}{1 + e^{-F(x_i)}}
\]

\[
= -y_i \cdot \frac{e^{-F(x_i)}}{1 + e^{-F(x_i)}} + \frac{1 - y_i}{1 + e^{-F(x_i)}}
\]

\[
= \frac{-y_i e^{-F(x_i)} + 1 - y_i}{1 + e^{-F(x_i)}}
\]

\[
= \frac{1 - y_i - y_i e^{-F(x_i)}}{1 + e^{-F(x_i)}}
\]

\[
= \frac{1 - y_i - y_i e^{-F(x_i)}}{1 + e^{-F(x_i)}}
\]

最终得到的梯度为:

\[
\frac{\partial \text{loss}}{\partial F(x_i)} = \frac{1 - y_i - y_i e^{-F(x_i)}}{1 + e^{-F(x_i)}}
\]

简化

\[
\frac{\partial \text{loss}}{\partial F(x_i)} = \frac{1}{1 + e^{-F(x_i)}} - y_i
\]

### 总结

通过上述推导,我们可以看到逻辑回归的损失函数如何被应用于 GBDT 中。在每一步迭代中,GBDT 会根据当前模型的预测和实际标签之间的差异来更新新的弱学习器(通常是决策树),从而逐步减少损失函数的值。

这个过程确保了模型能够逐步逼近最优解,同时通过负梯度方向进行参数更新,有效地减少了损失函数的值。


http://www.ppmy.cn/news/1565456.html

相关文章

Docker基础安装与使用

Docker 简介 Docker 是一个开源的容器化平台,用于开发、部署和运行应用程序。它通过将应用程序及其依赖项打包到一个轻量级的、可移植的容器中,实现了应用程序的快速部署和跨环境一致性。 Docker 的核心概念 容器(Container)&a…

嵌入式Linux驱动--并发与竞争

一.并发与竞争 定义:并发是指多个程序同时访问一个共享资源。当这种情况发生时,由于同时访问而产生的就是竞争问题。例子:例如A和B要打电话,但公共电话只有一部。因此,谁先打电话就形成了竞争。然而,电话…

Unity中在UI上画线

在UI中画一条曲线 我封装了一个组件,可以实现基本的画线需求. 效果 按住鼠标左键随手一画. 用起来也很简单,将组件挂到空物体上就行了,红色的背景是Panel. 你可以将该组件理解为一个Image,只不过形状更灵活一些罢了,所以它要放在下面的层级(不然可能会被挡住). 代码 可以…

ios文件管理,沙盒机制以及如何操作“文件”APP,把文件共享到文件app

首先,系统是一个整体,那每个app是相互独立的,系统为每个app分配了一定的存储空间,也就是我们说的沙盒,每个app有自己独立的沙盒,文件存储在沙盒中,正常情况下app相互之间数据是不可以共享以及访…

大华相机DH-IPC-HFW3237M支持的ONVIF协议

使用libONVIF C库。 先发现相机。 配置 lib目录 包含 编译提示缺的文件&#xff0c;到libonvif里面拷贝过来。 改UDP端口 代码 使用msvc 2022的向导生成空项目&#xff0c;从项目的main示例拷贝过来。 CameraOnvif.h #pragma once#include <QObject> #include &l…

Node.js 能做什么

一、服务器端开发 1. 构建 Web 服务器 使用内置的 http 模块或流行的框架&#xff08;如 Express、Koa 等&#xff09;创建 Web 服务器&#xff0c;处理 HTTP 请求和响应。可以处理各种类型的请求&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并返回相应的 HTML、JS…

《2024年度网络安全漏洞威胁态势研究报告》

2024年&#xff0c;全球网络安全领域继续面对日益严峻的挑战。在数字化转型的大背景下&#xff0c;漏洞利用成为网络攻击的重中之重。根据统计&#xff0c;全球新增漏洞数量再创新高&#xff0c;漏洞的复杂性加剧&#xff0c;修复周期也在不断缩短。然而&#xff0c;攻击者的手…

C++17 新特性解析:Lambda 捕获 this

C17 引入了许多改进和新特性&#xff0c;其中之一是对 lambda 表达式的增强。在这篇文章中&#xff0c;我们将深入探讨 lambda 表达式中的一个特别有用的新特性&#xff1a;通过 *this 捕获当前对象的副本。这个特性不仅提高了代码的安全性&#xff0c;还极大地简化了某些场景下…