使用 LSTM 进行时间序列预测
序列准备、无状态与有状态 LSTM、回看窗口,以及多步预测。
使用 LSTM 进行时间序列预测 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
为什么使用 LSTM 处理时间序列
LSTM(长短期记忆)是一种循环神经网络,它利用门控记忆单元记住长序列中的模式。它能够建模 ARIMA 无法处理的非线性依赖关系,因此在数据充足时非常适合处理复杂序列。
序列窗口化
LSTM 从窗口中学习:窗口是用于预测下一个值的固定长度历史步骤切片。例如,窗口长度为 10 时,模型会观察第 1 至第 10 步来预测第 11 步,然后观察第 2 至第 11 步来预测第 12 步,以此类推。
在代码中创建窗口
辅助函数会将一维序列转换为输入与目标值对。
import numpy as np
def make_windows(series, window):
X, y = [], []
for i in range(len(series) - window):
X.append(series[i:i+window])
y.append(series[i+window])
return np.array(X), np.array(y)
X, y = make_windows(values, window=10)缩放数据
神经网络在经过缩放的输入上训练效果更好。使用 MinMaxScaler 将值映射到 [0, 1],并记得稍后对预测结果执行逆变换。
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled = scaler.fit_transform(values.reshape(-1, 1))为 LSTM 重塑数据形状
Keras 的 LSTM 层要求输入形状为 (样本数, 时间步数, 特征数)。对于单变量序列,特征数为 1。
# X is (samples, timesteps); add a feature axis
X = X.reshape((X.shape[0], X.shape[1], 1))
print(X.shape) # (samples, timesteps, 1)构建模型
一种简单的架构是:使用一个 LSTM(50) 层连接到一个预测下一个值的 Dense(1) 输出层。
from tensorflow.keras import Sequential
from tensorflow.keras.layers import LSTM, Dense
model = Sequential([
LSTM(50, input_shape=(X.shape[1], 1)),
Dense(1)
])为什么使用单个输出单元
提前一步进行预测属于只有一个数值输出的回归问题,因此最终层使用不带激活函数的 Dense(1)。如果要进行多步预测,则可以使用 Dense(n_steps)。
编译
请使用 Adam 优化器和均方误差(mse)损失,这是对连续目标执行回归时的标准选择。
model.compile(optimizer="adam", loss="mse")训练
在窗口化数据上训练模型。验证集划分会在多个训练轮次中监控模型的泛化能力。
history = model.fit(
X, y,
epochs=50,
batch_size=32,
validation_split=0.2
)进行预测
在新窗口上进行预测,然后执行逆变换以恢复到原始尺度。
pred_scaled = model.predict(X_test)
pred = scaler.inverse_transform(pred_scaled)堆叠与调优
对于更复杂的序列,可以堆叠多个 LSTM(除最后一层外,其他层都将 return_sequences=True),并加入丢弃层。更多层可以捕获更深层次的模式,但需要更多数据,也会增加过拟合风险。
model = Sequential([
LSTM(50, return_sequences=True, input_shape=(X.shape[1], 1)),
LSTM(50),
Dense(1)
])快速检查
请测试您对 LSTM 预测的掌握程度。
回顾
您准备了窗口,使用 MinMaxScaler 进行了缩放,将数据重塑为(样本数, 时间步数, 特征数),构建了 LSTM(50) + Dense(1),使用 Adam/均方误差进行编译,完成了训练和预测(并通过逆变换恢复原始尺度)。时间序列课程到此结束。下一门课程:推荐系统。
用 AI 导师学习 Python — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 53
- 课程
- 225
常见问题解答
「使用 LSTM 进行时间序列预测」课时是免费的吗?
是的 — 「使用 LSTM 进行时间序列预测」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「使用 LSTM 进行时间序列预测」这节课中我会学到什么?
序列准备、无状态与有状态 LSTM、回看窗口,以及多步预测。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用 LSTM 进行时间序列预测」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 时间序列的组成与平稳性
- ARIMA 与 SARIMA 模型
- 使用 Prophet 自动预测
- 使用 LSTM 进行时间序列预测