用LSTM进行时间序列预测(单步,多步,单变量,多变量)

常用的LSTM时间序列预测(单变量时间序列预测 | 多变量时间序列预测 | 他们的预测未来数据方法) 单变量时间序列预测 数据类型:单列 ​ import numpy import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from keras.models import Sequenti... 阅读详情
AI摘要

本文介绍了使用LSTM进行时间序列预测的基本方法,包括单变量单步和多变量多步预测。在数据处理方面,通过滑动窗口将数据转化为LSTM所需的输入形式。在模型构建时,根据输入输出尺寸调整LSTM的隐藏层大小和层数,必要时添加全连接层。对于多变量预测,输入输出的维度会相应增加。

0. LSTM用于时间序列预测

LSTM因其具有记忆的功能,可以利用很长的序列信息来建立学习模型,所以用它来进行时间序列的预测会很有优势。

在实际工程中用LSTM进行时间序列的预测主要有两个难点:一是前期对数据的处理,二是初始模型的搭建。对数据的处理无论是单步、多步、单变量还是多变量都会用到滑动窗口来处理数据,具体处理的方法后面会进行阐述;而对模型的搭建则要根据要解决的问题,原始数据的情况等,对模型的参数做相应的设定,如果单纯的LSTM无法满足要求,一般会加入全连接层来解决。

1. 单变量单步

单变量单步的预测是最简单的,比如说有一组数据为:
[1,2,3,4,5,6,7,8,9,10],然后要求利用这组数据训练一个模型,使其能对后面提供的数据做一个单步的预测。

我们先来对数据进行处理,处理的时候要根据不同框架所要求的LSTM的输入形式来处理,比如我们用Pytorch框架的时候输入要求是(seq_len, batch, input_size)。

因为是单变量的数据,我们令input_size=3,然后设seq_len=7,然后batch为1,
处理后的数据变为:
[[1,2,3], =====> [4]
[2,3,4], =====> [5]
[3,4,5], =====> [6]
[4,5,6], =====> [7]
[5,6,7], =====> [8]
[6,7,8], =====> [9]
[7,8,9]] =====> [10]
前半部分是输入,箭头指向输出。也就是说将数据分批输入LSTM,没三个数据对应一个单步的预测目标。

数据处理好之后就是模型的搭建了,我们根据输入输出的形式来反推模型的结构。我们知道LSTM的结构是lstm = nn.LSTM(input_size, hidden_size, num_layers),由上面给出的输入的形式可以确定input_size=3, hidden_size, num_layers这两个参数要自己设置,也就是隐藏层的大小和层数。我们的预计输出的形式为(7,1),但是LSTM的标准输出形式为:
output=(seq_len,batch,num_directionshidden_size)=(7,1,num_directionshidden_size),
当num_directionshidden_size不为1时我们需要在LSTM的后面加一个全连接层,并令全连接层的输入形式为num_directionshidden_size,输出为1 。这样我们的输出就变为了output=(7,1,1) ,然后用reshape方法(当out为numpy array时)或者view方法(当out为tensor时)将output整形为(7,1)。这样就可以用在后面的训练中了,即计算损失函数和反向传播。

2. 多变量多步

比如一组数据为:
[[1,11],[2,12],[3,13],[4,14],[5,15],[6,16],[7,17],[8,18],[9,19],[10,20]]
要求对其进行两步预测,则我们对其进行处理:
[[[1,11],[2,12],[3,13]], ======>[[4,14],[5,15]]
[[2,12],[3,13],[4,14]], ======>[[5,15],[6,16]]
[[3,13],[4,14],[5,15]], ======>[[6,16],[7,17]]
[[4,14],[5,15],[6,16]], ======>[[7,17],[8,18]]
[[5,15],[6,16],[7,17]], ======>[[8,18],[9,19]]
[[6,16],[7,17],[8,18]], ======>[[9,19],[10,20]]
前半部分是输入,箭头指向输出。seq_len=6,batch=3,input_size=2

搭建模型的部分跟上面的分析是一样的,output的形状跟target一样为(6,2,2),而输入的形状为(6,3,2),所以还是需要一个全连接层使其输入为(6,3,2)输出为(6,2,2),这样才能用在后面的训练中。

最后如果要画出输出的图像的话可以取out[:3, 0, :]和out[:,1,:]在axis=0上拼接出来。

下面是模型的建立:

class LSTM(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers):
        super(LSTM, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_size, 2)  # 2 for bidirection

    def forward(self, x):
        # Set initial states
        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(device)  # 2 for bidirection
        c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(device)

        # Forward propagate LSTM
        out, _ = self.lstm(x, (h0, c0))  # out: tensor of shape (batch_size, seq_length, hidden_size*2)
        # print("output_in=", out.shape)
        # print("fc_in_shape=", out[:, -1, :].shape)
        # Decode the hidden state of the last time step
        # out = torch.cat((out[:, 0, :], out[-1, :, :]), axis=0)
        # out = self.fc(out[:, -1, :])  # 取最后一列为out
        out = self.fc(out)
        return out

3. 其余情况

单变量多步和多变量单步的情况的处理方法跟上面两个是类似的。

基于LSTM的时间序列数据(多步)预测
如何进行多变量LSTM时间序列预测未来一周的数据?
用LSTM预测未来一个月航班数
多维多步预测

单步预测与多步预测 1.单步预测 所谓单步预测,就是每—次预测的时候 输入窗口 只 预测 未来一个值。 单步预测的两个策略: 输入窗口 全部使用 真实值作为 输入窗口,这种情况是只预测未来一个值的时候这个情况的。 预测未来第一个值的时候输入窗口使用全部真实值,预测后面n-1 个的时候,预测窗口将包含有预测值,这种情况是单步预测预测未来的多个值的时候。 2. 多步预测 所谓多步预测,就是每—次预测的时候 输入窗口 预测 未来n个值(也叫n步)。 多步预测的策略: 只预测未来一次,即只预测一个n输入的n个输出,n是滑动窗口 阅读详情

相关推荐

时间序列预测 — VMD-LSTM实现单变量多步光伏预测(Tensorflow):单变量转为多变量

通过前5天的timesteps数据预测后一天的数据predict_steps个,需要对数据集进行滚动划分(也就是前timesteps行的特征和后predict_steps行的标签训练,后面预测时就可通过timesteps行特征预测未来的predict_steps个标签)。通过前5天的96*5数据预测后一天的数据96个,需要对数据集进行滚动划分(也就是前96*5行的特征和后96行的标签训练,后面预测时就可通过96*5行特征预测未来的96个标签)预测并计算误差,并进行可视化,将这些步骤封装为函数。

几度春风里的博客 2701

【MATLAB第12期】基于LSTM长短期记忆网络的多输入多输出回归预测模型思路框架,含滑动窗口, 预测未来,单步预测与多步预测对比,多步预测步数对预测结果影响分析

**YPred_3:取测试集预测结果中,100个样本中每个样本分别预测的第三个值即(1289-1399)→ 1303-1402 (删去预测的第1401-1402值)+YPred_1预测的前两个值 1301-1302(第100次预测时,样本100:1388-1399 个数据 → 预测 1402)第一种思路预测结果会较差,即用未来预测结果预测未来 ,即我用1390-1401(此时1401为预测结果)预测1402-1404, 1391-1402预测1403-1404……

随风飘摇的土木狗的博客 7866

时间序列预测 | LSTM时间序列建模(单步、多步)

时间序列预测 | LSTM时间序列建模(单步、多步)

天天酷科研的博客 1502

时间序列数据预测的类型

本文主要内容是使用LSTM网络进行不同类型的时间序列预测任务,不涉及代码,仅仅就不同类型的预测任务和数据划分进行说明:https://machinelearningmastery.com/how-to-develop-lstm-models-for-time-series-forecasting/时间序列数据预测本质就是利用先前的值预测后面的值,在得到一组数据后,需要将数据处理为一个个样本,每个样本中包括先前的数据和要预测的数据,将其作为训练集。

baidu_40120883的博客 4068

12个即用型时间序列预测模型:从单步到多步、单变量到多变量,含CNN-LSTM融合与Encoder-Decoder结构

提供12种可直接运行的Python时间序列预测实现,覆盖常见任务组合:单步/多步预测、单变量/多变量输入输出、双向LSTM、堆叠LSTM、CNN+LSTM混合、ConvLSTM、Encoder-Decoder架构等。每个脚本对应一种明确任务类型,例如‘多步多变量输入→多步单变量输出’,内置完整数据预处理流程——包括监督学习样本构造、滑动窗口设置、标准化方法及张量维度转换说明。所有模型均适配TensorFlow/Keras,输入输出形状清晰标注,关键层配置和超参选择有依据说明,每行核心逻辑附中文注释。配套re

blue42的博客 187

车规级非易失存储选型指南:从AEC-Q100到ISO 26262的可靠性设计

非易失存储器是电子系统中负责长期保存关键数据与代码的核心组件,其可靠性直接决定了系统的长期稳定运行能力。在汽车电子领域,这一要求被提升到了极致,必须满足严苛的车规级标准。从原理上看,存储器的数据保持能力、擦写寿命等关键参数在高温、振动等恶劣环境下会急剧衰减,因此需要专门的设计与验证。其技术价值在于保障车辆全生命周期的功能安全与数据完整性,避免因存储失效导致的安全隐患或频繁维护。应用场景涵盖从发动机控制单元、自动驾驶域控制器到智能座舱的各类电子控制单元。本文聚焦于车规级非易失存储的选型,深入解析AEC-Q10

weixin_30938149的博客 458

pytorch-20 lstm实践

在之前的课程中我们了解了3类不同的时间序列数据、以及这些数据所涉及到的7-8类数据重组方式,相信你已经意识到、时间序列任务会比一般的机器学习/深度学习更复杂、更灵活、更有挑战性。在过去的课程中,我们都是以最为经典的“点到序列”的预测方式给大家举例,但事实上,依据时间序列预测的不同细节,时序预测手段可以被分为以下四种——在这4种分类下,我们实际可以有单步递归预测、单步直接预测、多步递归预测和多步直接预测四种预测方法,之前我们所呈现的最经典的“序列到点”的预测就是单步直接预测法。

weixin_45311418的博客 1830

通讯软件019——分分钟学会Prosys OPC UA Server配置

本文介绍如何配置Prosys OPC UA Simulation Server,通过本文可以对OPC UA的基本概念有所了解,掌握OPC UA的本质。

zhouwl72的博客 4302

毕设 LSTM天气预测算法系统

数据集包含14个不同的特征,例如气温,大气压力和湿度。从2003年开始,每10分钟收集一次。为了提高效率,本文仅使用2009年至2016年之间收集的数据。** 加载数据集**如上所示,每10分钟记录一次观测值,一个小时内有6个观测值,一天有144(6x24)个观测值。给定一个特定的时间,假设要预测未来6小时的温度。为了做出此预测,选择使用5天的观察时间。因此,创建一个包含最后720(5x144)个观测值的窗口以训练模型。下面的函数返回上述时间窗以供模型训练。参数是过去信息的滑动窗口大小。

Mr.D学长 1122

告别轮询!手把手教你用S32K3的FlexCAN Enhanced FIFO+DMA实现高效CAN FD数据接收

本文详细介绍了如何利用S32K3芯片的FlexCAN Enhanced FIFO与DMA组合方案,实现高效CAN FD数据接收,彻底告别传统轮询和中断模式。通过深度缓冲、智能过滤和DMA联动技术,该方案在5Mbps高负载场景下将CPU占用率从42%降至3%以下,显著提升系统实时性和吞吐量。

weixin_30906185的博客 502

如何使用CPU-Z获取内存条频率信息(编程)

当我们需要获取计算机内存条的频率信息时,可以利用CPU-Z这个工具来实现。CPU-Z是一款专门用于获取计算机硬件信息的工具,它提供了API接口,我们可以通过编程的方式来获取内存条频率信息。你可以从CPU-Z官方网站下载适用于你的操作系统的CPU-Z程序,并从安装目录中找到。函数,我们可以初始化CPU-Z,如果返回值不为0,则表示初始化失败。函数来获取内存条频率信息,如果返回值小于等于0,则表示获取失败。函数来初始化CPU-Z并获取内存条频率信息。最后,我们将获取到的内存条频率信息打印输出,并使用。

ByteProwl的博客 460

基于TCN- LSTM时间序列预测Python程序

基于TCN-LSTM预测模型

黑科技小土豆的博客 1902

微信小程序转发功能异常报错 由于小程序违规分享功能暂时无法使用的解决办法

小程序右上角转发功能被封,不代表你违规了,而可能是你没认证、没备案!很多功能都是“先合规、后开发”,踩坑就晚了,别像我一样绕了三圈才发现问题。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2615

毕业设计 LSTM天气预测算法系统

数据集包含14个不同的特征,例如气温,大气压力和湿度。从2003年开始,每10分钟收集一次。为了提高效率,本文仅使用2009年至2016年之间收集的数据。** 加载数据集**如上所示,每10分钟记录一次观测值,一个小时内有6个观测值,一天有144(6x24)个观测值。给定一个特定的时间,假设要预测未来6小时的温度。为了做出此预测,选择使用5天的观察时间。因此,创建一个包含最后720(5x144)个观测值的窗口以训练模型。下面的函数返回上述时间窗以供模型训练。参数是过去信息的滑动窗口大小。

WEB_DC的博客 1825

ThingsBoard-阿里云短信规则节点

由于Thingsboard平台国内只支持短信服务,那我们运维人员去及时接收邮箱肯定是没有短信来的方便的,在这基础上,需要自己从规则链入手,自定义一个支持阿里云短信服务的规则节点。

weixin_67440240的博客 2094

【数据同化第一期】基本概念介绍

【数据同化第一期】基本概念介绍

WW、forever的博客 1904

毕业设计项目 LSTM天气预测算法系统

数据集包含14个不同的特征,例如气温,大气压力和湿度。从2003年开始,每10分钟收集一次。为了提高效率,本文仅使用2009年至2016年之间收集的数据。** 加载数据集**如上所示,每10分钟记录一次观测值,一个小时内有6个观测值,一天有144(6x24)个观测值。给定一个特定的时间,假设要预测未来6小时的温度。为了做出此预测,选择使用5天的观察时间。因此,创建一个包含最后720(5x144)个观测值的窗口以训练模型。下面的函数返回上述时间窗以供模型训练。参数是过去信息的滑动窗口大小。

Mr.D学长 812

ardupilot 为什么要采样四元数姿态控制

本节主要说明清楚ardupilot姿态控制为什么要用到四元数,欢迎批评指正!!!

陌城烟雨 1118

毕设项目 LSTM天气预测算法系统

数据集包含14个不同的特征,例如气温,大气压力和湿度。从2003年开始,每10分钟收集一次。为了提高效率,本文仅使用2009年至2016年之间收集的数据。** 加载数据集**如上所示,每10分钟记录一次观测值,一个小时内有6个观测值,一天有144(6x24)个观测值。给定一个特定的时间,假设要预测未来6小时的温度。为了做出此预测,选择使用5天的观察时间。因此,创建一个包含最后720(5x144)个观测值的窗口以训练模型。下面的函数返回上述时间窗以供模型训练。参数是过去信息的滑动窗口大小。

HUXINY的博客 994

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 用kd树实现k近邻算法
下一篇: 朴素贝叶斯法
comli_cn
博客等级 码龄9年 2397粉丝 241原创
评论 21
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

comli_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值