【机器学习基础】机器学习入门核心算法:GBDT(Gradient Boosting Decision Tree)
机器学习入门核心算法:GBDT(Gradient Boosting Decision Tree)
- 1. 算法逻辑
- 2. 算法原理与数学推导
- 2.1 目标函数
- 2.2 负梯度计算
- 2.3 决策树拟合
- 2.4 叶子权重计算
- 2.5 模型更新
- 3. 模型评估
- 评估指标
- 防止过拟合
- 4. 应用案例
- 4.1 金融风控
- 4.2 推荐系统
- 4.3 计算机视觉
- 5. 面试题及答案
- 6. 优缺点分析
- 优点
- 缺点
- 7. 数学推导示例(回归问题)
1. 算法逻辑
GBDT 是一种基于决策树的集成学习算法,属于 Boosting 家族。其核心思想是串行训练多个弱学习器(决策树),每棵树学习前序模型残差的负梯度,最终通过加权求和得到强学习器。核心逻辑如下:
- 初始化:用常数值初始化模型(如目标均值)
F 0 ( x ) = arg min γ ∑ i = 1 n L ( y i , γ ) F_0(x) = \arg\min_\gamma \sum_{i=1}^n L(y_i, \gamma) F0(x)=argγmini=1∑nL(yi,γ) - 迭代训练:
- 计算当前模型的伪残差(负梯度)
- 训练新树拟合该残差
- 更新模型: F m ( x ) = F m − 1 ( x ) + ν h m ( x ) F_m(x) = F_{m-1}(x) + \nu h_m(x) Fm(x)=Fm−1(x)+νhm(x)( ν \nu ν为学习率)
- 最终输出:加权树组合
F ( x ) = ∑ m = 0 M ν h m ( x ) F(x) = \sum_{m=0}^M \nu h_m(x) F(x)=m=0∑Mνhm(x)
2. 算法原理与数学推导
2.1 目标函数
设训练集 { ( x i , y i ) } i = 1 n \{(x_i,y_i)\}_{i=1}^n {(xi,yi)}i=1n,损失函数 L ( y , F ( x ) ) L(y, F(x)) L(y,F(x)),目标是最小化正则化目标函数:
L = ∑ i = 1 n L ( y i , F ( x i ) ) + ∑ m = 1 M Ω ( h m ) \mathcal{L} = \sum_{i=1}^n L(y_i, F(x_i)) + \sum_{m=1}^M \Omega(h_m) L=i=1∑nL(yi,F(xi))+m=1∑MΩ(hm)
其中 Ω ( h m ) = γ T + 1 2 λ ∥ w ∥ 2 \Omega(h_m) = \gamma T + \frac{1}{2}\lambda \|w\|^2 Ω(hm)=γT+21λ∥w∥2( T T T为叶子数, w w w为叶子权重)
2.2 负梯度计算
在第 m m m 次迭代,计算伪残差:
r i m = − [ ∂ L ( y i , F ( x i ) ) ∂ F ( x i ) ] F ( x ) = F m − 1 ( x ) r_{im} = -\left[ \frac{\partial L(y_i, F(x_i))}{\partial F(x_i)} \right]_{F(x)=F_{m-1}(x)} rim=−[∂F(xi)∂L(yi,F(xi))]F(x)=Fm−1(x)
损失函数 | 伪残差 r i m r_{im} rim |
---|---|
平方损失 | y i − F m − 1 ( x i ) y_i - F_{m-1}(x_i) yi−Fm−1(xi) |
绝对损失 | sign ( y i − F m − 1 ( x i ) ) \text{sign}(y_i - F_{m-1}(x_i)) sign(yi−Fm−1(xi)) |
Huber损失 | 分段函数 |
对数损失(分类) | y i − 1 1 + e − F m − 1 ( x i ) y_i - \frac{1}{1+e^{-F_{m-1}(x_i)}} yi−1+e−Fm−1(xi)1 |
2.3 决策树拟合
训练新树 h m h_m hm 拟合伪残差 { ( x i , r i m ) } \{(x_i, r_{im})\} {(xi,rim)},通过递归分裂节点:
- 分裂准则:最大化增益(Gain)
Gain = 1 2 [ G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ ] − γ \text{Gain} = \frac{1}{2} \left[ \frac{G_L^2}{H_L + \lambda} + \frac{G_R^2}{H_R + \lambda} - \frac{(G_L+G_R)^2}{H_L+H_R+\lambda} \right] - \gamma Gain=21[HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2]−γ
其中 G = ∑ i ∈ I g i G = \sum_{i \in I} g_i G=∑i∈Igi, H = ∑ i ∈ I h i H = \sum_{i \in I} h_i H=∑i∈Ihi( g i g_i gi为一阶导, h i h_i hi为二阶导)
2.4 叶子权重计算
对叶子节点 j j j,最优权重为:
w j ∗ = − ∑ i ∈ I j g i ∑ i ∈ I j h i + λ w_j^* = -\frac{\sum_{i \in I_j} g_i}{\sum_{i \in I_j} h_i + \lambda} wj∗=−∑i∈Ijhi+λ∑i∈Ijgi
2.5 模型更新
F m ( x ) = F m − 1 ( x ) + ν ∑ j = 1 J w j 1 ( x ∈ R j ) F_m(x) = F_{m-1}(x) + \nu \sum_{j=1}^J w_j \mathbf{1}(x \in R_j) Fm(x)=Fm−1(x)+νj=1∑Jwj1(x∈Rj)
3. 模型评估
评估指标
任务类型 | 常用指标 |
---|---|
回归 | MSE, MAE, R 2 R^2 R2 |
分类 | Accuracy, F1-Score, AUC-ROC |
排序 | NDCG, MAP |
防止过拟合
- 早停法:验证集性能不再提升时停止迭代
- 正则化:通过 γ \gamma γ, λ \lambda λ 控制复杂度
- 子采样:每次迭代随机选择部分样本或特征
4. 应用案例
4.1 金融风控
- 场景:信用评分卡
- 特征:收入、负债比、交易频率
- 效果:AUC 提升 12% 对比逻辑回归
4.2 推荐系统
- 场景:电商点击率预测
- 特征组合:自动学习“用户年龄×商品类别”等交叉特征
- 优势:处理高维稀疏特征优于协同过滤
4.3 计算机视觉
- 场景:图像语义分割
- 做法:GBDT 处理 CNN 提取的特征向量
- 结果:在 Pascal VOC 上 mIOU 提升 3.2%
5. 面试题及答案
Q1:GBDT 为什么拟合负梯度?
A:通过梯度下降在函数空间优化,负梯度是损失下降最快的方向。
Q2:如何处理分类特征?
A:最佳实践是使用直方图算法(如 LightGBM):
- 按特征取值排序
- 根据梯度直方图寻找最优分裂点
- 复杂度从 O ( # categories ) O(\#\text{categories}) O(#categories) 降至 O ( bin ) O(\text{bin}) O(bin)
Q3:GBDT vs Random Forest?
维度 | GBDT | Random Forest |
---|---|---|
基学习器关系 | 串行依赖 | 并行独立 |
偏差-方差 | 低偏差 | 低方差 |
过拟合 | 易过拟合(需早停) | 抗过拟合能力强 |
数据敏感度 | 需特征缩放 | 无需特征缩放 |
6. 优缺点分析
优点
- 非线性能力强:自动捕捉高阶交互特征
- 鲁棒性好:对异常值和缺失值不敏感
- 可解释性:可通过特征重要性分析(累积分裂增益)
Importance j = ∑ splits ( j ) Gain \text{Importance}_j = \sum_{\text{splits}(j)} \text{Gain} Importancej=splits(j)∑Gain - 适用广泛:支持回归/分类/排序任务
缺点
- 训练效率低:串行训练无法并行化(改进:LightGBM 用 leaf-wise 生长)
- 高维稀疏数据:文本数据表现不如神经网络
- 超参敏感:需精细调参(树深度、学习率等)
7. 数学推导示例(回归问题)
目标:最小化平方损失 L = 1 2 ( y i − F ( x i ) ) 2 L = \frac{1}{2}(y_i - F(x_i))^2 L=21(yi−F(xi))2
伪残差:
r i = − ∂ L ∂ F ∣ F = F m − 1 = y i − F m − 1 ( x i ) r_i = -\frac{\partial L}{\partial F} \bigg|_{F=F_{m-1}} = y_i - F_{m-1}(x_i) ri=−∂F∂L F=Fm−1=yi−Fm−1(xi)
叶子权重(设 λ = 0 \lambda=0 λ=0):
w j ∗ = ∑ i ∈ R j r i ∣ R j ∣ = 残差的均值 w_j^* = \frac{\sum_{i \in R_j} r_i}{|R_j|} = \text{残差的均值} wj∗=∣Rj∣∑i∈Rjri=残差的均值
模型更新:
F m ( x ) = F m − 1 ( x ) + ν ∑ j = 1 J w j 1 ( x ∈ R j ) F_m(x) = F_{m-1}(x) + \nu \sum_{j=1}^J w_j \mathbf{1}(x \in R_j) Fm(x)=Fm−1(x)+νj=1∑Jwj1(x∈Rj)
💡 关键洞察:GBDT 将优化问题转化为函数空间的梯度下降,每棵树对应一次梯度更新。实际应用优先选择改进算法(XGBoost/LightGBM/CatBoost),它们在效率、准确性和工程实现上均有显著提升。
相关文章:

【机器学习基础】机器学习入门核心算法:GBDT(Gradient Boosting Decision Tree)
机器学习入门核心算法:GBDT(Gradient Boosting Decision Tree) 1. 算法逻辑2. 算法原理与数学推导2.1 目标函数2.2 负梯度计算2.3 决策树拟合2.4 叶子权重计算2.5 模型更新 3. 模型评估评估指标防止过拟合 4. 应用案例4.1 金融风控4.2 推荐系…...

基于开源AI大模型AI智能名片S2B2C商城小程序源码的销售环节数字化实现路径研究
摘要:在数字化浪潮下,企业销售环节的转型升级已成为提升竞争力的核心命题。本文基于清华大学全球产业研究院《中国企业数字化转型研究报告(2020)》提出的“提升销售率与利润率、打通客户数据、强化营销协同、构建全景用户画像、助…...

Spring Cache核心原理与快速入门指南
文章目录 前言一、Spring Cache核心原理1.1 架构设计思想1.2 运行时执行流程1.3 核心组件协作1.4 关键机制详解1.5 扩展点设计1.6 与Spring事务的协同 二、快速入门实战三、局限性3.1 多级缓存一致性缺陷3.2 分布式锁能力缺失3.3 事务集成陷阱 总结 前言 在当今高并发、低延迟…...

Redisson学习专栏(四):实战应用(分布式会话管理,延迟队列)
文章目录 前言一、为什么需要分布式会话管理?1.1 使用 Redisson 实现 Session 共享 二、订单超时未支付?用延迟队列精准处理2.1 RDelayedQueue 核心机制2.2 订单超时处理实战 总结 前言 在现代分布式系统中,会话管理和延迟任务处理是两个核心…...

java程序从服务器端到Lambda函数的迁移与优化
source:https://www.jfokus.se/jfokus24-preso/From-Serverful-to-Serverless-Java.pdf 从传统的服务器端Java应用,到如今的无服务器架构。这不仅仅是技术名词的改变,更是开发模式和运维理念的一次深刻变革。先快速回顾一下我们熟悉的“服务…...

使用yocto搭建qemuarm64环境
环境 yocto下载 # 源码下载 git clone git://git.yoctoproject.org/poky git reset --hard b223b6d533a6d617134c1c5bec8ed31657dd1268 构建 # 编译镜像 export MACHINE"qemuarm64" . oe-init-build-env bitbake core-image-full-cmdline 运行 # 跑虚拟机 export …...
Vue 3前沿生态整合:WebAssembly与TypeScript深度实践
一、Vue 3 WebAssembly:突破性能天花板 01、WebAssembly:浏览器中的原生性能 WebAssembly(Wasm)是一种可在现代浏览器中运行的二进制指令格式,其性能接近原生代码。结合Vue 3的响应式架构,我们可以在前端…...

Linux系统下安装配置 Nginx
Windows Nginx https://nginx.org/en/download.htmlLinux Nginx https://nginx.org/download/nginx-1.24.0.tar.gz解压 tar -zxvf tar -zxvf nginx-1.18.0.tar.gz #解压安装依赖(如未安装) yum groupinstall "Development Tools" -y yum…...
Kotlin 中集合遍历有哪几种方式?
1 for-in 循环(最常用) val list listOf("A", "B", "C") for (item in list) {print("$item ") }// A B C 2 forEach 高阶函数 val list listOf("A", "B", "C") list.forEac…...
图像卷积OpenCV C/C++ 核心操作
图像卷积:OpenCV C 核心操作 图像卷积是图像处理和计算机视觉领域最基本且最重要的操作之一。它通过一个称为卷积核(或滤波器)的小矩阵,在输入图像上滑动,并对核覆盖的图像区域执行元素对应相乘后求和的运算ÿ…...

LiveGBS作为下级平台GB28181国标级联2016|2022对接海康大华宇视华为政务公安内网等GB28181国标平台查看级联状态及会话
LiveGBS作为下级平台GB28181国标级联2016|2022对接海康大华宇视华为政务公安内网等GB28181国标平台查看级联状态及会话 1、GB/T28181级联概述2、搭建GB28181国标流媒体平台3、获取上级平台接入信息3.1、向下级提供信息3.2、上级国标平台添加下级域3.3、接入LiveGBS示例 4、配置…...
leetcode17.电话号码的字母组合:字符串映射与回溯的巧妙联动
一、题目深度解析与字符映射逻辑 题目描述 给定一个仅包含数字 2-9 的字符串 digits,返回所有它能表示的字母组合。数字与字母的映射关系如下(与电话按键相同): 2: "abc", 3: "def", 4: "ghi", …...

Gartner《2025 年软件工程规划指南》报告学习心得
一、引言 软件工程领域正面临着前所未有的变革与挑战。随着生成式人工智能(GenAI)等新兴技术的涌现、市场环境的剧烈动荡以及企业对软件工程效能的更高追求,软件工程师们必须不断适应和拥抱变化,以提升自身竞争力并推动业务发展。Gartner 公司发布的《2025 年软件工程规划…...
数据库 | 使用timescaledb和大模型进行数据分析
时序数据库:timescaledb 大模型:通义千问2.5 对话开始前提示词: 我正在做数据分析,以下是已知信息: 数据库:timescaledb,表名:dm_tag_value,tag_name列是位号名,app_time列是时间,…...
快速阅读源码
Doxygen 轻松生成包含类图、调用关系图的 HTML 和 PDF 文档, Graphviz 可以用来生成类图、调用图 sudo apt-get install doxygen graphviz brew install doxygen graphviz#HTML 文档: open docs/html/index.html一、Doxyfile配置: Doxyfile 文件 doxygen Doxyfile P…...
linux创建虚拟网卡和配置多ip
1.展示当前网卡信息列表: linux上: ip a ifconfigwindows上: ipconfig 2.创建虚拟网卡对: sudo ip link add name veth0 type veth peer name veth1 在 ip link add 命令中,type 参数可以指定多种虚拟网络设备类型&…...

Java Class类文件结构
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
AI问答-Vue3+TS:reactive创建一个响应式数组,用一个新的数组对象来替换它,同时保持响应性
在 Vue 3 中,当你使用 reactive 创建一个响应式数组后,如果你想用一个新的数组对象来替换它,同时保持响应性,有几种方法可以实现 方法一:直接替换整个数组(推荐) import { reactive } from vu…...

quasar electron mode如何打包无边框桌面应用程序
预览 开源项目Tokei Kun 一款简洁的周年纪念app,现已发布APK(安卓)和 EXE(Windows) 项目仓库地址:Github Repo 应用下载链接:Github Releases Preparation for Electron quasar dev -m elect…...

【HW系列】—Windows日志与Linux日志分析
文章目录 一、Windows日志1. Windows事件日志2. 核心日志类型3. 事件日志分析实战详细分析步骤 二、Linux日志1. 常见日志文件2. 关键日志解析3. 登录爆破检测方法日志分析核心要点 一、Windows日志 1. Windows事件日志 介绍:记录系统、应用程序及安全事件&#x…...

VIN码识别解析接口如何用C#进行调用?
一、什么是VIN码识别解析接口? VIN码不仅是车辆的“身份证”,更是连接制造、销售、维修、保险、金融等多个环节的数字纽带。而VIN码查询API,正是打通这一链条的关键工具。 无论是汽车电商平台、二手车商、维修厂,还是保险公司、金…...

动态规划之网格图模型(一)
文章目录 动态规划之网格图模型(一)LeetCode 64. 最小路径和思路Golang 代码 LeetCode 62. 不同路径思路Golang 代码 LeetCode 63. 不同路径 II思路Golang 代码 LeetCode 120. 三角形最小路径和思路Golang 代码 LeetCode 3393. 统计异或值为给定值的路径…...

PCB设计实践(三十)地平面完整性
在高速数字电路和混合信号系统设计中,地平面完整性是决定PCB性能的核心要素之一。本文将从电磁场理论、信号完整性、电源分配系统等多个维度深入剖析地平面设计的关键要点,并提出系统性解决方案。 一、地平面完整性的电磁理论基础 电流回流路径分析 在PC…...
x86_64-apple-ios-simulator 错误
Could not find module ImagePicker for target x86_64-apple-ios-simulator; found: arm64, arm64-apple-ios-simulator 解决方案一 添加 arm64。 搜索 Excluded Architectures ,添加arm64 解决方案二 在Podfild中,添加佐料。在文件的最下方添加如…...

使用ray扩展python应用之流式处理应用
流式处理就是数据一来,咱们就得赶紧处理,不能攒批再算。这里的实时不是指瞬间完成,而是要在数据产生的那一刻,或者非常接近那个时间点,就做出响应。这种处理方式,我们称之为流式处理。 流式处理的应用场景…...

IP证书的作用与申请全解析:从安全验证到部署实践
在网络安全领域,IP证书(IP SSL证书)作为传统域名SSL证书的补充方案,专为公网IP地址提供HTTPS加密与身份验证服务。本文将从技术原理、应用场景、申请流程及部署要点四个维度,系统解析IP证书的核心价值与操作指南。 一…...
第四十一天打卡
简单CNN 知识回顾 数据增强 卷积神经网络定义的写法 batch归一化:调整一个批次的分布,常用与图像数据 特征图:只有卷积操作输出的才叫特征图 调度器:直接修改基础学习率 卷积操作常见流程如下: 1. 输入 → 卷积层 →…...
C++中指针常量和常量指针的区别
C中指针常量和常量指针的区别 前言 在 C/C 编程中,指针是一个非常重要的概念,而指针常量和常量指针又是指针的两种特殊形式,它们在实际开发中有着不同的应用场景和语义,理解它们的区别对于编写高质量的代码至关重要。本文将详细…...
深入解析向量数据库:基本原理与主流实现
向量数据库(Vector Database)是专门用于存储和检索高维向量的数据库系统。近年来,随着机器学习和深度学习的发展,文本、图像、音频等非结构化数据常被转换为向量表示,用于语义搜索和推荐等场景。这篇博客将面向 Java/P…...
VectorNet:自动驾驶中的向量魔法
在自动驾驶的世界里,车辆需要像超级英雄一样,拥有“透视眼”和“预知未来”的能力,才能在复杂的交通环境中安全行驶。今天,我们要介绍一个神奇的工具——VectorNet,它就像是给自动驾驶车辆装上了一双智能的眼睛&#x…...