Python 多变量时间序列的正确LSTM输入形状是什么?
我有一个具有5个特性的多变量时间序列(5个独立的时间序列)。有了这5个特性,我想预测一个目标Python 多变量时间序列的正确LSTM输入形状是什么?,python,keras,lstm,Python,Keras,Lstm,我有一个具有5个特性的多变量时间序列(5个独立的时间序列)。有了这5个特性,我想预测一个目标y,它也是一个时间序列。我在数据中有大约50000次观察 data # pandas dataframe >>> x1 x2 x3 x4 x5 y time 18:20:00 0.462 -0.248 -0.873 0.892 0.012 0.938
y
,它也是一个时间序列。我在数据中有大约50000次观察
data # pandas dataframe
>>>
x1 x2 x3 x4 x5 y
time
18:20:00 0.462 -0.248 -0.873 0.892 0.012 0.938
18:21:00 0.621 -0.399 -0.772 0.891 0.008 0.922
18:22:00 0.726 -0.401 -0.771 0.899 0.009 0.910
... # 50,000 rows
我看到过多个不同的来源、博客和论文,它们在构建LSTM[]时使用的设置和体系结构都略有不同
我知道输入的形状必须是[n\u样本、n\u时间步、n\u特征]
。我相信三个维度中的两个已经从我的数据中得到了回答<代码>n_样本=50000和n_特征=5
,因为我有50k个样本和5个特征。维度n_timesteps
是令人困惑的维度
如果我重塑数据,使输入LSTM的每个“样本”都具有重叠的时间观测值
import numpy as np
def reshape_data(data, n_steps):
out = np.empty((data.shape[0] - n_steps + 1, n_steps, data.shape[1]))
for i in range(data.shape[0] - n_steps + 1):
out[i] = data[i: i + n_steps, :]
return out
n_step = 10
reshaped_data = (data[["x1", "x2", "x3", "x4", "x5"]].values, n_step)
reshaped_data.shape
>>> (49991, 10, 5)
# target variable also needs to be truncated
# to match the shape and time index of `reshaped_data`
target = data["y"].values
target = target[n_step - 1:]
target.shape
>>> (49991,)
数据现在基本上是一个“3d张量”,或矩阵矩阵,其中每个矩阵包含10个时间观测值。矩阵1包含从时间t0
到时间t9
的观察值,然后矩阵2包含从时间t1
到时间t10
的观察值,依此类推,因此我们可以看到每个样本与最后一个样本有9个重叠的观察值。这些矩阵中的每一个都是给LSTM的样本-这些矩阵中有n个样本
(在我们的示例中为49991个)现在[n_样本、n_时间步、n_功能]=(49991、10、5)
我现在可以将上述数据输入LSTM
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(reshaped_data.shape[1], reshaped_data.shape[2])))
model.add(Dropout(0.4))
model.add(LSTM(50, return_sequences=False))
model.add(Dropout(0.4))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
model.fit(reshaped_data, target, epochs=50, batch_size=32, verbose=1, shuffle=False)
或者,我可以只取原始数据,并按如下方式对其进行处理,其中每个样本的观察结果在时间上没有重叠
reshaped_data = data[["x1", "x2", "x3", "x4", "x5"]].values
reshaped_data = reshaped_data.reshape((reshaped_data.shape[0], 1, reshaped_data[1]))
reshaped_data.shape
(50000, 1, 5)
现在我也可以把这些数据交给LSTM。在这种情况下,[n_样本,n_时间步,n_特征]=(50000,1,5)
,因此每个样本在时间上只有一个观察值
这是我的困惑
batch\u size
如何使用上述任一数据重新存储方法进行培训当你说50000个样本时,你是指
time
列中的50000个条目吗?或者您是指50000个序列,每个序列在时间
中具有不同的条目数?@SusmitAgrawal是时间列中的50000个条目/行。在这种情况下,n_timesteps
是50000,因为您只有一个序列n_samples
因此是1。数据的形状将是(1,50000,5)
当您说50000个样本时,您是指时间
列中的50000个条目吗?或者您是指50000个序列,每个序列在时间
中具有不同的条目数?@SusmitAgrawal是时间列中的50000个条目/行。在这种情况下,n_timesteps
是50000,因为您只有一个序列<因此,code>n_samples是1。数据的形状将是(1,50000,5)