LSTM时间序列预测技巧与数据准备方法
小伙伴们对文章编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《LSTM时间序列预测:数据准备与模型构建技巧》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

本教程旨在解决使用LSTM进行时间序列预测时常见的“数据基数模糊”错误,并提供一套完整的解决方案。文章详细阐述了如何正确准备序列数据,将其转换为LSTM模型所需的输入格式,并指导读者构建一个适用于回归任务的LSTM模型,包括选择合适的激活函数和损失函数,最终实现准确的时间序列预测。
1. 理解LSTM与时间序列数据
长短期记忆网络(LSTM)是循环神经网络(RNN)的一种变体,特别擅长处理和预测时间序列数据。在进行时间序列预测时,我们通常希望模型能够根据历史序列数据预测未来的一个或多个值。一个常见的场景是,给定前 N 个时间步的数据,预测第 N+1 个时间步的值。
然而,初学者在使用Keras构建LSTM模型时,常会遇到 ValueError: Data cardinality is ambiguous 这样的错误。这通常是由于输入 X 和输出 Y 的样本数量不匹配,或者输入数据的形状不符合LSTM层的要求所致。此外,输出层的激活函数选择不当也是一个常见问题。
2. 时间序列数据准备:构建监督学习样本
要训练一个LSTM模型,我们需要将原始时间序列数据转换为监督学习问题所需的输入-输出对。假设我们有一个一维时间序列 [1, 2, 3, 4, 5, 6, 7],并且我们知道每个样本与其前两个样本之间存在关系(例如,1, 2 预测 3;2, 3 预测 4)。这意味着我们的“序列长度”或“回溯步长”是 2。
我们需要创建一个数据生成器,将原始序列转换为以下形式:
- 输入 (X): 包含 sequences_length 个连续时间步的序列。
- 输出 (Y): 紧随输入序列的下一个时间步的值。
以下是一个实现此逻辑的Python函数:
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# 原始时间序列数据
data = np.array([1, 2, 3, 4, 5, 6, 7])
sequences_length = 2 # 定义回溯步长
def create_sequences(data, sequences_length):
"""
将一维时间序列数据转换为LSTM模型所需的输入-输出对。
参数:
data (np.array): 原始一维时间序列数据。
sequences_length (int): 每个输入序列的长度(回溯步长)。
返回:
tuple: (X, Y),其中X是输入序列数组,Y是对应的目标值数组。
"""
X, Y = [], []
for i in range(len(data) - sequences_length):
# 提取输入序列
X.append(data[i : i + sequences_length])
# 提取目标值
Y.append(data[i + sequences_length])
return np.array(X), np.array(Y)
# 生成训练数据
X_raw, Y = create_sequences(data, sequences_length)
# 打印生成的样本以进行检查
print("原始X样本:")
for i in range(X_raw.shape[0]):
print(f"X[{i}]: {X_raw[i]}, Y[{i}]: {Y[i]}")
# 原始X样本:
# X[0]: [1 2], Y[0]: 3
# X[1]: [2 3], Y[1]: 4
# X[2]: [3 4], Y[2]: 5
# X[3]: [4 5], Y[3]: 6
# X[4]: [5 6], Y[4]: 7从上述输出可以看出,我们成功从7个原始数据点中生成了5个监督学习样本。现在,X_raw 的形状是 (5, 2),Y 的形状是 (5,)。这解决了 Data cardinality is ambiguous 的问题,因为 X 和 Y 现在都有相同的样本数量(5个)。
3. LSTM输入形状的重塑
LSTM层期望的输入形状是 (samples, timesteps, features):
- samples: 样本数量,即训练数据中的输入-输出对的数量。
- timesteps: 每个序列的长度,即 sequences_length。
- features: 每个时间步的特征数量。对于一维时间序列,特征数量通常是 1。
因此,我们需要将 X_raw 从 (5, 2) 重塑为 (5, 2, 1)。
# 重塑X以符合LSTM输入要求
X = np.reshape(X_raw, (X_raw.shape[0], sequences_length, 1))
print(f"\n重塑后的X形状: {X.shape}")
print(f"Y的形状: {Y.shape}")现在,X 的形状是 (5, 2, 1),Y 的形状是 (5,)。
4. 构建LSTM模型
在构建LSTM模型时,除了输入形状,还需要注意输出层的选择。由于我们正在进行数值预测(回归任务),输出层应该是一个 Dense 层,且不应使用 softmax 激活函数。softmax 适用于多类别分类问题,而对于回归问题,我们通常使用线性激活(即不指定激活函数,Keras默认是线性)。
# 构建LSTM模型
model = keras.Sequential([
# LSTM层,input_shape=(timesteps, features)
layers.LSTM(64, input_shape=(sequences_length, 1)),
# 全连接输出层,用于回归任务,不使用激活函数(默认为线性)
layers.Dense(1)
])
# 编译模型
# 优化器选择 'adam'
# 损失函数选择 'mse' (均方误差) 适用于回归任务
model.compile(optimizer="adam", loss="mse")
model.summary()注意事项:
- layers.LSTM(64, ...) 中的 64 是LSTM单元的数量,可以根据模型复杂度和数据规模调整。
- input_shape=(sequences_length, 1) 严格匹配我们准备好的 X 的 (timesteps, features) 部分。
- layers.Dense(1) 表示输出一个单一的连续值。
- loss="mse" (Mean Squared Error) 是回归任务的常用损失函数。
- metrics=["accuracy"] 不适用于回归任务,应避免使用。
5. 模型训练
使用准备好的 X 和 Y 数据对模型进行训练。为了更好地学习数据中的模式,通常需要多个 epochs。
# 训练模型
print("\n开始训练模型...")
model.fit(X, Y, epochs=1000, batch_size=1, verbose=0) # verbose=0 关闭训练进度输出
print("模型训练完成。")6. 模型预测
训练完成后,我们可以使用模型对新的序列数据进行预测。重要的是,用于预测的输入数据也必须按照与训练数据相同的格式进行准备和重塑。
假设我们想预测 [8, 9] 之后的下一个值。
# 准备用于预测的新数据
inference_data_raw = np.array([[8, 9]]) # 注意这里是二维数组
inference_data = np.reshape(inference_data_raw, (1, sequences_length, 1))
# 进行预测
print(f"\n预测 {inference_data_raw.reshape(-1)} 之后的下一个值...")
prediction = model.predict(inference_data)
print(f"预测结果: {prediction[0][0]:.4f}")
# 期望结果接近 107. 总结与最佳实践
本教程展示了如何正确地为LSTM时间序列预测任务准备数据和构建模型。核心要点包括:
- 数据基数匹配: 确保输入 X 和输出 Y 的样本数量(第一维度)完全一致,这是避免 Data cardinality is ambiguous 错误的关键。
- LSTM输入形状: LSTM层期望的输入形状是 (samples, timesteps, features)。对于一维时间序列,features 通常为 1。
- 数据生成器: 编写一个函数来将原始时间序列转换为 (input_sequence, target_value) 对,这是构建监督学习样本的有效方法。
- 输出层与激活函数: 对于回归任务,输出层应使用 Dense(1) 且通常不指定激活函数(默认为线性),避免使用 softmax。
- 损失函数: 针对回归任务,选择 mse (均方误差) 或 mae (平均绝对误差) 等合适的损失函数。
- 预测数据格式: 进行预测时,新的输入数据必须与训练数据具有相同的 (timesteps, features) 形状,并包裹在 (1, timesteps, features) 的批次维度中。
遵循这些最佳实践,可以有效避免常见的错误,并成功构建和训练用于时间序列预测的LSTM模型。
理论要掌握,实操不能落!以上关于《LSTM时间序列预测技巧与数据准备方法》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!
微信支付限额怎么调?转账额度调整方法
- 上一篇
- 微信支付限额怎么调?转账额度调整方法
- 下一篇
- Win11无法访问局域网共享怎么解决
-
- 文章 · python教程 | 6秒前 |
- 自动化脚本调优模型全流程详解
- 439浏览 收藏
-
- 文章 · python教程 | 19分钟前 |
- Python爬虫项目上线注意事项
- 396浏览 收藏
-
- 文章 · python教程 | 34分钟前 |
- {%with%}标签变量作用域与累加使用详解
- 472浏览 收藏
-
- 文章 · python教程 | 43分钟前 | Python函数
- Python生成器实现协程详解教程
- 315浏览 收藏
-
- 文章 · python教程 | 47分钟前 |
- Python中的反向传播算法详解
- 322浏览 收藏
-
- 文章 · python教程 | 58分钟前 | Python Windows
- Python安装常见问题与注意事项
- 171浏览 收藏
-
- 文章 · python教程 | 1小时前 |
- 正则表达式如何匹配空格?全面解析
- 275浏览 收藏
-
- 文章 · python教程 | 1小时前 |
- Python日志异常联动解决方案
- 287浏览 收藏
-
- 文章 · python教程 | 1小时前 |
- Python多设备自动化控制教程
- 307浏览 收藏
-
- 文章 · python教程 | 1小时前 |
- Python如何序列化JSON数据
- 106浏览 收藏
-
- 文章 · python教程 | 1小时前 | Python入门
- Python嵌套列表求和技巧教程
- 285浏览 收藏
-
- 文章 · python教程 | 1小时前 | Python Python入门 python安装环境准备
- 虚拟环境是什么?有什么用?
- 493浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3485次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3707次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3710次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4855次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 4083次使用
-
- Flask框架安装技巧:让你的开发更高效
- 2024-01-03 501浏览
-
- Django框架中的并发处理技巧
- 2024-01-22 501浏览
-
- 提升Python包下载速度的方法——正确配置pip的国内源
- 2024-01-17 501浏览
-
- Python与C++:哪个编程语言更适合初学者?
- 2024-03-25 501浏览
-
- 品牌建设技巧
- 2024-04-06 501浏览

