
针对lstm时间序列预测中常见的“数据基数模糊”错误,本教程详细阐述了如何正确准备输入序列数据(x和y),包括滑动窗口机制构建训练样本,以及如何调整lstm层的`input_shape`。同时,纠正了回归任务中输出层激活函数和损失函数的选择,提供了完整的keras代码示例,帮助读者构建和训练有效的lstm模型进行时间序列预测。
循环神经网络(RNN),特别是长短期记忆网络(LSTM),在处理时间序列数据方面表现出色。然而,初学者在使用Keras构建LSTM模型进行时间序列预测时,常会遇到数据准备和模型配置上的挑战,其中最典型的问题是“Data cardinality is ambiguous”(数据基数模糊)错误,这通常源于输入特征X和目标标签Y的样本数量不匹配,以及input_shape设置不当。本教程将详细指导如何正确处理这些问题,并提供一个完整的实践案例。
在时间序列预测中,我们通常希望根据历史的n个时间步来预测下一个时间步的值。例如,给定序列[1, 2, 3, 4, 5, 6, 7],如果我们要根据前两个值预测第三个值,那么训练样本将是:
从上述示例可以看出,输入X和目标Y的样本数量是不同的,但它们必须一一对应。原始序列有7个元素,而通过滑动窗口方式生成的训练样本对只有5个。这就是“Data cardinality is ambiguous”错误的核心原因:Keras要求X和Y在训练时必须拥有相同数量的样本。
为了解决数据基数问题,我们需要编写一个数据加载器(dataloader)函数,将原始一维时间序列数据转换为符合LSTM输入要求的格式。
该函数将原始序列data和序列长度sequences_length(即滑动窗口大小)作为输入,生成X(输入序列)和Y(目标值)对。
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 # 使用前2个时间步预测下一个
def create_sequences(data, sequences_length):
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_raw = create_sequences(data, sequences_length)
# 打印生成的样本对进行检查
print("生成的输入序列 X_raw:")
print(X_raw)
print("\n对应的目标值 Y_raw:")
print(Y_raw)
# 预期输出:
# X_raw:
# [[1 2]
# [2 3]
# [3 4]
# [4 5]
# [5 6]]
# Y_raw:
# [3 4 5 6 7]现在,X_raw和Y_raw都包含5个样本,解决了数据基数不匹配的问题。
LSTM层期望的输入形状是三维的:(num_samples, timesteps, num_features)。
因此,我们需要将X_raw从(num_samples, sequences_length)重塑为(num_samples, sequences_length, 1)。
X = np.reshape(X_raw, (X_raw.shape[0], sequences_length, 1))
print("\n重塑后的 X 形状:", X.shape)
print("重塑后的 X 内容:")
print(X)
# 预期输出:
# 重塑后的 X 形状: (5, 2, 1)
# 重塑后的 X 内容:
# [[[1]
# [2]]
#
# [[2]
# [3]]
#
# [[3]
# [4]]
#
# [[4]
# [5]]
#
# [[5]
# [6]]]至此,我们的输入数据X和目标数据Y_raw(可以重命
名为Y)已经准备完毕,可以用于LSTM模型的训练。
Get笔记
Get笔记,一款AI驱动的知识管理产品
774
查看详情
模型的构建需要注意LSTM层的input_shape和输出层的激活函数。
layers.LSTM的input_shape参数应指定单个样本的形状,即(timesteps, num_features)。在本例中,为(sequences_length, 1)。
由于这是一个回归任务(预测一个具体的数值),输出层应该是一个Dense(1)层,且不应使用softmax激活函数。softmax用于多分类任务,会强制输出值的和为1,这与回归预测的需求不符。对于回归任务,通常使用线性激活(即不指定激活函数,Dense层默认为线性激活),或者在某些情况下使用relu等。
对于回归任务,应选择合适的损失函数,如均方误差(Mean Squared Error, mse)或平均绝对误差(Mean Absolute Error, mae)。优化器可以选择adam或rmsprop。不应使用accuracy作为评估指标,因为它适用于分类任务。
model = keras.Sequential([
layers.LSTM(64, input_shape=(sequences_length, 1)), # input_shape = (timesteps, features)
layers.Dense(1) # 回归任务,输出一个数值,默认线性激活
])
model.compile(optimizer="adam", loss="mse")
model.summary()数据和模型都准备好后,就可以进行训练和预测了。
# 将Y_raw重命名为Y以保持一致性
Y = Y_raw
print("\n开始训练模型...")
model.fit(X, Y, epochs=1000, batch_size=1, verbose=0) # verbose=0 避免打印过多训练日志
print("模型训练完成。")训练完成后,我们可以使用模型对新的序列进行预测。例如,预测序列[8, 9]的下一个值。
inference_data = np.array([[8, 9]]).reshape(1, sequences_length, 1)
predicted_value = model.predict(inference_data)
print(f"\n预测 [8, 9] 的下一个值: {predicted_value[0][0]:.2f}")
# 期望预测结果接近 10解决LSTM时间序列预测中的“Data cardinality is ambiguous”错误和相关维度问题,关键在于正确理解LSTM的输入要求并进行相应的数据预处理。通过滑动窗口机制生成X和Y样本对,并确保它们数量一致。同时,将X重塑为(num_samples, timesteps, num_features)的三维结构,并为LSTM层设置正确的input_shape。最后,针对回归任务选择合适的输出层激活函数(线性)和损失函数(如mse),避免使用分类任务的softmax和accuracy。遵循这些步骤,将能有效地构建和训练用于时间序列预测的LSTM模型。
以上就是解决LSTM时间序列预测中的数据维度与Cardinality错误的详细内容,更多请关注其它相关文章!
# 是一个
# 何推广网站来云速捷优选
# seo短期培训课程
# 如何去优化一个网站
# 丹东营销网站优化流程图
# 全力做好营销推广的措施
# 易趣网站建设工程
# 网站优化有什么影响
# 贵州国内网站建设
# 仙桃seo推广ppt
# 什么是seo 如何做好seo
# 加载
# app
# 不匹配
# 都是
# 命名为
# 不应
# 将是
# 本例
# 但在
# 自定义
# red
# 神经网络
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
Linux如何优化系统启动流程_Linux启动项优化方案
192.168.1.1路由器后台入口 192.168.1.1默认登录入口
windows server2019显卡驱动怎么安装_winserver2019显卡驱动安装与远程桌面优化
PHP安全加载非公开目录图片与动态内容类型处理指南
《知到》打卡课程方法
智学网成绩单查询系统网_智学网学生平台登录
网站体验不好=浪费钱:如何提升-用户体验效果差
Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区
《小黑盒》删除历史浏览方法
《随手记》备份数据方法
《七读免费小说》开通会员方法
Dash应用中自定义HTML页面标题与网站图标(F*icon)的实用指南
《腾讯相册管家》注销账号方法
优化CSS动画与J*aScript定时器协同:构建稳定Toast提示
京东物流快递破损了怎么办_京东快递破损理赔流程
实时数据流中高效查找最小值与最大值
百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法
Apple Music无故扣费引质疑
苹果SE如何开启单手模式_苹果SE单手操作功能
虫虫助手如何更新游戏
怎么恢复删除的电脑文件_数据恢复软件使用教程
Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置
如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战
猫眼app抢票快还是小程序快
《万兴喵影》导出视频方法
解决PHP MySQL数据库更新无响应:SQL查询语法错误解析
晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制
《美篇》取消会员自动续费方法
Magento 2 产品保存事件中安全更新属性的最佳实践
Coolpad5890 ROM刷机包
使用Python和NLTK从文本中高效提取名词的实用教程
4399小游戏下装链接 4399小游戏下载链接入口
iPhone 15 Pro如何查看存储空间占用_iPhone 15 Pro存储空间查看教程
网页版网易云音乐入口_网易云音乐在线官网登录
OTT月报 | 2025年9月智能电视大数据报告
家里的小飞虫总是不断,用什么方法可以彻底根除?
百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析
悟空浏览器网页版在线工具 悟空浏览器网页版在线平台入口
j*a中ArrayBlockingQueue的使用
c++如何使用std::thread::join和detach_c++线程生命周期管理
《百果园》充值余额方法
《广发易淘金》国债逆回购操作教程
Animex动漫社正版在线入口 Animex动漫社动漫官方观看网
163邮箱网页版入口 163邮箱在线使用
嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】
解决CSS容器溢出问题:使用calc()实现精确布局与边距控制
抖音猜你想搜能说明对方搜过吗
Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】
J*aScript调试技巧_性能分析与内存快照
Golang如何实现HTTP请求重试机制_Golang HTTP请求错误处理策略
2025-12-08
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。