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

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

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

\[ 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.mzph.cn/pingmian/67789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML 表单和输入标签详解

HTML 表单是网页与用户交互的重要工具,它允许用户输入数据并将其提交到服务器。表单在网页中的应用非常广泛,例如登录、注册、搜索、评论等功能都离不开表单。本文将详细介绍 HTML 表单及其相关标签的使用方法,帮助你全面掌握表单的设计与实现…

2024年,我的技术探索与成长之路

2024年,我的技术探索与成长之路 2024年已经过去,作为一名技术爱好者和写作者,我回顾了过去一年在博客上记录的点滴,感慨良多。这一年,我不仅见证了技术的飞速发展,也在不断学习和实践中找到了自己的成长方向…

Elasticsearch(ES)基础查询语法的使用

1. Match Query (全文检索查询) 用于执行全文检索,适合搜索文本字段。 { “query”: { “match”: { “field”: “value” } } } match_phrase:精确匹配短语,适合用于短语搜索。 { “query”: { “match_phrase”: { “field”: “text” }…

WinHttp API接口辅助类实现GET POST网络通讯

1、简述 近期需要在MFC基础上开发网络Http通讯,开始使用的WinINet进行通讯,后面发现WinINet对连接超时这块不支持设置,在网上搜索了几种方式效果都不太好,于是决定用WinHttp API接口进行通讯,分别对GET、POST进行了封装。 2、使用到接口 2.1、WinHttpOpen WinHttpOpen 是…

Js:DOM中的样式(包含行内样式、滚动样式、可见区域样式等)

这部分还在更新 1、 获取行内样式:元素.style.样式名称 2、 获取当前正在显示的样式(只能读,不能修改,想要修改要使用style): ① 只有ie支持:元素.currentStyle.样式名称 ② 其他浏览器&…

《Long Context Compression with Activation Beacon》笔记

Activation Beacon出自智源与人大在2024年1月放在arxiv上的论文《Long Context Compression with Activation Beacon》(v1版的题目:Soaring from 4K to 400K: Extending LLM’s Context with Activation Beacon)。它引入了Beacon token将上下文信息蒸馏到…

线程池 | java中的多线程

在 《Java异步编程 | CompletableFuture--实现复杂的异步控制流 》中,我们提到了 通过 自定义线程池 , 用于管理 异步任务的执行,避免频繁创建和销毁线程,提高性能。 本文将整理并介绍一些 Java 中常见的 多线程创建方式&#xf…

Javaweb之css

css的三种引入方式 1内行式 2.内嵌式 3.外部样式表 内行式和内嵌式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…

SQLmap 注入-03 获得用户信息

1: Sqlmap 先进入库&#xff0c;然后进入table, 然后列出column: sqlmap -u "http://192.168.56.133/mutillidae/index.php?pageuser-info.php&usernamexiaosheng&passwordabc&user-info-php-submit-buttonViewAccountDetails" --batch -p username -D …

mac 安装 python2

官网下载2.7&#xff1a; Python Release Python 2.7.18 | Python.org 查找地址&#xff1a; which python2 # /usr/local/bin/python2 设置 npm 使用 Python 2&#xff08;新建窗口&#xff09;&#xff1a; npm config set python /usr/local/bin/python2 验证 Python 版…

Jupyter notebook中运行dos指令运行方法

Jupyter notebook中运行dos指令运行方法 目录 Jupyter notebook中运行dos指令运行方法一、DOS(磁盘操作系统&#xff09;指令介绍1.1 DOS介绍1.2 DOS指令1.2.1 DIR - 显示当前目录下的文件和子目录列表。1.2.2 CD 或 CHDIR - 改变当前目录1.2.3 使用 CD .. 可以返回上一级目录1…

基于注解实现去重表消息防止重复消费

基于注解实现去重表消息防止重复消费 1. 背景/问题 在分布式系统中&#xff0c;消息队列&#xff08;如RocketMQ、Kafka&#xff09;的 消息重复消费 是常见问题&#xff0c;主要原因包括&#xff1a; 网络抖动&#xff1a;生产者或消费者因网络不稳定触发消息重发。消费者超…

Biotin sulfo-N-hydroxysuccinimide ester ;生物素磺基-N-羟基琥珀酰亚胺酯;生物素衍生物;190598-55-1

一、生物素及其衍生物的概述 生物素衍生物是指在生物素&#xff08;Vitamin H或B7&#xff09;分子基础上进行化学修饰得到的衍生化合物。这些衍生化合物在生物医学研究、临床诊断和药物开发等领域有着广泛的应用。 生物素&#xff08;Biotin&#xff09;是一种水溶性维生素&a…

Ubuntu如何安装redis服务?

环境&#xff1a; Ubuntu22.04 WSL2 问题描述&#xff1a; 如何安装redis服务&#xff1f; 解决方案&#xff1a; 1.在 Linux 上&#xff08;如 Ubuntu/Debian&#xff09;安装 1.通过包管理工具安装 Redis 服务器&#xff1a; sudo apt update sudo apt install redis…

Datawhale组队学习笔记task2——leetcode面试题

文章目录 写在前面Day5题目1.0112.路径总和解答2.0113路径总和II解答3.0101.对称二叉树解答 Day6题目1.0124.二叉树中的最大路径和解答2.0199.二叉树的右视图解答3.0226.翻转二叉树解答 Day7题目1.0105.从前序与中序遍历序列构造二叉树解答2.0098.验证二叉搜索树解答3.0110.平衡…

Slate文档编辑器-Node节点与Path路径映射

Slate文档编辑器-Node节点与Path路径映射 在之前我们聊到了slate中的Decorator装饰器实现&#xff0c;装饰器可以为我们方便地在编辑器渲染调度时处理range的渲染&#xff0c;这在实现搜索替换、代码高亮等场景非常有用。那么在这篇文章中&#xff0c;我们聊一下Node节点与Pat…

麒麟系统中删除权限不够的文件方法

在麒麟系统中删除权限不够的文件&#xff0c;可以尝试以下几种方法&#xff1a; 通过修改文件权限删除 打开终端&#xff1a;点击左下角的“终端”图标&#xff0c;或者通过搜索功能找到并打开终端 。定位文件&#xff1a;使用cd命令切换到文件所在的目录 。修改文件权限&…

Kotlin语言的正则表达式

Kotlin语言中的正则表达式 引言 正则表达式作为一种强大的文本处理工具&#xff0c;广泛应用于字符串匹配、数据验证、文本搜索等场景。在Kotlin语言中&#xff0c;正则表达式的应用同样得到了广泛关注。Kotlin不仅具备与Java相同的正则表达式功能优势&#xff0c;还提供了更…

Flask简介与安装以及实现一个糕点店的简单流程

目录 1. Flask简介 1.1 Flask的核心特点 1.2 Flask的基本结构 1.3 Flask的常见用法 1.3.1 创建Flask应用 1.3.2 路由和视图函数 1.3.3 动态URL参数 1.3.4 使用模板 1.4 Flask的优点 1.5 总结 2. Flask 环境创建 2.1 创建虚拟环境 2.2 激活虚拟环境 1.3 安装Flask…

RFID系统安全认证协议及防碰撞算法研究(RFID Security)

目录 1.摘要 2.引言 3.前人研究成果 3.1 RFID系统协议模型 3.2 RFID系统安全认证协议分类 3.3 RFID安全认证协议及其研究 3.3.1 超轻量级安全认证协议及其研究 3.3.2 轻量级安全认证协议及其研究 3.3.2 中量级安全认证协议及其研究 3.3.3 重量级安全认证协议及其研究…