机器学习-GBDT算法
目录
一. GBDT 核心思想
二. GBDT 工作原理
**(1) 损失函数优化**
**(2) 负梯度拟合**
**(3) 模型更新**
三. GBDT 的关键步骤
四. GBDT 的核心优势
**(1) 高精度与鲁棒性**
**(2) 处理缺失值**
**(3) 特征重要性分析**
五. GBDT 的缺点
**(1) 训练效率较低**
**(2) 过拟合风险**
**(3) 缺乏并行性**
六、应用场景
七、与其他算法对比
八、总结
梯度提升迭代决策树(Gradient Boosting Decision Tree, GBDT) 是一种基于梯度提升(Boosting)的集成学习算法,通过迭代地训练决策树来最小化损失函数。它结合了决策树的预测能力和梯度提升的优化思想,在分类、回归和排序任务中表现出色(如 XGBoost、LightGBM 和 Scikit-learn 的 GradientBoostingClassifier
均基于此框架)
一. GBDT 核心思想
- 目标:通过逐步优化损失函数,将多个弱学习器(决策树)组合成一个强学习器。
- GBDT 以梯度下降为优化手段,每一轮训练生成一个新的决策树,专门拟合当前模型的残差(即真实值与预测值的差异),通过累加所有树的预测结果形成最终输出。
- 核心步骤:
- 初始化模型为一个常数值(如样本均值)。
- 计算当前模型的损失函数,并对损失函数关于每个样本的负梯度进行拟合(生成新的决策树)。
- 将新生成的决策树加入模型中,更新模型输出。
- 重复上述步骤,直到满足停止条件(如达到预设树的数量或损失不再显著下降)
二. GBDT 工作原理
**(1) 损失函数优化**
- 每轮迭代的目标是通过最小化损失函数来改进模型。对于分类任务,常用交叉熵损失;回归任务则用均方误差(MSE)。
- 关键公式:
其中 f(xi) 是当前模型的预测值,L 是损失函数。
**(2) 负梯度拟合**
- 在第 t 轮迭代中,计算当前模型的损失函数的负梯度(近似残差):
- 新的决策树 Tt(x) 用于拟合这些负梯度 gt(xi),使得损失函数尽可能减小。
**(3) 模型更新**
- 将新树的结果按学习率 η 加入模型:
三. GBDT 的关键步骤
- 初始化模型:
- 迭代训练决策树:
- 步骤1:计算当前模型的损失函数 L。
- 步骤2:对每个样本计算负梯度 gt(xi)。
- 步骤3:生成决策树 Tt(x),拟合 gt(xi)。
- 步骤4:通过损失函数验证新树的有效性,调整学习率 η。
- 组合所有树:
四. GBDT 的核心优势
**(1) 高精度与鲁棒性**
- 通过梯度优化逐步逼近最优解,对噪声和异常值具有较强鲁棒性(相比 AdaBoost)。
- 支持自定义损失函数,适应复杂任务(如逻辑回归中的交叉熵)。
**(2) 处理缺失值**
- 大多数实现(如 XGBoost、LightGBM)内置缺失值处理机制,无需额外预处理。
**(3) 特征重要性分析**
- 每棵树的贡献可量化,输出特征重要性用于特征筛选。
五. GBDT 的缺点
**(1) 训练效率较低**
- 顺序迭代训练决策树,计算复杂度高于随机森林。
- 大规模数据集需依赖优化库(如 XGBoost 的近似算法)。
**(2) 过拟合风险**
- 树的数量过多或单棵树过深可能导致过拟合。
- 需合理设置
n_estimators
和max_depth
等参数。
**(3) 缺乏并行性**
- 传统 GBDT 实现无法并行训练,但 XGBoost/LightGBM 通过特征分块等技术部分支持并行。
六、应用场景
- 结构化数据预测:如房价预测、销量预估。
- 分类任务:如信用评分、客户流失预测。
- 排序与推荐:如搜索结果排序、个性化推荐系统。
- 特征重要性分析:通过树的分裂特征评估变量重要性。
七、与其他算法对比
-
与 AdaBoost 的区别
- GBDT 通过梯度下降优化残差,AdaBoost 通过调整样本权重。
- GBDT 更适合回归任务,AdaBoost 更适合分类任务。
-
与随机森林的区别
- 随机森林基于 Bagging(并行训练),GBDT 基于 Boosting(串行优化)。
- 随机森林对噪声更鲁棒,GBDT 在复杂数据上精度更高
八、总结
GBDT 通过梯度优化残差的机制,在结构化数据领域表现优异,是竞赛和工业界常用的算法之一。尽管存在训练速度和调参的挑战,但其改进版本(如 XGBoost、LightGBM)通过工程优化显著提升了效率,使其在实际应用中更具竞争力。
相关文章:

机器学习-GBDT算法
目录 一. GBDT 核心思想 二. GBDT 工作原理 **(1) 损失函数优化** **(2) 负梯度拟合** **(3) 模型更新** 三. GBDT 的关键步骤 四. GBDT 的核心优势 **(1) 高精度与鲁棒性** **(2) 处理缺失值** **(3) 特征重要性分析** 五. GBDT 的缺点 **(1) 训练…...

redis基础结构
title: redis基础结构 date: 2025-03-04 08:39:12 tags: redis categories: redis笔记 Redis入门 (NoSQL, Not Only SQL) 非关系型数据库 关系型数据库:以 表格 的形式存在,以 行和列 的形式存取数据,一系列的行和列被…...

【keil】一种将STM32的armcc例程转换为armclang的方式
【keil】一种将所有armcc例程转换为armclang的方式 改的原因第一步下载最新arm6第二步编译成功 第三步去除一些warning编译成功 我这边用armclang去编译的话,主要是freertos中的portmacro.h和port.c会报错 改的原因 我真的服了,现在大部分的单片机例程都…...

计算机视觉算法实战——表面缺陷检测(表面缺陷检测)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 引言 表面缺陷检测是计算机视觉领域中的一个重要研究方向,旨在通过图像处理和机器学习技术自动检测产品表面的缺陷&…...
window下的docker内使用gpu
Windows 上使用 Docker GPU需要进行一系列的配置和步骤。这是因为 Docker 在 Windows 上的运行环境与 Linux 有所不同,需要借助 WSL 2(Windows Subsystem for Linux 2)和 NVIDIA Container Toolkit 来实现 GPU 的支持。以下是详细的流程: 一、环境准备 1.系统要求 Window…...
Modbus协议(TCP)
从今开始,会详细且陆续整理各类的通信协议,以便在需要且自身忘记的情况下,迅速复习。如有错误之处,还请批评指正。 一、Modbus协议的简述 Modbus协议作为应用层协议,基于主从设备模型,主设备负责请求消息&…...

虚拟系统配置实验报告
一、实验拓扑图 二、实验配置 要求一: 虚拟系统: 设置管理: 进行信息配置 R1配置 虚拟系统配置 a: b: c: 测试 a–>b: 检测...
Agentic系统:负载均衡与Redis缓存优化
摘要 本文在前文Agentic系统的基础上,新增负载均衡(动态调整线程数以避免API限流)和缓存机制(使用Redis存储搜索结果,减少API调用)。通过这些优化,系统在高并发场景下更加稳定高效。代码完整可…...
28-文本左右对齐
给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可…...

建筑兔零基础自学python记录39|实战词云可视化项目——章节分布10(上)
这次我们来制作《红楼梦》各章节的分布情况: 源代码: import pandas as pd import numpy as np import matplotlib.pyplot as pltdf_hlm pd.read_csv("hlm.txt", names["hlm_texts"]).dropna()df_hlm df_hlm[~df_hlm.hlm_texts.s…...
Impacket工具中的横向渗透利器及其使用场景对比详解
在渗透测试中,横向移动(Lateral Movement)是指攻击者在获得一个系统的控制权限后,通过网络进一步渗透到其他系统的过程。Impacket 是一款强大的渗透测试工具集,提供了多种实现横向渗透的脚本,常见的工具包括…...

基于java,SpringBoot和Vue的医院药房药品管理系统设计
摘要 随着医疗行业信息化的快速发展,高效、精准的医院药房药品管理对于提升医疗服务质量和医院运营效率至关重要。本文基于 Java 语言,采用 SpringBoot 框架和 Vue 框架进行医院药房药品管理系统的设计与研究。该系统以 SpringBoot 作为后端开发框架&am…...

MQ保证消息的顺序性
在消息队列(MQ)中保证消息的顺序性是一个常见的需求,尤其是在需要严格按顺序处理业务逻辑的场景(例如:订单创建 → 支付 → 发货)。 一、消息顺序性被破坏的原因 生产者异步/并行发送:消息可能…...

cmake、CMakeLists.txt、make、ninja
文章目录 一、概念0.cmake官网1.什么是cmake2.为什么使用cmake3.CMakeLists.txt 二、CMakeLists.txt语法:如何编写CMakeLists.txt,语法详解(0)语法基本原则(1)project关键字(2)set关键字(3)message关键字(4)add_executable关键字(5)add_subdirectory关键…...
数据结构与算法 计算机组成 八股
文章目录 数据结构与算法数组与链表的区别堆的操作红黑树定义及其原理 计算机组成int和uint的表示原码反码补码移码的定义?为什么用补码? 数据结构与算法 数组与链表的区别 堆的操作 红黑树定义及其原理 计算机组成 int和uint的表示 原码反码补码移…...

RoboBrain:从抽象到具体的机器人操作统一大脑模型
25年2月来自北大、北京智源、中科院自动化所等的论文“RoboBrain: A Unified Brain Model for Robotic Manipulation from Abstract to Concrete”。 目前的多模态大语言模型(MLLM) 缺少三项必备的机器人大脑能力:规划能力,将复杂…...

算法 之 前缀和 与 滑动窗口 与 背包问题 的差异(子数组之和为k问题)
文章目录 使用前缀和哈希表560.和为K的子数组525.连续数组2588.统计美丽子数组数目 子数组的定义是原来的数组当中连续的非空的序列,而我们的背包问题的选与不选的情况,对应的是这个非连续的情况,那么这种情况就要注意当然啦,对于线性的时间内…...

微电网协调控制器ACCU-100 分布式光伏 光储充一本化
安科瑞 华楠 18706163979 应用范围: 分布式光伏、微型风力发电、工商业储能、光储充一体化电站、微电网等领域。 主要功能: 数据采集:支持串口、以太网等多通道实时运行,满足各类风电与光伏逆变器、储能等 设备接入ÿ…...

IDEA入门及常用快捷键
IDEA是java常用的IDE。当run一个.java文件时,其实是经历了先编译为.class,再运行的过程。 在project文件夹中,out文件夹存储编译的.class文件,src文件夹存储.java代码文件。 设置自动导包 快捷键: 格式化快捷键&…...
electron打包结构了解
Electron 应用打包后的文件结构和内容取决于你使用的打包工具(如 electron-builder、electron-packager 等)以及目标操作系统(Windows、macOS、Linux)。以下是典型 Electron 应用打包后的文件结构和关键组成部分: 1. 基…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...