python - 如何使用深度学习模型进行时间序列预测?

标签 python deep-learning time-series lstm forecasting

我有机器记录的信号 (m1, m2, so on) 28 天。 (注意:每天的每个信号长度为 360)。

machine_num, day1, day2, ..., day28
m1, [12, 10, 5, 6, ...], [78, 85, 32, 12, ...], ..., [12, 12, 12, 12, ...]
m2, [2, 0, 5, 6, ...], [8, 5, 32, 12, ...], ..., [1, 1, 12, 12, ...]
...
m2000, [1, 1, 5, 6, ...], [79, 86, 3, 1, ...], ..., [1, 1, 12, 12, ...]

我想预测 future 3天每台机器的信号序列。即在 day29 , day30 , day31 .
但是,我没有天数 29 的值, 3031 .所以,我的计划如下使用 LSTM模型。

第一步是获取 day 1 的信号并要求预测 day 2 的信号,然后在下一步中获取 days 1, 2 的信号并要求预测 day 3 的信号等,所以当我到达 day 28,网络拥有多达 28 个的所有信号,并被要求预测 day 29 的信号。 , 等等。

我尝试做一个单变量 LSTM 模型,如下所示。
# univariate lstm example
from numpy import array
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
# define dataset
X = array([[10, 20, 30], [20, 30, 40], [30, 40, 50], [40, 50, 60]])
y = array([40, 50, 60, 70])
# reshape from [samples, timesteps] into [samples, timesteps, features]
X = X.reshape((X.shape[0], X.shape[1], 1))
# define model
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(3, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# fit model
model.fit(X, y, epochs=1000, verbose=0)
# demonstrate prediction
x_input = array([50, 60, 70])
x_input = x_input.reshape((1, 3, 1))
yhat = model.predict(x_input, verbose=0)
print(yhat)

然而,这个例子非常简单,因为它没有像我这样的长序列。例如,我的数据为 m1看起来如下。
m1 = [[12, 10, 5, 6, ...], [78, 85, 32, 12, ...], ..., [12, 12, 12, 12, ...]]

此外,我需要一天的预测29 , 30 , 31 .在这种情况下,我不确定如何更改此示例以满足我的需要。我想特别知道我选择的方向是否正确。如果是这样,该怎么做。

如果需要,我很乐意提供更多详细信息。

编辑:

我已经提到了 model.summary() .

enter image description here

最佳答案

我认为你要往好的方向发展,要增加每天的时间步长,你需要在你的数据中添加一个pad,这个例子可以帮助你:https://github.com/keras-team/keras/blob/master/examples/imdb_lstm.py#L46 .

但是,我也会尝试另一种方法,例如固定时间步数,例如 3 天、4 天、5 天……然后,评估您的火车,您可以选择最适合您的模型的时间步数。

也许你最初增加天数的方法会更好,但在这类问题中,找到 LSTM 中的最佳时间步数非常重要。

关于python - 如何使用深度学习模型进行时间序列预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59978301/

相关文章:

python - zip 密码破解器中的多线程

python - 如何在 Python Cerberus 中将字符串强制转换为日期时间?

python - 使用 @property 与 getter 和 setter

python - 类型错误 : 'numpy.float64' object is not iterable Keras

python - 使用 Python 根据开始值和结束值推断时间序列数据?

python - python 属性中的健全性检查部分起作用

python - 图像分类任务的损失为 NaN

machine-learning - 在 CNN 中组合多个内核大小

java - 递归时间序列分割算法

python - 如何使用时间列创建包含当天部分时间的新列 ['morning' 、 'afternoon' 、 'evening' 、 'night' ]?