Python基于TensorFlow实现时间序列循环神经网络回归模型(LSTM时间序列回归算法)项目实战

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

1.项目背景

随着信息技术的发展和传感器设备的广泛应用,时间序列数据的产生量急剧增加。无论是股市价格的波动、电力消耗的趋势还是环境监测的数据变化,准确地预测这些序列数据对于决策制定至关重要。然而,传统的统计方法在处理大规模、高维度且具有复杂模式的时间序列数据时面临诸多挑战。因此,寻找一种能够高效处理此类数据的预测方法变得尤为关键。

循环神经网络(RNN),特别是长短期记忆网络(LSTM),因其强大的学习长期依赖性能力,在时间序列预测任务中展现出巨大的潜力。LSTM通过引入输入门、遗忘门和输出门等机制,能够有效地学习时间序列中的复杂模式,并且在一定程度上缓解了梯度消失问题,使得模型能够更准确地进行长期预测。

通过这个项目,我们希望能够展示LSTM在处理时间序列数据方面的优越性,并为相关领域的研究者和从业者提供一个可参考的实践案例,促进深度学习技术在时间序列分析中的进一步应用和发展。

本项目通过Python基于TensorFlow实现时间序列循环神经网络回归模型(LSTM时间序列回归算法)项目实战。     

2.数据获取

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

编号 

变量名称

描述

1

date

2

y

因变量

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

3.数据预处理

3.1 用Pandas工具查看数据

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

关键代码:

3.2数据缺失查看

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

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

关键代码:  

3.3数据描述性统计

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

关键代码如下:  

3.4数据缺失值处理

数据缺失值采用均值填充,处理后,统计信息如下:

通过上图可以看到,数据缺失值已处理完成。

3.5数据异常值检测

采用z-score原则进行检测,检测结果如下:

通过上图可以看到,数据中无异常值。

4.探索性数据分析

4.1 y变量分布直方图

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

5.特征工程

5.1 数据归一化

关键代码如下:

5.2 构建特征数据和标签数据

关键代码如下:

5.3 数据集拆分

关键代码如下:

5.4 构建批数据

关键代码如下:

6.构建LSTM时间序列回归模型 

主要使用LSTM回归算法,用于目标回归。 

6.1 构建模型 

编号

模型名称

参数

1

LSTM时间序列模型 

units

2

epochs

6.2 模型摘要信息

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

7.模型评估

7.1评估指标及结果 

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

模型名称

指标名称

指标值

测试集

LSTM时间序列回归模型 

R方

0.9909

均方误差

0.0003

解释方差分

0.9915

绝对误差

0.0144

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

关键代码如下:  

  

7.2 真实值与预测值对比图

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

7.3 未来值预测绘图

8.结论与展望

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

X = []  # 初始特征数据集为空列表
y = []  # 初始标签数据集为空列表,y标签为样本的下一个点,即预测点start = 0  # 初始位置
end = dataset_filled.shape[0] - seq_len  # 截止位置,dataset_filled.shape[0]就是有多少条for i in range(start, end):  # for循环构造特征数据集sample = dataset_filled[i: i + seq_len]  # 基于时间跨度seq_len创建样本label = dataset_filled[i + seq_len]  # 创建sample对应的标签X.append(sample)  # 保存sampley.append(label)  # 保存label
# 返回特征数据集和标签集
return np.array(X), np.array(y)# 获取方式:# 项目实战合集导航:# https://docs.qq.com/sheet/DTVd0Y2NNQUlWcmd6?tab=BB08J2# https://item.taobao.com/item.htm?ft=t&id=834667413889# y变量分布直方图
fig = plt.figure(figsize=(8, 5))  # 设置画布大小
plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
data_tmp = df['y']  # 过滤出y变量的样本
# 绘制直方图  bins:控制直方图中的区间个数 auto为自动填充个数  color:指定柱子的填充色
plt.hist(data_tmp, bins='auto', color='g')  # 绘图
plt.xlabel('y')  # 设置x轴名称
plt.ylabel('数量')  # 设置y轴名称
plt.title('y变量分布直方图')  # 设置标题名称
plt.show()  # 展示图片'欢迎关注下方公众号,谢谢'

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

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

相关文章

Windows本地连接远程服务器并创建新用户详细记录

前提可知: (1)服务器IP地址:x.x.x.x (2)服务器名称:root(一般默认为root,当然也有别的名称) (3)服务器登陆密码:**** 一、…

优化下载性能:使用Python多线程与异步并发提升下载效率

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 普通请求下载📝 使用多线程加速下载📝 使用异步编程加速下载📝 总结 📝⚓️ 相关链接 ⚓️📖 介绍 📖 你是否因为下载速度慢而感到焦虑?特别是在下载大型文件时,等待进度条慢慢移动的感觉真的很…

西圣、吉玛仕、绿联电容笔好不好用?热门平替电容笔超真实测评!

电容笔在数字化学习与办公环境中扮演着举足轻重的角色,它不仅是绘写的基本工具,更是提高创造效率的重要手段。随着平替电容笔的市场不断扩大,涌现了很多品牌,使得很多消费者不知道如何选择。此外,还有掺杂了一些性能不…

浅谈Spring Cloud:OpenFeign

RestTemplate 方式调用存在的问题: String url "http://userservice/user/" order.getUserId(); User user restTemplate.getForObject(url, User.class); 这是通过URL地址来访问的。但是: 代码可读性差,编程体验不统一参数复…

CSGHub开源版本v0.9.0更新

CSGHub开源版本v0.9.0更新现已发布! 00 重大更新🔊🔊🔊 golang 重写 Rails 服务端API git server增加gitaly的支持,且新版本默认使用 gitaly 本地运行应用空间、推理、微调不再需要域名 01 代码仓库(模型…

在线骑行网站设计与实现

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装在线骑行网站软件来发挥其高效地信息处理的作用&#xff0c…

灾备技术演进之路 | 虚拟化无代理备份只能挂载验证和容灾吗?只能无代理恢复吗?且看科力锐升级方案

灾备技术演进之路系列 虚拟化备份技术演进 摆脱束缚,加速前行 无代理备份仅能挂载/恢复验证吗? ——科力锐极简验证演练无代理备份来了 无代理备份无法应对平台级故障吗? ——科力锐应急接管无代理备份来了 无代理备份仅能同平台挂载吗&a…

Java反序列化利用链篇 | URLDNS链

文章目录 URLDNS链调用链分析Payload编写 系列篇其他文章,推荐顺序观看~ Java反序列化利用链篇 | JdbcRowSetImpl利用链分析Java反序列化利用链篇 | CC1链_全网最菜的分析思路Java反序列化利用链篇 | CC1链的第二种方式-LazyMap版调用链Java反序列化利用链篇 | URLD…

thinkphp 做分布式服务+读写分离+分库分表(分区)(后续接着写)

thinkphp 做分布式服务读写分离分库分表(分区) 引言 thinkphp* 大道至简一、分库分表分表php 分库分表hash算法0、分表的方法(thinkphp)1、ThinkPHP6 业务分表之一:UID 发号器2、ThinkPHP6 业务分表之二:用…

【数据结构与算法 | 灵神题单 | 二叉搜索树篇】力扣653

1. 力扣653:两数之和IV - 输入二叉搜索树 1.1 题目: 给定一个二叉搜索树 root 和一个目标结果 k,如果二叉搜索树中存在两个元素且它们的和等于给定的目标结果,则返回 true。 示例 1: 输入: root [5,3,6,2,4,null,7…

伊犁云计算22-1 raid 5 linux 配置

1  添加四块sata 硬盘  2  设置启动项为原来scsi 的硬盘 3  四块盘都是  fd   li&…

用 HTML + JavaScript DIY 一个渐进式延迟法定退休年龄测算器

为减轻社会和个人因退休年龄变化带来的冲击,近日,全国人民代表大会常务委员会正式发布了关于实施渐进式延迟法定退休年龄的重要决定。 根据该决定,我国将同步启动对男、女职工法定退休年龄的延迟计划。这一调整将采取渐进式的方式进行&#…

概率论与数理统计(2)

第一节博客已经整理了求导的公式,一些常用的概念。链接如下:高等数学基础(1)-CSDN博客。 第二节博客整理了微积分的公式及其相关概念。链接如下:高等数学基础(2)——微积分-CSDN博客 第三节博客…

Java:Clonable 接口和拷贝

一 Clonable 接口 在 Java SE 中,Cloneable 是一个标记接口(Marker Interface),它位于 java.lang 包中。这个接口的主要目的是标识实现该接口的类能够被合法地克隆(即可以调用 Object 类中的 clone() 方法&#xff09…

重生之我们在ES顶端相遇第14 章 - ES 节点类型

文章目录 前言Coordinating nodeMaster-eligible nodeData nodeCoordinating only nodeRemote-eligible nodeMachine learning node 前言 通过前面的学习,我们已经初步的掌握了 ES 的大部分用法。 后面的篇章会介绍 ES 集群相关的内容。 本文着重介绍 ES 节点类型&…

vue3-05-Element-plus中表单校验:校验对象中的对象的属性,校验对象中的数组中的对象的属性,校验嵌套对象

目录 一、校验对象中的普通属性二、校验对象中对象的属性三、校验对象中的数组中的对象的属性 这两天写vue3项目,用了element-plus库,到了表单规则验证的环节,我发现我只会校验对象中的普通属性,如果校验嵌套对象,我就…

Java笔试面试题AI答之设计模式(2)

文章目录 6. 什么是单例模式,以及他解决的问题,应用的环境 ?解决的问题应用的环境实现方式 7. 什么是工厂模式,以及他解决的问题,应用的环境 ?工厂模式简述工厂模式解决的问题工厂模式的应用环境工厂模式的…

React组件如何暴露自身的方法

一、研究背景 最近遇到一个如何暴露React组件自身方法的问题。在某些时候,我们需要调用某个组件内部的方法以实现某个功能,因此我们需要了解如何暴露组件内部API的方法。 二、实践过程 本文主要介绍React组件暴露子组件API的方法,以下是实…

基于协同过滤推荐算法的食品推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏:Java精选实战项目源码、Python精…

并查集LRU cache

并查集的定义 将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(unio…