【机器学习】机器学习的基本分类-监督学习-梯度提升树(Gradient Boosting Decision Tree, GBDT)

梯度提升树是一种基于**梯度提升(Gradient Boosting)**框架的机器学习算法,通过构建多个决策树并利用每棵树拟合前一棵树的残差来逐步优化模型。


1. 核心思想

  • Boosting:通过逐步调整模型,使后续的模型重点学习前一阶段未能正确拟合的数据。
  • 梯度提升:将误差函数的负梯度作为残差,指导新一轮模型的训练。
与随机森林的区别
特性随机森林梯度提升树
基本思想BaggingBoosting
树的训练方式并行训练顺序训练
树的类型完全树通常是浅树(弱学习器)
应用场景抗过拟合、快速训练高精度、复杂任务

 

2. 算法流程

  1. 输入

    • 数据集 D = \{ (x_i, y_i) \}_{i=1}^{n}​。
    • 损失函数 L(y, \hat{y}),如平方误差、对数似然等。
    • 弱学习器个数 T 和学习率 η。
  2. 初始化模型

    f_0(x) = \arg\min_c \sum_{i=1}^n L(y_i, c)
    • f_0 是一个常数,通常为目标变量的均值(回归)或类别概率的对数(分类)。
  3. 迭代训练每棵弱学习器(树)

    • 第 t 次迭代:
      1. 计算第 t 轮的负梯度(残差):
        r_i^{(t)} = -\left[ \frac{\partial L(y_i, f(x_i))}{\partial f(x_i)} \right]_{f=f_{t-1}}
        残差反映当前模型未能拟合的部分。
      2. 构建决策树 h_t(x) 拟合残差 r_i^{(t)}
      3. 计算最佳步长(叶节点输出值): \gamma_t = \arg\min_\gamma \sum_{i=1}^n L\left(y_i, f_{t-1}(x_i) + \gamma h_t(x_i)\right)
      4. 更新模型: f_t(x) = f_{t-1}(x) + \eta \gamma_t h_t(x) 其中 η 是学习率,控制每棵树的贡献大小。
  4. 输出模型: 最终模型为:

    f_T(x) = \sum_{t=1}^T \eta \gamma_t h_t(x)

 

3. 损失函数

GBDT 可灵活选择损失函数,以下是常用的几种:

  1. 平方误差(MSE,回归问题)

    L(y, \hat{y}) = \frac{1}{2} (y - \hat{y})^2
    • 负梯度: r_i = y_i - f(x_i)
  2. 对数似然(Log-Loss,二分类问题)

    L(y, \hat{y}) = -\left[ y \log \sigma(\hat{y}) + (1-y) \log(1-\sigma(\hat{y})) \right]
    • 负梯度: r_i = y_i - \sigma(f(x_i))
  3. 指数损失(Adaboost)

    L(y, \hat{y}) = e^{-y\hat{y}}

 4. GBDT 的优缺点

优点
  1. 灵活性:支持回归和分类任务,且损失函数可定制。
  2. 高精度:由于采用 Boosting 框架,能取得非常好的预测效果。
  3. 特征选择:内置特征重要性评估,帮助筛选关键特征。
  4. 处理缺失值:部分实现(如 XGBoost)可以自动处理缺失值。
缺点
  1. 训练时间长:由于弱学习器依次构建,训练过程较慢。
  2. 对参数敏感:需要调整学习率、树的数量、最大深度等参数。
  3. 不擅长高维稀疏数据:相比线性模型和神经网络,GBDT 在处理高维数据(如文本数据)时表现一般。

 5. GBDT 的改进

  1. XGBoost

    • 增加正则化项,控制模型复杂度。
    • 支持并行化计算,加速训练。
    • 提供更高效的特征分裂方法。
  2. LightGBM

    • 提出叶子分裂(Leaf-Wise)策略。
    • 适合大规模数据和高维特征场景。
  3. CatBoost

    • 专门针对分类特征优化。
    • 避免目标泄露(Target Leakage)。

 6. GBDT 的代码实现

以下是 GBDT 的分类问题实现:

from sklearn.datasets import make_classification
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 生成数据
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建 GBDT 模型
gbdt = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
gbdt.fit(X_train, y_train)# 预测
y_pred = gbdt.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("分类准确率:", accuracy)# 特征重要性
import matplotlib.pyplot as plt
import numpy as npfeature_importances = gbdt.feature_importances_
indices = np.argsort(feature_importances)[::-1]plt.figure(figsize=(10, 6))
plt.title("Feature Importance")
plt.bar(range(X.shape[1]), feature_importances[indices], align="center")
plt.xticks(range(X.shape[1]), indices)
plt.show()

输出结果

分类准确率: 0.9366666666666666


7. 应用场景

  1. 回归问题:如预测房价、商品销量。
  2. 分类问题:如金融风险预测、垃圾邮件分类。
  3. 排序问题:如搜索引擎的结果排序。
  4. 时间序列问题:预测趋势或模式。

GBDT 是机器学习中的经典算法,尽管深度学习在许多领域占据主导地位,但在表格数据和中小规模数据集的应用中,GBDT 仍然是非常强大的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/34287.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

什么是CMMI

CMMI的定义与目的 CMMI(Capability Maturity Model Integration,即能力成熟度模型集成模型)是一种用于评估和改进组织在软件开发、系统集成、项目管理等方面过程能力的框架。它旨在帮助组织识别其当前的过程能力水平,并提供一个路…

MySQL 入门大全:常用函数

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

动态风景构图技巧和方法

拍摄时要有耐心 当遇到绝佳的拍摄场景时,要放慢脚步,慢慢来,给自己时间去感受它。可能会有一个显而易见的构图方式,你可以先按这个方式拍摄,但随后也要花点时间找找其他可能的构图。 光线会直接影响构图,…

RabbitMq死信队列延迟交换机

架构图 配置 package com.example.demo.config;import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class DeadLetterConfig {public String …

Sringboot项目实现文件上传至linux指定目录

本篇文章讲述一个springboot项目如何实现一个文件上传接口,涉及vsftpd服务、SSH协议以及对linux系统的一些配置。 一、springboot工程部分 本篇文章略过springboot创建过程,具体见之前发过的文章 1.1在pom.xml中添加SFTP(SSH 文件传输协议…

电气自动化 基于PLC工业机器人视觉定位及自动码垛系统的设计

摘要 随着我国经济的不断发展,工业机器人将会得到更多的应用,从而达到整个行业的自动化和高速度。由于生产效率的不断提升,对成品进行检验、加工、分级等工作尤为关键。工业机器人是一种高科技的机械设备,它被广泛地运用于焊接、…

云数据库 OceanBase

OceanBase 是阿里巴巴集团自主研发的一款分布式关系型数据库。它采用了分布式架构,能够在大规模、复杂环境下处理海量数据。OceanBase 旨在解决传统数据库在高并发、大规模数据和高可用性场景下的瓶颈,尤其适用于金融、电商、物流等需要高性能、高可靠的…

数据库性能诊断工具DBdoctor 产品介绍

基本信息 DBdoctor是一款专注于数据库性能的生态软件,致力于解决一切数据库性能问题,实现DB AGI。行业首次将eBPF技术聚焦在数据库领域,创新性实现性能可观测。 功能介绍 1.核心功能 SQL审核,性能评估: 独家SQL性能…

AIGC与医学统计学的完美融合:打造智能医疗新时代

文章目录 一、理解统计学基础概念二、掌握描述性统计方法三、学习假设检验方法四、掌握回归分析方法五、学习生存分析方法六、利用现代技术和工具七、注重实践和应用《医学统计学从入门到精通》亮点内容简介作者简介目录获取方式 在AIGC(人工智能生成内容&#xff0…

【git reset】本地下载特定历史提交哈希值的github文件【未联网服务器】进行git reset操作

本地电脑下载git文件,并进行git reset操作 问题描述:解决方法:方法1:直接下载特定版本的github压缩包。方法二: 在本地windows电脑上安装git工具进行git reset版本回退,之后上传相应版本的压缩包到服务器上…

emacs 折腾日记(一)——序言

初次知道emacs这个东西是在《程序员的呐喊》这本书。书中的作者提倡学习编译原理,推崇emacs。现在距离我知道emacs已经过去了快8年,期间不断的重复学习——放弃——学习的路子。与过去学习vim类似,vim我也经历过放弃到学习,最后有…

Django基础cookie和session

1.会话跟踪 ​ 什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。例如给10086打个电话,你就是客户端,而10086服务人员就是服务器。从双方接通电话那一刻起,会话就开始…

EMC测试——RE、CE、ESD

①辐射发射测试(RE):评估电子、电气产品或系统在工作状态下产生的电磁辐射干扰程度,确保其不会干扰其他电子设备,同时可以确保产品的电磁辐射水平在安全范围内,从而保护用户免受电磁辐射的危害。消费类常见测试标准:EN…

iOS平台接入Facebook登录

1、FB开发者后台注册账户 2、完善App信息 3、git clone库文件代码接入 4、印尼手机卡开热点调试 备注: 可能遇到的问题: 1、Cocos2dx新建的项目要更改xcode的git设置,不然卡在clone,无法在线获取FBSDK 2、动态库链接 需要在…

解决 PyTorch 中的 AttributeError: ‘NoneType‘ object has no attribute ‘reshape‘ 错误

这里写目录标题 一、错误分析二、错误原因三、解决方案1. 检查损失函数2. 检查前向传播3. 检查 backward 函数4. 检查梯度传递 四、前向传播与反向传播1. 前向传播2. 反向传播3. 自定义 backward 函数示例反向传播过程:常见的错误:1:损失函数…

PT8M2102 触控型 8Bit MCU

1 产品概述 ● PT8M2102 是一款基于 RISC 内核的8位 MTP 单片机,内部集成了电容式触摸感应模块、TIMER,PWM、LVR、LVD、WDT等外设,其主要用作触摸按键开关,广泛适用于触控调光、电子玩具、消费电子、家用电器等领域,具…

工业—使用Flink处理Kafka中的数据_EnvironmentData2

使用Flink 消费 Kafka 中 EnvironmentData 主题的数据 , 监控各环境检测设备数据,当温度 ( Temperature 字段)持续 3 分钟高于

如何通过 Windows 自带的启动管理功能优化电脑启动程序

在日常使用电脑的过程中,您可能注意到开机后某些程序会自动运行。这些程序被称为“自启动”或“启动项”,它们可以在系统启动时自动加载并开始运行,有时甚至在后台默默工作。虽然一些启动项可能是必要的(如杀毒软件)&a…

javaScript13DOM获取

3.1、DOM初相识 3.1.1、DOM简介 文档对象模型(Document Object Model ,简称DOM),它就是一些系列编程接口,有了这些接口,就可以改变页面内容,结构和样式 DOM树: 文档:一…

【深度学习基础之Scikit-learn库3】Scikit-learn 库提供了丰富的功能,包括数据预处理、特征选择、模型训练与评估....

【深度学习基础之Scikit-learn库3】Scikit-learn 库提供了丰富的功能,包括数据预处理、特征选择、模型训练与评估… 【深度学习基础之Scikit-learn库3】Scikit-learn 库提供了丰富的功能,包括数据预处理、特征选择、模型训练与评估… 文章目录 【深度学…