Python28-8 GBM梯度提升算法

梯度提升算法(Gradient Boosting Machine,GBM)是一种集成学习方法,通过逐步构建一系列简单模型(通常是决策树),并结合这些模型来提高整体预测性能。GBM广泛用于回归和分类任务,因为它具有较高的准确性和灵活性。

GBM的基本原理

GBM的思想源于提升方法(Boosting)。提升方法是一种将多个弱学习器(性能稍好于随机猜测的模型)组合成一个强学习器的技术。GBM通过以下步骤实现这一过程:

  1. 初始化模型:选择一个初始模型  ,通常是目标值的均值:

    其中,是损失函数,是真实值。

  2. 迭代更新模型:对于每一轮 ,执行以下步骤:

    • 计算残差:计算当前模型的预测误差(残差),即:

      这里,残差表示真实值和当前模型预测值之间的差异。

    • 拟合弱学习器:训练一个新的弱学习器 来拟合这些残差:

    • 更新模型:更新模型的预测值,将新弱学习器加入现有模型中,并乘以一个学习率 来控制每个弱学习器的贡献:

      其中,是学习率,通常介于 0 到 1 之间。

  3. 重复迭代:继续迭代步骤2,直到达到预定的迭代次数 或其他停止条件。

损失函数和梯度

GBM的核心在于利用损失函数的梯度来引导模型更新。不同的损失函数适用于不同的任务:

  • 对于回归问题,常用的损失函数是均方误差(MSE):

  • 对于分类问题,常用的损失函数是对数损失(Log Loss):

在每次迭代中,计算损失函数的负梯度作为残差,用于拟合新的弱学习器。

Python实例

以下是一个更详细的Python实例,展示如何使用GBM进行回归任务,并包含更多的解释和参数设置:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error

# 生成示例数据
np.random.seed(42)  # 设置随机种子以保证结果可重复
X = np.random.rand(1000, 10)  # 生成1000个样本,每个样本有10个特征的随机数据
y = X @ np.random.rand(10) + np.random.rand(1000) * 0.1  # 生成目标值y,是特征的线性组合加上噪声

# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 80%数据用于训练,20%数据用于测试

# 创建梯度提升回归器
gbm = GradientBoostingRegressor(n_estimators=200, learning_rate=0.1, max_depth=3, random_state=42)  # 创建GBM回归器,设置树的数量、学习率和最大深度

# 训练模型
gbm.fit(X_train, y_train)  # 在训练集上训练GBM模型

# 初始化列表存储训练误差和测试误差
train_errors = []
test_errors = []

# 使用staged_predict获取每个阶段的预测误差
for y_train_pred in gbm.staged_predict(X_train):
    train_errors.append(mean_squared_error(y_train, y_train_pred))  # 记录训练误差

for y_test_pred in gbm.staged_predict(X_test):
    test_errors.append(mean_squared_error(y_test, y_test_pred))  # 记录测试误差

# 绘制训练过程中树的数量与均方误差的关系
plt.figure(figsize=(12, 6))  # 设置图形大小
plt.plot(range(1, gbm.n_estimators + 1), train_errors, label='Train')  # 绘制训练误差曲线
plt.plot(range(1, gbm.n_estimators + 1), test_errors, label='Test')  # 绘制测试误差曲线
plt.xlabel('Number of Trees')  # 设置x轴标签
plt.ylabel('Mean Squared Error')  # 设置y轴标签
plt.title('Number of Trees vs. Mean Squared Error')  # 设置图形标题
plt.legend()  # 显示图例
plt.show()  # 显示图形

# 显示特征重要性
feature_importance = pd.Series(gbm.feature_importances_, index=[f'Feature {i}' for i in range(X.shape[1])])  # 获取特征重要性
feature_importance.sort_values(ascending=False).plot(kind='bar', title='Feature Importance')  # 绘制特征重要性条形图
plt.xlabel('Features')  # 设置x轴标签
plt.ylabel('Importance')  # 设置y轴标签
plt.show()  # 显示图形

图片

上图展示了模型在训练和测试集上的均方误差(MSE)随决策树数量增加的变化情况。可以看出随着决策树数量的增加,模型在训练集和测试集上的均方误差逐渐降低,逐渐趋近于0,表示模型的性能越来越好。

图片

这张图展示了每个特征对模型的重要性排序,我们可以直观地看出特征5、8、9是重要性较高的前几个特征。

关键参数解释
  • n_estimators: 弱学习器的个数(即迭代次数)。更多的树可能会提升模型的准确性,但也会增加训练时间和可能的过拟合。

  • learning_rate: 学习率,用于缩小每个弱学习器的贡献。较小的学习率通常需要更多的树来达到同样的训练效果。

  • max_depth: 决策树的最大深度,控制每个弱学习器的复杂度。较浅的树可以防止过拟合。

优缺点

优点

  • 能够处理各种类型的数据,包括连续和离散数据。

  • 具有较高的预测准确性,尤其在处理复杂数据集时表现优异。

  • 具有特征选择的功能,可以输出特征的重要性。

缺点

  • 训练时间较长,尤其在数据集较大或参数设置较高时。

  • 对于超参数(如树的数量、深度、学习率等)的选择较为敏感,需要进行调参以获得最佳性能。

梯度提升算法通过逐步构建和组合多个弱学习器,逐渐提升模型性能,是一种强大的机器学习方法。其灵活性和高准确性使其在许多实际应用中得到广泛使用。

以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计】017基于微信小程序的学生公寓电费信息管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

51单片机嵌入式开发:1、STC89C52环境配置到点亮LED

STC89C52环境配置到点亮LED 1 环境配置1.1 硬件环境1.2 编译环境1.3 烧录环境 2 工程配置2.1 工程框架2.2 工程创建2.3 参数配置 3 点亮一个LED3.1 原理图解读3.2 代码配置3.3 演示 4 总结 1 环境配置 1.1 硬件环境 硬件环境采用“华晴电子”的MINIEL-89C开发板,这…

在iPhone / iPad上轻松模拟GPS位置 AnyGo for Mac

在iPhone / iPad上轻松模拟GPS位置 AnyGo for Mac AnyGo for Mac是一款专为Mac电脑用户设计的虚拟定位工具。它可以模拟你的GPS位置,让你的设备显示你在任何世界上的任何地方。无论你是想在游戏中虚拟移动,还是在社交媒体上分享虚拟的旅行照片&#xff0…

基础权限存储

一丶要求 建立用户组shengcan,其id为 2000建立用户组 caiwu,其id 为2001建立用户组 jishu,其id 为 2002建立目录/sc,此目录是 shengchan 部门的存储目录,只能被 shengchan 组的成员操作4.其他用户没有任何权限建立目录/cw,此目录…

第二周:李宏毅机器学习笔记

第二周学习周报 摘要Abstract一、深度学习1.Backpropagation(反向传播)1.1 链式法则1.2 Forward pass(前向传播)1.3 Backward pass(向后传播)1.4 总结 2. Regression(神奇宝贝案例)2…

Bug记录:【com.fasterxml.jackson.databind.exc.InvalidDefinitionException】

bug记录 序列化错误 异常com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 完整错误(主要是FAIL_ON_EMPTY_BEANS) 00:15:20.250 [http-nio-3000-exec-1] ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - S…

【漏洞复现】TerraMaster TOS exportUser.php 远程命令执行

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

Windows编程[下]

Windows编程[下] 一、线程1. 内核对象2.多线程群聊服务器3.多线程群聊客户端4.线程同步之事件对象常用函数和参数解释 二、进程三、Qt1.第一个Qt项目2.Qt助手的使用3.QPushButton简介4.Qt对象树对象树的基本概念使用对象树模式的好处对象树的问题 5.信号与槽5.1 自定义信号和槽…

通用的职位招聘小程序ui模板

蓝色简单的校园招聘,行业招聘,职位招聘手机小程序页面模板。包含:职位列表、职位详情、基本信息填写、登录、个人主页、消息页面等功能 通用的职位招聘小程序ui模板

InvalidVersionSpecError: Invalid version spec: =2.7解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

驾校管理系统的全面革新与升级

智慧驾校系统是一款专为现代驾校量身定制的综合性管理平台,它深度融合了云计算、大数据、物联网及人工智能等前沿技术,旨在为驾校打造一个高效、智能、便捷的运营生态系统。该系统通过数字化、信息化的手段,彻底革新了传统驾校的管理模式,不仅极大地提升了驾校的运营效率,…

初识Spark

一、简介 官网:Apache Spark™ - Unified Engine for large-scale data analytics Apache的顶级项目,用于大规模数据处理的统一分析引擎。 支持语言:Java、Scala、Python和R (源码为Scala) 高级工具: 1、SparkSQL用于SQL和结构…

ARM汇编与机器码、汇编指令

文章目录 1. CISC与RISC指令集 2. ARM汇编指令 3. 汇编与机器码 4. 汇编指令格式 5. MOV指令 6. BL指令 7. B指令 8. ADD/SUB指令 9. LDR/STR指令 1. CISC与RISC指令集 根据指令的复杂度,所有CPU可以分为两类: CISC(Complex Instr…

破局 AI 2.0 时代:利用 AI 提升自我核心竞争力

文章目录 破局 AI 2.0 时代:利用 AI 提升自我核心竞争力1. AI 2.0 时代1.1 特点1.2 发展1.3 影响 2. AI 2.0 时代的机遇 & 挑战2.1 AI 对行业市场的冲击2.2 挑战变为机遇2.3 不同场景下的 AI 效能提升2.3.1 自动化办公任务2.3.2 提升学习效率2.3.3 创意生成与内…

SpringBoot彩蛋之定制启动画面

写在前面 在日常开发中,我们经常会看到各种各样的启动画面。例如以下几种 ① spring项目启动画面 ② mybatisplus启动画面 ③若依项目启动画面 还有很多各式各样好看的启动画面,那么怎么定制这些启动画面呢? 一、小试牛刀 ① 新建一个Spr…

【分布式系统三】监控平台Zabbix对接grafana(截图详细版)

目录 一.安装grafana并启动 二.浏览器访问 三.导入zabbix数据,对接grafana 四.如何导入模版 以前两篇博客为基础 【分布式系统】监控平台Zabbix介绍与部署(命令截图版)-CSDN博客 【分布式系统】监控平台Zabbix自定义模版配置-CSDN博客 …

前端面试题(CSS篇五)

一、设备像素、css 像素、设备独立像素、dpr、ppi 之间的区别? 设备像素指的是物理像素,一般手机的分辨率指的就是设备像素,一个设备的设备像素是不可变的。 css像素和设备独立像素是等价的,不管在何种分辨率的设备上,…

网络连接线相关问题

问题1; 直通线为什么两头都是T568B?是否可以两台T5568A?或者任意线序,只需两头一致? 不行,施工规范规定。(原因;网线最长距离100m,实际用起来要把网线包管,走…

Kafka第四篇——生产数据总体概括,源码解析分区策略,数据收集器,Sender发送线程,key值

目录 流程图以及总体概述 拦截器 分区器以及分区计算策略 为啥进行分区计算? producer生产者怎么知道有哪些分区? 分区计算 如何自定义实现分区器? 想说的在图里啦!宝宝!💡 ​编辑 如果key值忘记传递了呢&a…

前端后花园周刊vol.18-React Native 称唯一推荐的社区框架是Expo

⚡️行业动态 React Native 团队推荐使用 Expo 框架构建应用程序 React Native 发文称:唯一推荐的社区框架是Expo,Expo 的开发者从 React Native 早期就开始支持 React Native 生态系统,相信 Expo 提供的开发者体验是同类中最好的。 &…