【机器学习】机器学习的基本分类-监督学习-梯度提升树(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.mzph.cn/web/62203.shtml

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

相关文章

【机器学习 | 基于Lasso回归和随机森林的上海链家二手房房价预测】

文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 去除重复数据2.4 去除缺失数据2.5 面积、价格、单价、楼层、建筑时间数据提取2.6 朝向数据处理 🏳️‍🌈 3. 特…

【HarmonyOS NEXT】flexShrink属性

一、背景 希望达到的布局效果是文字与按钮左右对齐,居中显示,但实际效果中按钮的显示与效果不符,如下图所示 二、问题 按钮是用row组件包裹的text,左右padding给的是一样的大小,但是明显右边padding会比左边padding大…

CentOS 7 上安装 MySQL 8.0.40 (二进制安装)

要在 CentOS 7 上安装 MySQL 8.0.40,按照以下步骤操作: 下载安装包。 https://dev.mysql.com/downloads/mysql/ 下载之前查看系统c版本 解压安装包 首先,解压下载的 .tar.xz 安装包。 cd /path/to/your/downloads tar -xvf mysql-8.0…

PHP语法学习(第六天)

💡依照惯例,回顾一下昨天讲的内容 PHP语法学习(第五天)主要讲了PHP中的常量和运算符的运用。 🔥 想要学习更多PHP语法相关内容点击“PHP专栏” 今天给大家讲课的角色是🍍菠萝吹雪,“我菠萝吹雪吹的不是雪,而…

免押租赁系统助力资源共享新模式开创便捷租赁体验

内容概要 免押租赁系统,听起来是不是很酷?这个新模式不仅仅是为了让你少花点钱,它的到来简直就是个革命!以前,租东西时首先想到的就是那个令人心痛的押金,对吧?但现在,免押租赁系统…

oracle之用户的相关操作

(1)创建用户(sys用户下操作) 简单创建用户如下: CREATE USER username IDENTIFIED BY password; 如果需要自定义更多的信息,如用户使用的表空间等,可以使用如下: CREATE USER mall IDENTIFIED BY 12345…

第77期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

如何通过自学成长为一名后端开发工程师?

大家好,我是袁庭新。最近,有星友向我提出了一个很好的问题:如何通过自学成为一名后端开发工程师? 为了解答这个疑问,我特意制作了一个视频来详细分享我的看法和建议。 戳链接:如何通过自学成长为一名后端开…

Linux---对缓冲区的简单理解--第一个系统程序

前序: 首先先理解一下什么是回车与换行;回车和换行是两个概念,它们不是一个东西; 回车:光标回到开始;换行:换到下一行; 如下图: 行缓冲区 如何理解缓冲区问题? 可以认为&#xff0…

[Python学习日记-70] 元类

[Python学习日记-70] 元类 简介 什么是元类 关键字 class 创建类的流程分析 自定义元类控制类的创建 自定义元类控制类的调用 自定义元类的属性查找 自定义元类的应用与练习 简介 在上一篇章当中我们已经了解了面向对象的各种内置函数了,本篇我们将讲述“元类…

数据结构题库11

第五章 树和二叉树 一、单项选择题 1.关于二叉树的下列说法正确的是 (1)。 (1):A.二叉树的度为2 B.二叉树的度可以小于2 C.每一个结点的度都为2 D.至少有一个结点的度为 2.设深度为h(h>0)的二…

学生公寓智能限电系统的功能和作用

学生公寓智能限电系统‌是一种用于管理和限制学生公寓用电的设备和技术,旨在确保用电安全、防止火灾事故,并促进节能减排。以下是关于学生公寓智能限电系统的详细介绍: 1、功能和作用 智能限电系统通过以下功能来管理和限制用电&#xff1a…

MYSQL PARTITIONING分区操作和性能测试

PARTITION OR NOT PARTITION IN MYSQl Bill Karwin says “In most circumstances, you’re better off using indexes instead of partitioning as your main method of query optimization.” According to RICK JAMES: “It is so tempting to believe that PARTITIONing wi…

基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人

导读 本文将详细介绍如何通过 PingCAP 开源项目 AutoFlow 实现快速搭建基于 TiDB 的本地知识库问答机器人。如果提前准备好 Docker、TiDB 环境,整个搭建过程估计在 10 分钟左右即可完成,无须开发任何代码。 文中使用一篇 TiDB 文档作为本地数据源作为示…

基于XML的AOP开发

AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程。 AOP相关术语: 目标对象(Target): 你要去代理的对象,可以理解为之前很单纯的那个对象。 代理对象(Proxy): 你把你那个单纯的对象给我&#xff0c…

记录blender学习过程中遇到的问题

物体发射的方向不对 被发射物体(例如一棵树)n键看旋转归0 切换正视图 将被发射物体的局部坐标的Z轴 指向 全局方向的X轴时 并且把粒子系统设置的物体旋转勾选上 方向就对了 做倒角发现有问题 检查缩放应用、面朝向、有没有重合点(融合点&am…

Ubuntu系统中Redis的安装步骤及服务配置

目录 内容概括 系统环境 安装方式 1、apt包管理器安装 (1)安装redis服务 (2)安装客户端(进入命令行操作使用,包含redis-cli) (3)安装检验 (4&#xf…

半导体设备中的微型导轨应如何选择合适的润滑油?

微型导轨的润滑对于保证其高精度和高稳定性至关重要,尤其是在半导体设备中,微型导轨的润滑油选择需要考虑多个因素,以确保设备的最佳性能和寿命。以下是一些关键点: 1、黏度:润滑油的黏度是影响其流动性和润滑效果的重…

RocketMq详解:六、RocketMq的负载均衡机制

上一章:《SpringBootAop实现RocketMq的幂等》 文章目录 1.背景1.1 什么是负载均衡1.2 负载均衡的意义 2.RocketMQ消息消费2.1 消息的流转过程2.2 Consumer消费消息的流程 3.RocketMq的负载均衡策略3.1 Broker负载均衡3.2 Producer发送消息负载均衡3.3 消费端的负载均…