python - 不同时间步长的数据形状和 LSTM 输入
问题描述
对于我的硕士论文,我想使用 LSTM 模型预测未来一小时的股票价格。我的 X 数据包含 30.000 行,有 6 个维度(= 6 个特征),我的 Y 数据包含 30.000 行,只有 1 个维度(=目标变量)。对于我的第一个 LSTM 模型,我将 X 数据重新整形为 (30.000x1x6),将 Y 数据重新整形为 (30.000x1),并确定输入如下: input_nn = Input(shape=(1, 6))
如果我想增加时间步长,我不确定如何重塑数据并确定模型的输入形状。我仍然想预测下一小时的股价,但要包括更多以前的时间步长。我是否必须在第二维的 X 数据中添加以前时间步长的数据?
你能解释一下 LSTM 的单位数到底指的是什么吗?在我的情况下,它应该与时间步数相同吗?
解决方案
您走在正确的轨道上,但将单位数与时间步长混淆了。是控制 LSTM 输出维度的units
超参数。它是 LSTM 输出向量的维度,所以如果输入是(1,6)
32 个单位,你将得到(32,)
,因为 LSTM 将遍历单个时间步并生成大小为 32 的向量。
时间步长是指您可以在 LSTM 中考虑的历史大小。所以它与单位完全不同。Keras 没有自己处理数据,而是有一个方便的TimeseriesGenerator,它将像您一样获取 2D 数据,并使用某个时间步长大小的滑动窗口来生成时间序列数据。从文档中:
from keras.preprocessing.sequence import TimeseriesGenerator
import numpy as np
data = np.array([[i] for i in range(50)])
targets = np.array([[i] for i in range(50)])
data_gen = TimeseriesGenerator(data, targets,
length=10, sampling_rate=2,
batch_size=2)
assert len(data_gen) == 20
batch_0 = data_gen[0]
x, y = batch_0
assert np.array_equal(x,
np.array([[[0], [2], [4], [6], [8]],
[[1], [3], [5], [7], [9]]]))
assert np.array_equal(y,
np.array([[10], [11]]))
您可以使用目录来model.fit_generator(data_gen,...)
选择尝试不同的采样率、时间步长等。您可能应该研究这些参数以及它们如何影响论文中的结果。
推荐阅读
- javascript - Pusher 将控制台和应用程序仪表板中的日志加倍
- r - GoogleAnalyticsR api - FilterExpression
- django - 如何通过将令牌传递给电子邮件来验证帐户,用户将输入它
- javascript - React 组件中的 onChange 事件验证错误
- sql-server - SQL 日期格式 - 产生不同的结果
- python - 用 argparser 解析的类初始化对象
- sql - 将 CASE 语句与 ROLL UP 函数一起使用
- android - FirebaseUI 3.0.0:在新版本的“FirebaseRecyclerAdapter”中覆盖“onDataChange”方法
- android - RecyclerView 不显示从本地主机发送的 JSON 只是空白屏幕
- git - 如何在 CODEOWNERS github 文件中包含 & 符号