【发布时间】:2020-01-30 02:30:22
【问题描述】:
我从机器 (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, ...]
我想预测每台机器未来 3 天的信号序列。即在day29、day30、day31。
但是,我没有 29、30 和 31 天的值。所以,我的计划如下使用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()。
【问题讨论】:
-
也许这个答案有它? stackoverflow.com/questions/46901371/… --- 稍后我可能会为您的问题写一个具体的答案,随着时间的推移。
-
发表评论,因为我现在无法保存此链接,并且对该主题非常感兴趣。
-
感谢您的提醒。为了确保我正确理解维度,我们有 2000 台机器每天记录 360 个值的数组。所以所有数组都是相同的维度,我们可以说矩阵是 2000*28*360 对吗?
-
@CeliusStingher 非常感谢您的评论。是的,你是对的。我有 28 天的 2000 台机器的数据。对于每一天,我都有一个 360 的数组。因此矩阵是 2000*28*360。如果您需要更多详细信息,请告诉我。期待您的建议。谢谢你:)
-
测试前的最后一个问题,360 观察和每天的关系是什么。我们可以说每个观察都独立于另一个(每天)吗?那么第 1 天的观察 1 和第 2 天的观察 1 呢?我们能找到这些值之间的关系吗?有点像 MANOVA... TL;DR:值之间是否有任何关系需要考虑?
标签: python deep-learning time-series lstm forecasting