这可以正确预测喀拉拉邦的下一个价值吗?

时间:2019-05-30 16:03:38

标签: python keras lstm

这是我的代码

...
look_back = 20
train_size = int(len(data) * 0.80)
test_size = len(data) - train_size

train = data[0:train_size]
test = data[train_size:len(data)]
x_train, y_train = create_dataset(train, look_back)
x_test, y_test = create_dataset(test, look_back)

x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
y_train=np.repeat(y_train.reshape(-1,1), 20, axis=1).reshape(-1,20,1)
y_test=np.repeat(y_test.reshape(-1,1), 20, axis=1).reshape(-1,20,1)
...
model = Sequential()

model.add(LSTM(512,  return_sequences=True))
model.add(Dropout(0.3))

model.add(LSTM(512,  return_sequences=True))
model.add(Dropout(0.3))

model.add(LSTM(1, return_sequences=True))

model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics=['accuracy'])
model.summary()
model.fit(x_train, y_train, epochs=10, batch_size=64)
p = model.predict(x_test)

,我想预测下一个值 predictions = model.predict(x_train),形状为(62796, 20, 1)

然后我对以下网站进行了编码:how to use the Keras model to forecast for future dates or events?

future = []
currentStep = predictions[-20:, :, :] # -20 is last look_back number

for i in range(10):
    currentStep = model.predict(currentStep)
    future.append(currentStep)

在此代码中,将来的结果是

1

但是p = model.predict(x_test)的[:4000]结果是

2

两个结果之间的差异非常大。

这是预测下一个值的正确方法吗?

我不知道哪里出错或代码出错。

希望您能提出意见。

完整来源为https://gist.github.com/Lay4U/654f70bd1fb9c4f7d5bdb21ddcb588ab

2 个答案:

答案 0 :(得分:0)

您可以尝试多种方法。目前没有正确的方法。您可以训练一个单独的模型来预测t + 1,t + 2 ... t + n。一个LSTM模型预测t + 1,而另一个则预测t + n。这就是所谓的DIRMO策略。

您的策略(递归策略)特别危险,因为该模型可以在多个时间范围内传播错误。

您可以在本文中找到替代策略的良好比较。 https://www.sciencedirect.com/science/article/pii/S0957417412000528?via%3Dihub

答案 1 :(得分:0)

根据您的代码,您尝试使用lstm预测下一个值。 因此,在这里您必须正确地重塑输入数据以反映时间步长和功能。

model.add(LSTM(512,  return_sequences=True))

您不必编写此代码:

model.add(LSTM(512, input_shape=(look_back,x)))
  

x =训练数据中的输入要素。

我想本文将有助于简化您的代码并预测未来的价值:

enter link description here

本文将帮助您更多地了解如何预测未来价值:

enter link description here

谢谢