基于LSTM的单变量输入,单变量输出的数据预测

深度学习时间序列预测:使用LSTM算法构建单变量时间序列模型预测空气质量 在这篇文章中,我们将使用长短期记忆(LSTM)算法来构建一个时间序列预测模型,以预测空气质量的变化。在这篇文章中,我们将使用长短期记忆(LSTM)算法来构建一个时间序列预测模型,以预测空气质量的变化。首先,我们需要准备数据。我们将把时间序列数据转换为监督学习问题,其中输入数据是过去的观测值,输出数据是未来的观测值。通过以上步骤,我们成功地构建了一个使用LSTM算法的时间序列预测模型,用于预测空气质量的变化。通过以上步骤,我们成功地构建了一个使用LSTM算法的时间序列预测模型,用于预测空气质量的变化。 阅读详情

基于LSTM的单变量数据预测


前言

该笔记主要记录基于时序的单变量输入、单变量输出的LSTM数据预测。归一化采用除以最大值的方法。


一、pandas是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、使用步骤

1.引入库

代码如下:

import numpy as np
import torch
from torch import nn
import matplotlib.pyplot as plt
from torch.utils.data import Dataset

2.LSTM模型

代码如下 :

class LstmRNN(nn.Module):
    """
        Parameters:
        - input_size: feature size
        - hidden_size: number of hidden units
        - output_size: number of output
        - num_layers: layers of LSTM to stack
    """

    def __init__(self, input_size, hidden_size=1, output_size=1, num_layers=1):
        super().__init__()

        self.lstm = nn.LSTM(input_size, hidden_size, num_layers)  # utilize the LSTM model in torch.nn
        self.forwardCalculation = nn.Linear(hidden_size, output_size)

    def forward(self, _x):
        x, _ = self.lstm(_x)  # _x is input, size (seq_len, batch, input_size)
        s, b, h = x.shape  # x is output, size (seq_len, batch, hidden_size)
        x = x.view(s * b, h)
        x = self.forwardCalculation(x)
        x = x.view(s, b, -1)
        return x

if __name__ == '__main__':
    # create database

    class DiabetesDataset(Dataset):
        def __init__(self, filepath):
            xy = np.loadtxt('JT9Ddata.csv', delimiter=',', dtype=np.float32)
            self.len = xy.shape[0]
            self.t = xy[:, 0]
            self.x_data = xy[:, 1]
            self.y_data = xy[:, 2]
# 以上数据为np

        def __len__(self):
            return self.len


    Data = DiabetesDataset('JT9Ddata.csv')

    data_len = Data.len
    t = Data.t
    dataset = np.zeros((data_len, 2))
    dataset[:, 0] = Data.x_data
    dataset[:, 1] = Data.y_data
    dataset = dataset.astype('float32')

    # # 图像显示输入和输出数据随时间变化的曲线图
    # plt.figure()
    # plt.plot(t,  dataset[:, 0], label='l')
    # plt.plot(t,  dataset[:, 1], label='h')
    # plt.xlabel('t')
    # plt.ylabel('LPSpeed/HPSeed')
    # plt.legend(loc='upper right')
    # plt.show()

    # tensor的元素作归一化
    in_max = dataset[:, 0].max()
    in_min = dataset[:, 0].min()
    out_max = dataset[:, 1].max()
    out_min = dataset[:, 1].min()
    dataset_normal = np.zeros((data_len, 2))
    dataset_normal[:, 0] = (dataset[:, 0])/in_max
    dataset_normal[:, 1] = dataset[:, 1]/out_max
    dataset_normal = dataset_normal.astype('float32')

    # 将输入、输出数据归一化后绘制随时间变化的曲线图
    # plt.figure()
    # plt.plot(t,  dataset_normal[:, 0], label='in')
    # plt.plot(t,  dataset_normal[:, 1], label='out')
    # plt.xlabel('t')
    # plt.ylabel('fuel/Seed')
    # plt.legend(loc='upper right')
    # plt.show()

    # # 将数据划分为训练集和测试集
    train_data_ratio = 0.7  # Choose 30% of the data for testing
    train_data_len = int(data_len * train_data_ratio)
    train_x = dataset_normal[:train_data_len, 0]
    train_y = dataset_normal[:train_data_len, 1]
    INPUT_FEATURES_NUM = 1
    OUTPUT_FEATURES_NUM = 1
    t_for_training = t[:train_data_len]

    test_x = dataset_normal[train_data_len:, 0]
    test_y = dataset_normal[train_data_len:, 1]
    t_for_testing = t[train_data_len:]

    # ----------------- train -------------------
    train_x_tensor = train_x.reshape(-1, 5, INPUT_FEATURES_NUM)  # set batch size to 5
    train_y_tensor = train_y.reshape(-1, 5, OUTPUT_FEATURES_NUM)  # set batch size to 5

    # transfer data to pytorch tensor
    train_x_tensor = torch.from_numpy(train_x_tensor)
    train_y_tensor = torch.from_numpy(train_y_tensor)
    # test_x_tensor = torch.from_numpy(test_x)

    lstm_model = LstmRNN(INPUT_FEATURES_NUM, 16, output_size=OUTPUT_FEATURES_NUM, num_layers=1)  # 16 hidden units
    print('LSTM model:', lstm_model)
    print('model.parameters:', lstm_model.parameters)

    loss_function = nn.MSELoss()
    optimizer = torch.optim.Adam(lstm_model.parameters(), lr=1e-2)

    max_epochs = 1500
    for epoch in range(max_epochs):
        output = lstm_model(train_x_tensor)
        loss = loss_function(output, train_y_tensor)

        loss.backward()
        optimizer.step()
        optimizer.zero_grad()

        if loss.item() < 1e-4:
            print('Epoch [{}/{}], Loss: {:.5f}'.format(epoch + 1, max_epochs, loss.item()))
            print("The loss value is reached")
            break
        elif (epoch + 1) % 100 == 0:
            print('Epoch: [{}/{}], Loss:{:.5f}'.format(epoch + 1, max_epochs, loss.item()))

    # prediction on training dataset
    predictive_y_for_training = lstm_model(train_x_tensor)
    lossy_for_training = loss_function(predictive_y_for_training, train_y_tensor)
    predictive_y_for_training = predictive_y_for_training.view(-1, OUTPUT_FEATURES_NUM).data.numpy()

    # torch.save(lstm_model.state_dict(), 'model_params.pkl') # save model parameters to files

    # ----------------- test -------------------
    # lstm_model.load_state_dict(torch.load('model_params.pkl'))  # load model parameters from files
    lstm_model = lstm_model.eval()  # switch to testing model

    # 对测试的输入数据预处理
    test_x_tensor = test_x.reshape(-1, 5, INPUT_FEATURES_NUM)
    test_y_tensor = test_y.reshape(-1, 5, INPUT_FEATURES_NUM)
    # set batch size to 5, the same value with the training set
    test_x_tensor = torch.from_numpy(test_x_tensor)
    test_y_tensor = torch.from_numpy(test_y_tensor)

    predictive_y_for_testing = lstm_model(test_x_tensor)
    lossy_for_testing = loss_function(predictive_y_for_testing, test_y_tensor)
    predictive_y_for_testing = predictive_y_for_testing.view(-1, OUTPUT_FEATURES_NUM).data.numpy()

 绘图,空燃比显示缺乏优化

    # # 绘制训练集输出数据和训练集预测的输出数据随时间变化图
    # plt.figure(1)
    # plt.plot(t[0:train_data_len], predictive_y_for_training * out_max, 'g', label='train-predict')
    # plt.plot(t[0:train_data_len], train_y * out_max, 'r', label='train')
    # plt.xlabel('t')
    # plt.ylabel('Speed')
    # plt.legend(loc='upper right')
    # # 绘制测试集输出数据和测试集预测的输出数据随时间变化图
    # plt.figure(2)
    # plt.plot(t[train_data_len:], predictive_y_for_testing * out_max, 'g', label='test-predict')
    # plt.plot(t[train_data_len:], test_y * out_max, 'r', label='test')
    # # plt.plot(t[train_data_len:], dataset[train_data_len:, 1], 'b', label='yy')  # 验证输出结果反归一化后与原输出数据对比
    # plt.xlabel('t')
    # plt.ylabel('speed')
    # plt.legend(loc='upper right')
    # plt.savefig(r'test.jpg', dpi=400, bbox_inches='tight')
    # plt.show()

    # ----------------- plot -------------------
    plt.figure()
    plt.plot(t[0:train_data_len], dataset[0:train_data_len, 0], 'g', label='Fuel air ratio')
    plt.plot(t[0:train_data_len], dataset[0:train_data_len, 1], 'b', label='train_speed')
    plt.plot(t[0:train_data_len], predictive_y_for_training * out_max, 'y--', label='train_pre_speed')

    plt.plot(t[train_data_len:], dataset[train_data_len:, 0], 'g')
    plt.plot(t[train_data_len:], dataset[train_data_len:, 1], 'k', label='test_speed')
    plt.plot(t[train_data_len:], predictive_y_for_testing * out_max, 'm--', label='test_pre_speed')

    plt.plot([t[train_data_len], t[train_data_len]], [-1, 8000], 'r--', label='separation line')  # separation line

    plt.xlabel('t')
    plt.ylabel('Fuel air ratio//speed')
    plt.legend(loc='lower left')  # upper right

    plt.show()


总结

归一化方法

优化器:Adam

损失函数:MSELoss

学习率:0.01

空燃比(绿线)显示不和谐。需要重新设置一个y轴。

导入LSTM的输入数据train_x需要优化,更加符合发动机的二阶模型。

缺乏学习集的精度。

输出结果

LSTM的输入和输出是怎样的? LSTM的输出包括当前时间步的隐状态、细胞状态以及可能的预测值,这取决于任务的类型。在每个时间步上,LSTM都会输出一个隐状态,该隐状态包含了当前时间步的输入和之前时间步的信息。根据前一个时间步的隐状态和当前输入,计算输出门的值,以决定如何基于细胞状态计算当前时间步的隐状态。根据前一个时间步的隐状态和当前输入,计算遗忘门的值,以决定细胞状态中哪些信息需要被遗忘。根据前一个时间步的隐状态和当前输入,计算输入门的值,以决定添加哪些新的信息到细胞状态中。使用输出门的信息和细胞状态,计算当前时间步的隐状态。 阅读详情

相关推荐

【预测模型】基于卷积神经网络CNN实现预测单输入单输出预测模型matlab源码

1 模型 2 部分代码 clc;clear;closeall load('.\世界遗产假山数据\环秀山庄\2020.10数据\环秀山庄2020.10沉降1-5号点.mat') data=table2array(hx_settlement1_5(1:2000,5));%训练集输入 %% %序列的前 90% 用于训练,后 10% 用于测试 numTimeStepsTrain=floor(0.9*size(data,1)); dataTrain=data(1:numTimeSte...

qq_59747472的博客 1952

LSTM的输入参数和输出参数

4.batch_first:默认为False,在制作数据集和数据集载入的时候,有个参数叫batch_size,也就是一次输入几个数据,lstm的输入默认将batch_size放在第二维,当为True的时候,则将batch_size放在第一维。1.input_size:输入的特征维度,一般来说就是字向量的维度,比如如果用bert(base)的话,那么输入的维度input_size=768。3.num_layers:很好理解,就是LSTM 堆叠的层数,默认值为1,设置为2的时候,第一层的输出是第二层的输入。

weixin_43468880的博客 4686

keras lstm时间序列多变量输入单变量输出代码

lstm时间序列多变量输入单变量输出代码

749

【Python时序预测系列】基于LSTM实现单变量时间序列预测(源码)

基于LSTM实现单变量时间序列预测(源码)

数据杂坛 3705

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8970

CANoe VLAN配置的艺术:如何通过脚本自动化实现高效车载网络测试

本文深入探讨了CANoe VLAN配置的自动化实现,通过CAPL脚本与Python工具链的结合,提升车载网络测试效率。重点解析了硬件侧VLAN配置与软件侧VLAN配置的交互机制,并提供了实用的脚本开发示例和调试技巧,帮助工程师快速构建高效的自动化测试方案。

qqq44的博客 617

基于卷积神经网络结合长短期网络(CNN-LSTM)单变量时序预测-递归预测未来数据 (单输入单输出)附Matlab代码

一、模型核心逻辑:CNN-LSTM 单输入单输出的适配原理单变量时序预测的 “单输入单输出” 模式,指仅以某一变量的历史时序数据为输入(如每日气温),输出该变量未来某一时刻的预测值(如次日气温)。CNN-LSTM 通过 “卷积特征提取 + 循环时序建模” 的串联结构,精准适配此类场景,核心逻辑如下:1.1 模块功能与单输入单输出的适配性CNN(卷积神经网络):采用 1D 卷积核对单变量历史时序数据进行局部特征提取,无需引入其他变量(单输入特性)。

Matlab_dashi的博客 1056

数学建模传染病模型_【数学建模】之传染病模型

点击【拇指笔记】,关注我的公众号。SE模型缺点:没有考虑接触到的人中还有一部分病人,所以所有人并不会全部被感染。建立模型:已感染人数(病人)每个病人每天有效接触(足以使人致病)人数为根据(1)(2)可以建立模型:等式两边同时除以\Delta t由导数定义有同时,取\Delta t = 1天由(1)(5)两式可得最终的模型:Logistic模型缺点:区分已感染者(病人)和未感染者(健康人)...

weixin_39590453的博客 2227

LSTM基于长短期记忆网络的回归预测 Matlab源代码

LSTM基于长短期记忆网络的回归预测 Matlab源代码 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了基于长短期记忆网络(LSTM)的数据回归预测的Matlab源代码,适用于新手小白,你可以直接替换Excel数据进行运行。 功能简介 多变量输入,单变量输出:支持多变量输入数据,进行单变量输出数据的回归预测。 评价指标完善:包含多种评价指标,如R2、MAE、MSE...

gitblog_06738的博客 352

别再傻傻分不清!5分钟搞懂倾斜摄影里‘地面分辨率’和‘模型精度’到底啥关系

本文深入解析倾斜摄影中‘地面分辨率’与‘模型精度’的关系,帮助读者快速理解两者的本质区别与内在关联。通过实战案例和公式计算,详细说明如何从航飞设计到精度验证全流程控制,避免常见认知误区,并针对不同应用场景提供精度需求建议。

weixin_33700350的博客 477

告别Nginx原始日志!VictoriaLogs+Grafana构建企业级应用日志分析平台实战

描述:做为一个合格的运维工程师,在面对企业安全运维管理中,日志审计是一项非常重要的工作。授人以鱼不如授人以渔,各位运友们可参照作者的方案设计,在自己的项目中根据实际情况调整落地,例如,不在仅仅采集 NGINX 应用日志,而是采集 Apache、Tomcat、SpringBoot 等多种应用服务器的日志,又如,不再仅仅采集网络设备、安全审计审计日志,而是 Windows、Linux 等多种操作系统的审计日志等,大家可充分发挥想象、实践能力,也欢迎大家在知识星球中分享自己的方案设计,一起交流学习。

全栈工程师修炼指南-IT知识分享 2477

(深度学习入门)DBO-BiLSTM优化算法,基于蜣螂算法优化双向长短期记忆网络,适用于数据回归预测(多变量输入、单变量输出) | MATLAB代码

此代码免费公开,可用作大家入门深度学习的一个简单例子。本代码采用蜣螂优化算法 (DBO) 优化双向长短期记忆网络 (BiLSTM),用于数据回归预测。代码编写精良,适合多变量输入和单变量输出的预测任务,适用场景广泛,包括但不限于金融、气象、工业数据等复杂数据的分析。具体代码的解释大家可以问GPT4o(需要的可以dd我分享),本代码也会有部分解释。

weixin_47216888的博客 1130

Chapter 5 Gate Drivers and Level Shifters

Gate driver如下图所示, 包括功率管(带保护), Gate driver, Level shifter, Gate Supply 和Dead-time control.

2304_76736886的博客 2237

Matlab 基于长短期记忆网络(LSTM)的数据分类预测

Matlab 基于长短期记忆网络(LSTM)的数据分类预测 去发现同类优质开源项目:https://gitcode.com/ 资源描述 本仓库提供了一个基于Matlab的长短期记忆网络(LSTM)数据分类预测的完整源码和数据集。该资源适用于多变量输入、单变量输出的数据分类预测任务。通过本资源,您可以学习如何使用LSTM网络进行数据分类,并评估模型的性能。 主要功能 数据分类预测:使用LSTM网络...

gitblog_09730的博客 551

手把手教你用SysMax桥接软件搞定CANoe、INCA和刷写工具(附驱动配置避坑点)

本文详细介绍了如何使用SysMax PCAN FD桥接软件实现CANoe、INCA和刷写工具的无缝对接,提供从驱动配置到多软件协同的全链路指南。重点解析了驱动安装避坑点、CANoe配置技巧、INCA集成方法以及刷写工具链优化方案,帮助汽车电子工程师构建高效开发环境。

weixin_30500105的博客 391

快速卷积结构FIR数字滤波器的设计与ARM平台实现

本文提出了一种基于快速卷积结构的FIR数字滤波器设计与实现方案。通过Matlab设计了满足特定指标的低通FIR滤波器,采用重叠-保存法和重叠-相加法两种快速卷积算法,将计算复杂度从O(N·M)降低到O(NlogN)。详细介绍了滤波器系数生成、性能验证流程,并提供了ARM平台C语言实现的关键技术,包括定点量化处理。实验结果表明,该方法能有效滤除混合信号中的高频干扰,保留目标1kHz正弦信号,验证了设计方案的有效性。

huanghm88的专栏 123

Matlab 基于LSTM-Attention-Adaboost的数据单变量时序预测(单输入单输出)

Matlab 基于长短期记忆网络-注意力机制-Adaboost()的数据单变量时序预测(单输入单输出)采用LSTM-Attention作为弱学习器,然后采用Adaboost进行集成学习!1.程序已经调试好,无需更改代码替换数据集即可运行!!!数据格式为excel!1️⃣、运行环境要求MATLAB版本为2021b及其以上2️⃣、评价指标包括:R2、MAE、MAPE、MBE、RMSE等,图很多,符合您的需要3️⃣、代码中文注释清晰,质量极高4️⃣、赠送测试数据集,可以直接运行源程序。

small_ccb的博客 425

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

PyTorch框架的中LSTM的输入和输出

input_size:输入数据的特征维度,(单变量=1,embedding=【词向量的表示维度】)hidden_size:LSTM隐层的维度num_layers:循环神经网络的层数 1或者2batch_first:通常默认为False,输入的数据shape=(time_steps,batch_size,embedding)batch_first=True,则输入的数据shape=(batch_size,time_steps,embedding)

qq_38633279的博客 3778

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【Python时序预测系列】基于LSTM实现时序数据多输入单输出多步预测(案例+源码)

基于LSTM实现时序数据多输入单输出多步预测(案例+源码)

数据杂坛 1571

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

基于LSTM的时间序列单输入单输出预测之旅

传统的神经网络在处理时间序列时,往往会遇到“梯度消失”或“梯度爆炸”的问题,就好像人走太远路会累垮一样,时间序列稍长一点,传统神经网络就“歇菜”了。而LSTM就像是给神经网络装上了一个“记忆背包”,能够很好地处理长期依赖问题,记住时间序列中的重要信息,让预测更靠谱。

2501_93693767的博客 367

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

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

comli_cn的博客 4万+

基于TCN-LSTM的时序预测模型:多特征到单变量预测的深度学习框架

咱们搞时间序列预测的都知道,传统LSTM处理长期依赖可能有点力不从心,这时候引入时间卷积网络(TCN)的膨胀因果卷积结构,相当于给模型装了个望远镜——既能抓住局部特征又能看得远。最后提醒下,TCN-LSTM对周期性明显的数据效果拔群,但要是遇到突变型时序(比如突发事件影响下的流量数据),建议加上异常检测模块。特别注意预测波动区间的可视化,这个用分位数回归实现的置信带比单纯的点预测实用得多。、评价指标包括:R2、MAE、MSE、RPD、RMSE等,图很多,符合您的需要。、测试数据集,可以直接运行源程序。

2508_94198873的博客 501
下一篇: 【深度学习lstm 多个学习集样本训练时总是最后一个样本的loss太大】
lightingMaster
博客等级 码龄5年 3粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值