当前位置: 首页 > news >正文

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.lryc.cn/news/442949.html

相关文章:

  • springboot实战学习(6)(用户模块的登录认证)(初识令牌)(JWT)
  • 二叉树的顺序存储和基本操作实现
  • python学习-10【模块】
  • modbus调试助手/mqtt调试工具/超轻巧物联网组件/多线程实时采集/各种协议支持
  • 数值计算 --- 平方根倒数快速算法(0x5f3759df,这是什么鬼!!!)
  • 迭代器和生成器的学习笔记
  • ES5 在 Web 上的现状
  • 人话学Python-循环语句
  • 初识模版!!
  • 算法之数学--hash算法 2021-03-11(未完待续)
  • DHCP工作原理
  • 服务发现和代理实例的自动更新
  • Redis的三种持久化方法详解
  • OpenAI GPT o1技术报告阅读(5)-安全性对齐以及思维链等的综合评估与思考
  • nodejs 012:Babel(巴别塔)语言转换与代码兼容
  • 时间安全精细化管理平台存在未授权访问漏洞
  • 软件卸载工具(windows系统)-geek
  • 第三篇 第14篇 工程计价依据
  • java 异常-Exception
  • 爬虫逆向学习(六):补环境过某数四代
  • IO流体系(FiletOutputStream)
  • 网络设备登录——《路由与交换技术》实验报告
  • CSS——网格布局(display: grid)之下篇
  • 低势期操作
  • IMS 呼叫流程(详细)
  • 系统架构设计师:系统架构设计
  • win11不显示已经打开的窗口
  • 数学建模常用模型全面总结(含适用条件、优点、局限性和应用场景)
  • RabbitMQ消费者确认和重复机制
  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL77