我读了一篇关于LSTM的文章:
https://machinelearningmastery.com/how-to-develop-lstm-models-for-time-series-forecasting/
第一个基本示例是关于“香草LSTM”:预测下一个时间序列
其中输入为 [10, 20, 30, 40, 50, 60, 70, 80, 90]
在文章中,作者将输入(序列)拆分成矩阵:
X, y10, 20, 30 4020, 30, 40 5030, 40, 50 60...
我不明白为什么需要重塑输入:
从 [样本数, 时间步长] 重塑为 [样本数, 时间步长, 特征数]
1. 为什么需要这样做?
另外,如果我的输入类似于(基本示例 + ID列):
ID X, y1 10, 20, 30 401 20, 30, 40 502 30, 40, 50 602 40, 50, 60, 70...
2. 我们如何重塑它?新的维度会是什么?
回答:
我认为 这个 链接将帮助你理解为什么需要这样做。
你总是需要给LSTM网络提供一个三维数组作为输入。其中第一维代表批量大小,第二维代表你输入序列的时间步长,第三维代表一个输入序列中的单元数量。例如,输入形状看起来像 (批量大小, 时间步长, 序列长度)
让我们以你的示例序列为例:[10, 20, 30, 40, 50, 60, 70, 80, 90]
一旦我们按照文章中提到的进行序列拆分,我们得到一个形状为 (6, 3) 的二维特征向量X。其中6是样本数量,3是步长数量。
但是,考虑到模型只能接受三维向量,我们必须将我们的二维向量重塑为三维向量。
因此从 (6, 3) 变为 (6, 3, 1)。
为了回答你的第二个问题,你可以简单地通过以下方式重塑你的二维特征向量X:
# 假设X是一个numpy数组samples = X.shape[0]steps = X.shape[1]X = X.reshape(samples, steps, 1)