【Python时序预测系列】一文搞明白时序数据输入到LSTM模型的格式(案例解读)

这是我的第276篇原创文章。

一、引言

      前面我介绍了多个方法实现单变量和多变量时序数据的单站点单步预测,好多小伙伴最近问我这个LSTM模型数据的输入的格式是怎么样的,今天我专门写一篇文章来聊一聊这个问题,希望对大家有所启发和帮助。

二、实现过程

2.1 单变量时序数据

1、原始data

原始数据是一个144行1列的(144,1)的dataframe:

图片

2、数据集按照8:2划分,并进行归一化处理

train_data_scaler是一个(115,1)的二维数组:

                                                   图片图片

3、创建滑动窗口数据集

将train_data_scaler集转换为 LSTM 模型所需的形状(样本数,时间步长,特征数):

def create_sliding_windows(data, window_size):X, Y = [], []for i in range(len(data) - window_size):X.append(data[i:i+window_size, 0:data.shape[1]])Y.append(data[i+window_size,0])return np.array(X), np.array(Y)
X_train, Y_train = create_sliding_windows(train_data_scaler, window_size)

这里我假设窗口window_size设为12,i的范围0-102,103取不到:

当i=0时,取出train_data_scaler第【1-12】行第【1】列的12条数据作为X_train[0],取出train_data_scaler第【13】行第【1】列的1条数据作为Y_train[0];

当i=1时,取出train_data_scaler第【2-13】行第【1】列的12条数据作为X_train[1],取出train_data_scaler第【14】行第【1】列的1条数据作为Y_train[1];

...

当i=102时,取出train_data_scaler第【103-114】行第【1】列的12条数据作为X_train[102],取出train_data_scaler第【115】行第【1】列的1条数据作为Y_train[102];

返回的X_train是一个(103,12,1)的三维数组;Y_train是一个(103,1)的二维数组;

X_train = np.reshape(X_train, (X_train.shape[0], window_size, 1)

经过滑动窗口之后返回的形状已经是LSTM所需的形状了,所以这句话可以省略。

4、构建 LSTM 模型

# 构建 LSTM 模型
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(window_size, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

LSTM的input_shape=(时间步长,特征数),其实就是一个样本输入的形状。

5、训练 LSTM 模型

# 训练 LSTM 模型
model.fit(X_train, Y_train, epochs=100, batch_size=32)
  • X_train是一个(103,12,1)的三维数组,三个维度分别表示(样本数,时间步长,特征数)

  • Y_train是一个(103,1)的二维数组,两个维度分别表示(样本数,标签)

  • 类似一个103行(12*1+1)列的表格,前(12*1)列是特征,第(12*1+1)列是标签

2.2 多变量时序数据

1、原始的data

是一个(5203,5)的dataframe:

图片

2、数据集按照8:2划分,并进行归一化处理

train_data_scaler是一个(4162,5)的二维数组:

图片

3、创建滑动窗口数据集

将数据集转换为 LSTM 模型所需的形状(样本数,时间步长,特征数):

def create_sliding_windows(data, window_size):X, Y = [], []for i in range(len(data) - window_size):X.append(data[i:i+window_size, 0:data.shape[1]])Y.append(data[i+window_size,0])return np.array(X), np.array(Y)
X_train, Y_train = create_sliding_windows(train_data_scaler, window_size)

这里我假设窗口window_size设为30,i的范围0-4131:

当i=0时,取出train_data_scaler第【1-30】行第【1-5】列的12条数据作为X_train[0],取出train_data_scaler第【31】行第【1】列的1条数据作为Y_train[0];

当i=1时,取出train_data_scaler第【2-31】行第【1-5】列的12条数据作为X_train[1],取出train_data_scaler第【32】行第【1】列的1条数据作为Y_train[1];

...

当i=4131时,取出train_data_scaler第【4132-4161】行第【1-5】列的12条数据作为X_train[4131],取出train_data_scaler第【4162】行第【1】列的1条数据作为Y_train[4131];

返回的X_train是一个(4132,30,5)的三维数组;Y_train是一个(4132,1)的二维数组;

X_train = np.reshape(X_train, (X_train.shape[0], window_size, 5)

经过滑动窗口之后返回的形状已经是LSTM所需的形状了,所以这句话可以省略。

4、构建 LSTM 模型

# 构建 LSTM 模型
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(window_size, 5)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

LSTM的input_shape=(时间步长,特征数),其实就是一个样本输入的形状。

5、训练 LSTM 模型

# 训练 LSTM 模型
model.fit(X_train, Y_train, epochs=100, batch_size=32)
  • X_train是一个(4132,30,5)的三维数组;(样本数,时间步长,特征数)

  • Y_train是一个(4132,1)的二维数组;(样本数,标签)

  • 类似一个4132行(30*5+1)列的表格,前(30*5)列是特征,第(30*5+1)列是标签

三、小结

由于滑动窗口,实际的训练数据数量少一个窗口数量,实际能预测的数据量也少一个窗口数量。

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

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

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

相关文章

Django3 个人开发笔记

查询函数 select_related 内连接 在 Django ORM 中,select_related 是一个查询性能优化工具,用于解决关联对象的查询效率问题。当你有两个通过外键(ForeignKey)或一对一字段(OneToOneField)连接的模型时&…

《青少年成长管理2024》102 “计划执行:计划执行”

《青少年成长管理2024》102 “计划执行:计划执行” 一、执行力的重要性(一)什么是执行力(二)执行力对目标的要求(三)执行力的重要性(四)执行力的构成 二、影响计划执行的…

PyQt6--Python桌面开发(3.运行QTDesigner生成的ui文件程序)

运行QTDesigner生成的ui文件程序 用QTDesigner设计一个简单的UI 保存ui文件,放到项目里面去 通过pyqt6包里面的uic来加载ui文件 import sysfrom PyQt6.QtWidgets import QApplication from PyQt6 import uicif __name__ __main__:appQApplication(sys.argv)uiui…

C++:多态-虚析构和纯虚析构

虚析构 “虚析构”通常指的是在 C 中的虚析构函数(virtual destructor)。虚析构函数是一个在基类中声明为虚函数的析构函数。它在派生类中可以被重写,并且当通过基类指针删除派生类对象时,可以确保派生类的析构函数被正确调用。 …

Docker 安装的MySQL迁移数据库

1. 导出数据库 docker ps :查看数据库对应的 CONTAINER ID docker exec -it id /bin/bash : 进入到mysql的docker实例中 cd /usr/bin : 进入到bin目录 mysqldump -u root -p123456 study > /root/study_backup0509.sql :使用mysqldump备份库,注意密码与-p之间…

《探索信息技术中心一体化系统架构:提升企业数字化转型的效率与能力》

在当今数字化时代,信息技术中心(IT Center)扮演着至关重要的角色,它不仅是企业的技术支撑,更是推动数字化转型的引擎。为了更好地应对日益复杂的业务需求和技术挑战,许多企业开始探索一体化系统架构&#x…

npm详解:掌握 Node.js 包管理的艺术

在现代软件开发领域,包管理和依赖处理是任何项目不可或缺的一部分。对于基于 Node.js 的应用程序而言,NPM(Node Package Manager)不仅是安装和管理第三方库的标准工具,也是发布、共享和重用代码片段的核心平台。本文将…

一对一WebRTC视频通话系列(五)——综合调试和功能完善

本系列博客主要记录一对一WebRTC视频通话实现过程中的一些重点&#xff0c;代码全部进行了注释&#xff0c;便于理解WebRTC整体实现。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;梳理总结后写下文章&#xff0c;对音视频相关内容感…

数据分析处理的步骤是什么?制造业企业如何挑选数据分析处理软件?看这篇就够了

随着工业4.0的深入实施以及国家对制造业高质量发展战略的日益强调&#xff0c;工业数据已经崭露头角&#xff0c;成为生产经营活动中至关重要的核心要素。不仅如此&#xff0c;工业数据还作为优质的生产要素&#xff0c;为新兴生产力的形成提供了强有力的支撑&#xff0c;从而推…

服务异步通讯MQ

同步调用存在的问题: 异步调用方案: RabbitMQ安装: 第一种:在线拉取 docker pull rabbitmq:3-management 第二种:将已有的安装包放入再用load加载 我这里放到tmp包里边 然后:cd /tmp docker load -i mq.tar 加载进去 然后运行mq容器 docker run \-e RABBITMQ_DEFAULT_USER…

(13)配置飞行中的FFT(一)

文章目录 前言 1 参数说明 前言 ArduPilot 预先配置了所有 FFT 设置的适当默认值。 &#xff01;Note 此功能包含在内存为 2MB 的自动驾驶仪中。请查看自动驾驶仪的"各板固件限制列表"(List of Firmware Limitations by Board)&#xff0c;以确定你的自动驾驶仪…

Fourteen Day 2024年5月10日

Battle n.战斗 战役 战争 vi.决战 斗争 Gun battle. 枪战 Gun n.枪 炮 Go out to battle. 奔赴战场。 Cattle n.牛 The cattle were eating grass. 牛在吃草。 Grass n.草 草坪 牧场 Stand n.站 坐落 She stands in the rain. 她站在雨中。 Rain n.雨 vi.下雨 Sta…

大模型入门(六)—— RLHF微调大模型

一、RLHF微调三阶段 参考&#xff1a;https://huggingface.co/blog/rlhf 1&#xff09;使用监督数据微调语言模型&#xff0c;和fine-tuning一致。 2&#xff09;训练奖励模型 奖励模型是输入一个文本序列&#xff0c;模型给出符合人类偏好的奖励数值&#xff0c;这个奖励数值…

未来编码探索:揭秘Java的进化之旅与技术革新!

Java是一种广泛使用的编程语言&#xff0c;自1995年问世以来&#xff0c;它在企业级应用、移动应用开发、大数据处理等领域都有着广泛的应用。随着时间的推移&#xff0c;Java也在不断发展和进化&#xff0c;以满足不断变化的技术需求和市场趋势。本文将全面详细地探讨Java的未…

MyBatis(该篇足已)

目录 一.MyBatis是什么&#xff1f; 二.为什么学习MyBatis呢&#xff1f; 三.MyBatis的学习 3.1MyBatis的开发流程 3.2MyBatis项目 四.MyBatis的增删改操作 五.参数占位符 #{} 和 ${} 六.映射返回 七.映射失败 八.数据库连接池 九.动态SQL 9.1<if>标签 9.2&…

LeetCode63:不同路径Ⅱ

题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角…

5.07 Pneumonia Detection in Chest X-Rays using Neural Networks

肺炎诊断是一个耗时的过程&#xff0c;需要高技能的专业人员分析胸部X光片chest X-ray (CXR)&#xff0c;并通过临床病史、生命体征和实验室检查确认诊断。 它可以帮助医生确定肺部感染的程度和位置。呼吸道疾病在 X 光片上表现为一处膨胀的不透明区域。然而&#xff0c;由于不…

力扣HOT100 - 155. 最小栈

解题思路&#xff1a; 辅助栈 class MinStack {private Stack<Integer> stack;private Stack<Integer> min_stack;public MinStack() {stack new Stack<>();min_stack new Stack<>();}public void push(int val) {stack.push(val);if (min_stack.i…

OLAP与OLTP

OLAP 简介 OLAP&#xff08;联机分析处理&#xff0c;全称Online Analytical Processing&#xff09;是一种针对大规模数据集进行高性能分析和查询的数据处理技术。与传统的联机事务处理&#xff08;OLTP&#xff09;不同&#xff0c;OLAP更侧重于支持复杂的分析和决策支持任…

LeetCode 404.左叶子之和

LeetCode 404.左叶子之和 1、题目 题目链接&#xff1a;404. 左叶子之和 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别…