使用LSTM模型进行时间序列数据预测的完整示例
创作时间:
作者:
@小白创作中心
使用LSTM模型进行时间序列数据预测的完整示例
引用
CSDN
1.
https://blog.csdn.net/C7211BA/article/details/142555359
LSTM(长短期记忆网络)是一种特殊的循环神经网络(RNN),特别适合处理和预测时间序列数据。本文将通过一个具体的Python代码示例,展示如何使用LSTM模型对包含线性趋势、周期性和噪声的复杂时间序列数据进行预测。
代码功能概述
这段代码展示了如何使用 LSTM(长短期记忆网络)模型对复杂的时间序列数据进行训练和预测。代码的主要功能分为以下几个步骤:
- 生成复杂的时间序列数据:通过将线性趋势、周期性正弦波和随机噪声相结合,生成模拟的时间序列数据。
- 数据预处理:使用 MinMaxScaler 将数据归一化,转换为适合 LSTM 模型的格式。
- 数据集准备:将时间序列数据转换为特定的输入输出格式,使用过去的 10 个时间步作为输入,预测下一个时间步的数据。
- 构建和训练 LSTM 模型:通过 Keras 构建一个两层 LSTM 网络,并使用均方误差损失函数和 Adam 优化器进行模型训练。
- 模型预测:使用训练好的模型对输入数据进行预测,并将预测值反归一化为原始范围。
- 可视化:绘制时间序列数据和模型预测结果的对比图,展示模型的预测效果。
最终,该模型可以用于对复杂时间序列数据进行预测,并可视化预测结果与真实数据的对比。
完整代码实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
from tensorflow.keras.layers import Input
# 1. 生成更加复杂的时间序列数据
np.random.seed(42)
time_steps = np.arange(100)
trend = 0.05 * time_steps # 线性趋势
seasonal = 10 * np.sin(0.2 * time_steps) # 周期性
noise = np.random.normal(scale=2, size=100) # 噪声
data = trend + seasonal + noise
# 2. 可视化生成的时间序列数据
plt.figure(figsize=(10, 6))
plt.plot(time_steps, data, label="Complex Time Series Data")
plt.xlabel("Time Steps")
plt.ylabel("Value")
plt.title("Complex Time Series Data")
plt.show()
# 3. 数据预处理
scaler = MinMaxScaler(feature_range=(0, 1))
data_scaled = scaler.fit_transform(data.reshape(-1, 1))
# 4. 准备数据:将时间序列数据转换为 LSTM 可用的形状
def create_dataset(data, time_step=5):
X, y = [], []
for i in range(len(data) - time_step):
X.append(data[i:(i + time_step), 0])
y.append(data[i + time_step, 0])
return np.array(X), np.array(y)
time_step = 10 # 使用过去10个时间步来预测下一个时间步
X, y = create_dataset(data_scaled, time_step)
X = X.reshape(X.shape[0], X.shape[1], 1)
# 5. 构建 LSTM 模型
model = Sequential()
model.add(Input(shape=(time_step, 1))) # 使用 Input 层来定义输入形状
model.add(LSTM(50, return_sequences=True))
model.add(LSTM(50))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
# 6. 训练模型
model.fit(X, y, epochs=100, batch_size=16, verbose=1)
# 7. 用模型进行预测
train_predict = model.predict(X)
train_predict = scaler.inverse_transform(train_predict.reshape(-1, 1))
# 8. 可视化真实数据和预测数据
plt.figure(figsize=(10, 6))
plt.plot(time_steps[time_step:], data[time_step:], label="True Data")
plt.plot(time_steps[time_step:], train_predict, label="Predicted Data", color="red", linestyle="--")
plt.xlabel("Time Steps")
plt.ylabel("Value")
plt.title("LSTM Time Series Prediction")
plt.legend()
plt.show()
通过运行上述代码,读者可以直观地看到LSTM模型如何学习并预测复杂时间序列数据的模式。这个示例不仅展示了LSTM模型的基本用法,还提供了完整的数据生成、预处理和可视化流程,非常适合初学者学习和参考。
热门推荐
新加坡银行针对中国客户出台新政,多家银行调整个人业务
生命权:从历史到未来的全面解读
水果直播的多元玩法与精彩呈现
陈皮白茶的功效与饮用指南:哪些人不宜饮用?
全瓷牙取下后基牙发黑?别担心,原因、处理方法及预防措施在这里!
烹饪一道美味的番茄炒蛋,看似简单,实则蕴含着不少技巧
番茄鸡蛋焖面:简单快手的美味秘籍
最令人着迷的数论问题之一—素数间隙,探究素数分布的本质规律
翡翠的几种紫色是什么?有哪些含义?又称什么色?代表什么?
灵活就业医保和城乡居民医保区别
水杨酸、果酸、杏仁酸、壬二酸、维A酸有什么区别,该怎么用?
什么期刊需要交版面费?一文详解版面费支付流程
如何顺利领取广东生育津贴?这种津贴的领取条件有哪些?
日本知名插画师一览!
国内二次元插画师推荐
电脑电源选购指南:六大关键参数详解
研究提出一种高效稳定电解水制氢电催化剂新方法
美机密文件曝光:涡扇-15打破F-119的神话?
中美航发有何差距?涡扇-15的推力、油耗和高速性能均弱于XA100?
项目背景和目标PPT设计指南:从目标设定到风险管理的全方位指导
公摊面积与房子大小的关系及查看方法
哪些人可以申请职业技能补贴政策?
同事之间的小矛盾不断积累,如何防止矛盾升级
银川三日游玩指南(附门票+时间+地点)
上古神话里的三座仙山,每一座都是上古仙人的修仙之地!
脂质组与蛋白质组分析揭示深渊狮子鱼对极端深海环境的适应机制
“你太敏感了、你想太多了”:高敏感的人,如何停止内耗?
敏捷工具:用户故事地图梳理需求全景
系统需求文档管理怎么写
不登记也敢结婚?解析未履行婚姻登记的法律后果及应对之策