基于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

立创EDA + AI 生成 STM32 原理图教程1

AI辅助立创EDA设计STM32原理图教程摘要 本教程系统介绍如何利用AI工具(如Claude Code、DeepSeek等)与立创EDA专业版结合,实现STM32原理图的智能生成与优化。主要内容包括: 技术架构:采用分层设计,AI生成结构化网表数据,由立创EDA执行确定性绘图,确保可审查性 环境搭建:详细说明立创EDA专业版、Node.js等工具的安装配置 五种AI集成方案:包括官方AI Skill、MCP Server等不同实现方式 核心功能: 自动提取STM32引脚定义 智能元件选型与LCSC编号匹配

shihui2003的博客 1548

【Autosar】学习总结-MCAL

一、简介 MCAL:微控制器抽象层;位于BSW层中的最下层; MCAL细分,可将驱动分为:微控制器驱动、存储器驱动、通信驱动、IO驱动: 二、MCAL的配置(EB-Tresos) 1.PORT 我理解的PORT:MCAL层中的IO驱动组中的pin脚总体配置: Port就是芯片上的每个pin脚,可以配置成DIO ADC PWM ICU等单引脚的功能,也能配置成CAN的TX或者RX、SPI的MOSI等等其他功能的单个pin脚功能; 总之,PORT就是芯片上的具体的某个引脚。 配置

zDavid_2018的博客 3万+

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

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

Matlab_dashi的博客 1056

​开源大模型实战:GLM-4.1V-Thinking本地部署教程(附API调用代码)

​在AI应用从“能用”向“好用”进阶的当下,​的需求愈发强烈:企业需保障数据安全(如医疗影像、金融报告不外传),开发者追求定制化能力(如微调模型适配垂直场景),科研团队则依赖离线环境处理敏感数据。智谱AI开源的​(10B级参数,支持图像、视频、文档多模态推理)凭借的优势,成为本地部署的热门选择。不过,对于“不想折腾技术”的普通用户或快速验证需求的团队而言,​,无需安装配置,打开即用,堪称“零门槛”体验的捷径。本文将分为两部分:先手把手教你​(适合有技术背景的用户),再对比介绍。

gogoMark的博客 1340

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

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

gitblog_06738的博客 352

5G-A无源物联网:深度解析“不插电“智能的底层技术原理

北京移动推出5G-A无源物联网技术,实现电动车标签"零功耗"运行。该技术通过射频能量收集(利用5G-A基站高功率信号转换为电能)和反向散射通信(调制反射信号传输数据)两大核心技术,使设备无需电池即可工作。5G-A相比4G在信号能量密度、通信速率和定位精度等方面显著提升,结合通感一体等创新技术,为无源物联网提供商用基础。该方案已在北京小区试点应用,实现电动车精准定位管理,标签寿命可达5年以上。专家预测,这项技术将大幅降低物联网部署成本,推动"万物智联"时代的到来。

通信行业老兵、物联网从业者,做一个有趣的普通人。 2012

STM32F103C8T6+HX711实战:从零打造智能体重秤(附OLED显示与语音播报)

本文详细介绍了基于STM32F103C8T6微控制器和HX711称重模块,从零构建智能体重秤的完整实战教程。内容涵盖硬件选型、系统架构、驱动编写、数据滤波校准算法,并实现了OLED显示与语音播报功能。该项目是嵌入式学习的综合性实践,尤其适合作为毕业设计课题,帮助开发者掌握传感器应用、数据处理及人机交互等核心技能。

weixin_28285943的博客 517

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

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

weixin_47216888的博客 1130

【汽车主动降噪】【ANC算法优化】基于深度学习的汽车主动噪声控制技术研究及Matlab实现

本文探讨了基于深度学习的汽车主动降噪(ANC)算法优化方案。针对传统FXLMS算法在应对复杂、非线性车内噪声时的局限性,文章详细解析了如何利用神经网络作为非线性建模器、深度滤波器或智能步长调节器来增强ANC系统性能,并提供了完整的Matlab仿真实战流程,展示了深度学习在提升降噪效果和收敛速度方面的潜力。

seed的博客 540

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

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

gitblog_09730的博客 551

【Inpho精品教程】Inpho简介、安装教程(附Inpho8安装包下载)

本文介绍Trimble旗下Inpho UASMaster航空摄影测量软件,涵盖其核心功能模块(如Match-AT、OrthoMaster、Summit Evolution等)及安装教程。文章详细说明了从安装到汉化破解的全过程,并提供Inpho 8.0.1安装包下载链接与提取码,适用于无人机摄影测量专业用户。

智慧空间实验室 1万+

025、Zephyr RTOS设备树覆盖与修改

本文分享了在Zephyr RTOS中使用设备树覆盖(overlay)的实战经验。作者通过一个工业数据采集项目中GPIO无法拉高的调试案例,揭示了设备树覆盖的"叠加"本质而非简单替换。文章详细介绍了覆盖文件的正确编写方式,包括节点引用、pinctrl配置等技巧,并总结了常见陷阱如状态设置不完整、别名冲突等问题。特别强调了条件覆盖的用法和调试方法,最后提出了覆盖文件管理的五项实用原则,强调设备树覆盖是硬件与软件之间的重要契约,需要谨慎对待。全文以实际项目为背景,提供了可操作性强的技术建议。

m0_50546716的博客 33

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

数据杂坛 1571

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

基于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、付费专栏及课程。

余额充值