Python基于TensorFlow实现GRU-Transformer回归模型(GRU-Transformer回归算法)项目实战

embedded/2024/10/31 10:03:29/

说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。

1.项目背景

GRU是循环神经网络(RNN)的一种变体,旨在解决传统RNN中的梯度消失和梯度爆炸问题,同时简化了结构,提高了训练效率。GRU通过引入门控机制来控制信息的遗忘和更新过程,具体包括重置门(reset gate)和更新门(update gate)。

Transformer是一种基于自注意力(Self-Attention)机制的架构,最初由Vaswani等人在2017年提出,主要用于自然语言处理任务,尤其是机器翻译。它摒弃了传统的循环结构,完全依赖于自注意力机制和位置编码来处理序列数据,这使得它能够并行处理所有位置的信息,极大地加速了训练速度。

结合GRU和Transformer的模型,可以综合两者的优点:GRU擅长处理序列中的长期依赖,而Transformer擅长捕捉全局上下文和并行处理,提高效率。 

本项目通过GRU-Transformer算法来构建GRU-Transformer回归模型。   

2.数据获取

本次建模数据来源于网络(本项目撰写人整理而成),数据项统计如下:

编号 

变量名称

描述

1

x1

2

x2

3

x3

4

x4

5

x5

6

x6

7

x7

8

x8

9

x9

10

x10

11

y

因变量

数据详情如下(部分展示):

3.数据预处理

3.1 用Pandas工具查看数据

使用Pandas工具的head()方法查看前五行数据:

关键代码:

3.2数据缺失查看

使用Pandas工具的info()方法查看数据信息:

从上图可以看到,总共有11个变量,数据中无缺失值,共2000条数据。

关键代码: 

3.3数据描述性统计

通过Pandas工具的describe()方法来查看数据的平均值、标准差、最小值、分位数、最大值。

关键代码如下:  

4.探索性数据分析

4.1 y变量分布直方图

用Matplotlib工具的hist()方法绘制直方图:

4.2 相关性分析

从上图中可以看到,数值越大相关性越强,正值是正相关、负值是负相关。

5.特征工程

5.1 建立特征数据和标签数据

关键代码如下:

5.2 数据集拆分

通过train_test_split()方法按照80%训练集、20%测试集进行划分,关键代码如下:

5.3 数据归一化

关键代码如下:

5.4 数据样本增维

数据样本增加维度后的数据形状:

6.构建GRU-Transformer回归模型 

主要使用GRU-Transformer算法来构建回归模型,用于目标回归。 

6.1 模型参数信息  

编号

模型名称

参数

1

GRU-Transformer回归模型 

num_heads=4

2

key_dim=10

3

learning_rate=0.001

4

epochs=50

6.2 模型摘要信息

6.3 模型网络结构

6.4 模型训练集测试集损失曲线图

7.模型评估

7.1评估指标及结果 

评估指标主要包括R方、均方误差、解释性方差、绝对误差等等。

模型名称

指标名称

指标值

测试集

GRU-Transformer回归模型

R方

0.857

均方误差

0.0037

解释方差分

0.8858

绝对误差

 0.0483

从上表可以看出,R方分值为0.857,说明模型效果良好。 

关键代码如下:  

  

7.2 真实值与预测值对比图

从上图可以看出真实值和预测值波动基本一致,模型效果良好。  

8.结论与展望

综上所述,本文采用GRU-Transformer回归算法来构建回归模型,最终证明了我们提出的模型效果良好。此模型可用于日常产品的预测。 


http://www.ppmy.cn/embedded/133840.html

相关文章

知识竞赛活动筹备小组人员分工和安排

组织知识竞赛是一项需要精心策划和团队协作的活动。以下是一些步骤和建议,用于安排组建工作团队及安排工作人员: 1.项目经理: 选择一个项目经理来统筹整个活动。 确定关键角色,如策划、技术、后勤、宣传等。 2.角色分配&#x…

第十七章 章节练习电商首页组件拆分

目录 一、运行效果 二、页面拆分 2.1. 页面拆分思路 2.2. 初始原代码结构 三、拆分后代码 3.1. 拆分后工程结构 3.2. main.js 3.3. App.vue 3.4. XtxTopic.vue 3.5. XtxShortCut.vue 3.6. XtxNewGoods.vue 3.7. XtxHotBrand.vue 3.8. XtxHeaderNav.vue 3.9. Xtx…

Java 语法糖详解

语法糖是大厂 Java 面试常问的一个知识点。 本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的同时,了解这些语法糖背后的原理。 什…

LuaJIT源码分析(五)词法分析

LuaJIT源码分析(五)词法分析 lua虽然是脚本语言,但在执行时,还是先将脚本编译成字节码,然后再由虚拟机解释执行。在编译脚本时,首先需要对源代码进行词法分析,把源代码分解为token流。lua的toke…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《基于灵活运行域的配-微电网协同优化调度方法 》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

NodeJS:利用 Axios 实现 HTTP、HTTPS 和 SOCKS5 代理请求

在日常开发中,网络请求是不可避免的。通过使用代理服务器,可以更好地控制请求的来源、隐藏 IP 地址,或者绕过网络限制。在本篇文章中,我将分享如何使用 axios 库结合 HTTP、HTTPS 和 SOCKS5 代理来发送网络请求,并详细…

Linux | 配置docker环境时yum一直出错的解决方法

yum出错 Centos 7版本出错问题补充:什么是yumyum 和 apt 有什么区别? Centos 7版本 [rootlocalhost yum.repos.d]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)出错问题 问题1 Could not retrieve mirrorlist http://mirrorlist.ce…

IntelliJ IDEA 设置数据库连接全局共享

前言 在日常的软件开发工作中,我们经常会遇到需要在多个项目之间共享同一个数据库连接的情况。默认情况下,IntelliJ IDEA 中的数据库连接配置是针对每个项目单独存储的。这意味着如果你在一个项目中配置了一个数据库连接,那么在另一个项目中…