基于LSTM的时间序列预测研究

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 基于LSTM的时间序列预测研究

LSTM 时间序列分析预测 目录

概述

  • 使用LSTM神经网络进行时间序列数据预测分析
  • 基于Tensorflow框架、Keras接口开发网络模型
  • 包含:数据清洗、数据特征提取、数据建模、数据预测

项目资源

  1. 自回归(AR,ARIMA)模型时间序列预测合集:代码获取见底部卡片
  2. 深度学习模型时间序列预测合集::代码获取见底部卡片
  3. 基于NLP的文本分析项目合集::代码获取见底部卡片

第一部分:基础LSTM应用

一、LSTM单变量预测(shampoo-sales)

  1. LSTM单变量基础
  • 香皂销售预测案例
  1. 数据预处理
  • 观测值缩放
  • 时间序列转稳定数据
  • 时间序列转监督学习数据
  1. 模型开发
  • LSTM模型构建
  • 完整LSTM案例实现
  • 健壮性优化案例

二、LSTM多变量预测(air_pollution)

  1. 数据准备
  • 多变量数据输出
  • 预处理流程
  1. 模型开发
  • LSTM数据预处理
  • 模型定义与训练

三、Multi-Step LSTM预测

  1. 静态模型预测
  2. 多步预测LSTM网络实现

第二部分:LSTM进阶应用(airline-passengers)

  1. LSTM回归网络(1→1)
  2. 移动窗口型回归(3→1)
  3. 时间步长型回归(3→1)
  4. 批次间具有记忆的LSTM
  5. 批次间具有堆叠的LSTM

第三部分:LSTM核心特性

一、编码器-解码器架构

  1. 回声随机序列案例
  • 数据准备
  • 序列预测
  • 模型实现
  • 简化版可观测数据
  1. 输入输出模式
  • 一对一LSTM
  • 多对一LSTM
  • 多对多LSTM(TimeDistributed)
  1. 有状态网络预测
  • 输入输出对配置
  • 数据重塑方法
  • 完整实现案例

二、Keras LSTM生命周期

  1. 5步操作流程
  2. 代码实现解析

第四部分:数据准备技术

一、缺失值处理

  1. 序列缺失值学习
  2. 忽略缺失值策略
  3. 删除缺失数据
  4. 替换缺失数据

二、数据标准化

  1. 标准化方法
  2. 归一化方法

三、数据变换

  1. 差分消除季节性
  2. 差分消除趋势

四、特征编码

  1. One-hot编码实现
  • Keras实现
  • Scikit-learn实现
  • 手动实现

五、数据重塑

  1. 单输入样本处理
  2. 多输入特征处理
  3. 单变量时间序列准备

第五部分:LSTM建模技术

一、网络架构

  1. 堆叠LSTM实现
  • 2D输出版本
  • 3D输出版本

二、模型管理

  1. 模型保存与加载

三、模型诊断

  1. 欠拟合识别(训练周期不足)
  2. 合格模型标准
  3. 过拟合识别
  4. 多次拟合评估方法

第六部分:完整案例

案例1:空气质量预测(多变量)

  1. 数据准备与可视化
  2. 监督学习数据转换
  3. 单日预测模型
  4. 三日预测模型

案例2:洗发水销量(单步预测)

  1. 数据集分析
  2. 滞后模型构建
  3. 监督数据结构
  4. 差分法与缩放法
  5. LSTM实现与评估
  6. 股票数据测试
  • 原始数据预测
  • 验证集损失分析

案例3:洗发水销量(多步预测)

  1. 监督数据准备
  2. 静态预测效果
  3. 神经网络预测实现

核心代码

基于LSTM的时间序列预测研究
# coding=utf-8
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
#——————————————————导入数据——————————————————————
f = open('dataset_1.csv')
df = pd.read_csv(f)         #读入股票数据
data = np.array(df['max'])  #获取最高价序列
data = data[::-1]#反转,使数据按照日期先后顺序排列
#以折线图展示data
# plt.figure()
# plt.plot(data)
# plt.show()
normalize_data = (data - np.mean(data)) / np.std(data)#标准化
normalize_data = normalize_data[:, np.newaxis]#增加1个维度
#———————————————————形成训练集—————————————————————
time_step = 20      #时间步
rnn_unit = 10       #hidden layer units
lstm_layers = 2     #每一批次训练多少个样例
batch_size = 60     #输入层维度  #每一批次训练多少个样例
input_size = 1      #输入层维度
output_size = 1     #输出层维度
lr = 0.0006         #学习率
train_x, train_y = [], []#训练集
for i in range(len(normalize_data) - time_step - 1):
    x = normalize_data[i:i + time_step]
    y = normalize_data[i + 1:i + time_step + 1]
    train_x.append(x.tolist())
    train_y.append(y.tolist())
# 定义每个X sample的形状(?, time_step, input_size)
X = tf.placeholder(tf.float32, [None, time_step, input_size])
# 定义每个Y sample的形状(?, time_step, output_size)
Y = tf.placeholder(tf.float32, [None, time_step, output_size])
#——————————————————定义神经网络变量——————————————————
#输入层、输出层权重、偏置
weights = {
    'in': tf.Variable(tf.random_normal([input_size, rnn_unit])),
    'out': tf.Variable(tf.random_normal([rnn_unit, 1]))
}
print(weights)
biases = {
    'in': tf.Variable(tf.constant(0.1, shape=[rnn_unit, ])),
    'out': tf.Variable(tf.constant(0.1, shape=[1, ]))
}
print(biases)
#参数:输入网络批次数目
def lstm(batch):#参数:输入网络批次数目
    w_in = weights['in']
    b_in = biases['in']
    print(X)
    input = tf.reshape(X, [-1, input_size])#需要将tensor转成2维进行计算,计算后的结果作为隐藏层的输入
    print(input)
    input_rnn = tf.matmul(input, w_in) + b_in
    input_rnn = tf.reshape(input_rnn, [-1, time_step, rnn_unit])#将tensor转成3维,作为lstm cell的输入
    cell = tf.nn.rnn_cell.MultiRNNCell([tf.nn.rnn_cell.BasicLSTMCell(rnn_unit) for i in range(lstm_layers)])
    init_state = cell.zero_state(batch, dtype=tf.float32)
    output_rnn, final_states = tf.nn.dynamic_rnn(cell, input_rnn, initial_state=init_state, dtype=tf.float32)
    output = tf.reshape(output_rnn, [-1, rnn_unit])#作为输出层的输入
    w_out = weights['out']
    b_out = biases['out']
    pred = tf.matmul(output, w_out) + b_out
    return pred, final_states
def train_lstm():
    global batch_size
    with tf.variable_scope("sec_lstm"):
        pred, _ = lstm(batch_size)
    # 损失函数
    loss = tf.reduce_mean(tf.square(tf.reshape(pred, [-1]) - tf.reshape(Y, [-1])))
    train_op = tf.train.AdamOptimizer(lr).minimize(loss)
    saver = tf.train.Saver(tf.global_variables())
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        # 重复训练10000次
        for i in range(100):  # We can increase the number of iterations to gain better result.
            step = 0
            start = 0
            end = start + batch_size
            print("i = ",i)
            while (end < len(train_x)):
                _, loss_ = sess.run([train_op, loss], feed_dict={X: train_x[start:end], Y: train_y[start:end]})
                start += batch_size
                end = start + batch_size
                if step % 100 == 0:  #每10步保存一次参数
                    print("Number of iterations:", i, " loss:", loss_)
                    print("model_save", saver.save(sess, 'model_save1\\modle.ckpt'))
                    # I run the code in windows 10,so use  'model_save1\\modle.ckpt'
                    # if you run it in Linux,please use  'model_save1/modle.ckpt'
                step += 1
        print("The train has finished")
train_lstm()
    input()
prediction()

基于LSTM的时间序列预测研究

相关文章
|
1天前
|
人工智能 自然语言处理 算法
GEO实战:用RAG构建外贸知识库
AI搜索时代,外贸企业缺的不是内容,而是结构化、可检索、可验证的企业知识库。本文以RAG为框架,详解如何将分散的资质、案例、流程等转化为“知识原子”,支撑GEO(生成式引擎优化),实现AI精准理解、可信回答与商机转化。
44 0
|
23小时前
|
人工智能 运维 API
【独立开发实战】告别算力焦虑与API限流:低成本构建AIGC应用的技术选型与避坑指南
AI应用爆发下,独立开发者常困于API成本高、网络不稳定两大痛点。本文分享三大工程化解法:标准化接口降低迁移成本、专线网络优化保障低延迟、聚合通道实现Token成本直降70%。助你轻运维、快落地、稳增长。(239字)
|
20小时前
|
算法 PyTorch 算法框架/工具
基于PyTorch的EfficientDet进行水下目标检测 水下目标检测
项目概述:基于PyTorch的EfficientDet进行水下目标检测 在这个项目中,我们将通过实际比赛数据集演示如何训练最近开源的相对最先进的PyTorch版EfficientDet模型。本教程将涵盖从数据准备到模型训练、评估以及推断的全过程。值得注意的是,在本次实验中,我们没有采用任何数据增强技术或模型融合等后处理方法来提升模型精度;同样地,我们也未使用如UWGAN_UIE、水质迁移(WQT)、DG-YOLO或其他去雾算法对水下图像进行预处理。尽管这些技巧可能有助于提高识别准确率,但我们希望保持基础框架的纯粹性以专注于模型本身的性能。 1. 数据来源 我们的数据来自于科赛网举办的一次水下
|
20小时前
|
机器学习/深度学习 文字识别 数据处理
基于OCR的水位检测项目 水位识别
基于OCR的水位检测项目 水位识别
|
21小时前
|
存储 人工智能 运维
十大 AI Agent Memory记忆系统全维度横评 主流方案架构、性能与场景选型指南
随着AI Agent从基础问答工具进化为可执行复杂长周期任务的智能体,记忆能力已经成为决定智能体上限的核心要素。传统基于向量数据库与RAG检索的技术方案,仅能实现简单信息检索,并不具备完整的记忆管理能力,在时序追踪、多代理一致性、分层存储、智能路由等方面存在明显短板。在实际生产环境中,大量AI Agent将近八成以上的计算资源消耗在重复梳理上下文信息上,真正用于业务执行的资源占比极低,这也是当前智能体规模化落地的核心瓶颈。
36 0
|
20小时前
|
人工智能 自然语言处理 运维
阿里云百炼CLI全解 命令行工具接入AI Agent实操与能力指南
在AI Agent快速普及的技术阶段,智能体不再局限于单纯的文本对话,而是需要融合文本生成、视觉处理、音视频创作、知识库检索、联网查询等多元化能力。传统的集成方式需要开发者对接不同接口、适配各类协议,开发流程繁琐,且难以统一管理多类AI服务。阿里云百炼CLI(Bailian CLI)是专为AI Agent场景打造的命令行工具,它将百炼平台一百五十余款大模型、十余项全栈AI能力进行统一封装,以轻量化命令行的形式对外提供调用入口。
34 0
|
19小时前
|
人工智能 运维 安全
Hermes Agent 核心必学:SubAgent 子代理的 5 个实战技巧,多任务处理效率翻倍
Hermes Agent SubAgent子代理完整教程:掌握delegate_task并行委派、上下文隔离与多任务处理核心能力,提升开发效率。
46 0
|
1天前
|
SQL 关系型数据库 MySQL
实时报表加速实战:阿里云 AnalyticDB MySQL 在电商、游戏、金融行业的应用
阿里云AnalyticDB MySQL版是实时报表首选数据仓库,专为电商、游戏、金融行业设计。毫秒级数据更新、亚秒级查询(支持1000+并发)、实时物化视图加速,性能超同类方案10倍,全面解决T+1延迟、高并发排队、维度爆炸等核心痛点。
35 0
实时报表加速实战:阿里云 AnalyticDB MySQL 在电商、游戏、金融行业的应用
|
21小时前
|
人工智能 自然语言处理 NoSQL
电商自动化利器:阿里云骡子快跑 MuleRun 功能、价格与使用攻略
阿里云骡子快跑(MuleRun)是一站式AI智能工作空间,深度融合大模型与自动化执行能力,支持自然语言驱动任务。适用于电商商品上架、运营分析、全渠道触达等场景。提供Team版(420元/席/月)和Enterprise版(2500元/席/年),含多模态控制、四层记忆、安全沙箱及开箱即用数据连接。阿里云MuleRun官网:https://t.aliyun.com/U/gSCv7v
|
1天前
|
人工智能 JavaScript 前端开发
Codex新手入门
Codex CLI是OpenAI推出的开源终端AI编程助手,基于Rust构建,响应超快(240+ tokens/s),成本仅Claude Code的1/3。支持文件系统操作、并行任务与模型切换,兼顾安全沙箱与高效开发,专为快速原型设计而生。