深度理解梯度提升树GBDT

2024-06-02 09:08
文章标签 深度 理解 提升 梯度 gbdt

本文主要是介绍深度理解梯度提升树GBDT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.什么是提升树?

     提升树核心思想是使用残差使损失函数最小,每一次使用树模型拟合残差。最终预测值y是M个树模型的累加和

提升树模型如下

f_{M}(x)=\sum_{m=1}^{M}T(x;\theta _{m})

T(x;\theta_{m})  是决策时,\theta _{m}是决策树的参数,M是决策树的个数

 提升树通用算法过程如下:

输入:(x_{i},y_{i})  i=1...N 样本数据,L(y,f(x)) 损失函数

输出:提升树f_{M}(x)

算法流程

1.初始化 f_{0}(x)=0

2.对m=1,2...M (遍历M个提升树)

          2.1 计算残差   r_{mi}=y_{i}-f_{m-1}(x_{i})

          2.2  使用基学习器T(x;\theta _{m})拟合参数r_{mi},训练集为(x_{i},r_{mi})  i=1...N

          2.3  更新模型  f_{m}(x)=f_{m-1}(x)+T(x;\theta _{m})

3.得到最终的强学习器

  f_{M}(x)=\sum_{m=1}^{M}T(x;\theta _{m})

2.什么是GBDT?

    GBDT是一种提升树模型,基学习器采用决策树,使用boosting思想+一阶梯度下降 的方法。GBDT公式模型

     GBDT=决策树+boosting思想+一阶梯度下降(gradient)

     boosting思想是基模型是有序的,上一个基模型的输出是下一个及模型的输入。第M个树模型的预测值是真实值与前m-1个树模型的残差。 一阶梯度下降是残差的计算使用负梯度值拟合残差

GBDT模型是采用M个模型的线性组合,模型公式如下

f_{M}(x)=\sum_{m=1}^{M}\gamma _{m}T(x;\theta _{m})

首先确定初始模型,定义初始基学习器f_{0}(x),当模型得带到第m步时:

f_{m}(x)=f_{m-1}(x)+\gamma _{m }T(x;\theta _{m})

通过最小化损失函数来确定参数\theta _{m}

 arg min_{\theta_{m} }\sum_{i}^{}L(y_{i},f_{m-1}(x)+\gamma _{m }T(x;\theta _{m})))

Gradient Boosting方法的两种理解,从优化的角度采用梯度下降算法,T表示负梯度方向,\gamma _{m}为步长。从模型角度理解为一阶多项式展开f_{m-1}(x)+\gamma _{m }T(x;\theta _{m}),而T表示一阶信息,\gamma _{m}是系数

gradient boosting的算法流程

 输入:(x_{i},y_{i})  i=1...N 样本数据,L(y,f(x)) 损失函数

输出:提升树f_{M}(x)

1.初始化 f_{0}(x)=0

2.对m=1,2...M (遍历M个提升树)

          2.1 计算残差   r_{mi}=y_{i}-f_{m-1}(x_{i})

          2.2  使用基学习器T(x;\theta _{m})拟合参数r_{mi},训练集为(x_{i},r_{mi})  i=1...N

          2.3  根据梯度下降算法,计算学习器\gamma _{m}

                 arg min_{\gamma {m} }\sum_{i}^{}L(y_{i},f_{m-1}(x)+\gamma _{m }T(x;\theta _{m})))

          2.4  更新模型  f_{m}(x)=f_{m-1}(x)+\gamma _{m}T(x;\theta _{m})

3.得到最终的强学习器

  f_{M}(x)=\sum_{m=1}^{M}\gamma _{m}T(x;\theta _{m})

参考

1.【机器学习】GBDT

这篇关于深度理解梯度提升树GBDT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023539

相关文章

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态