我可以一次预测Keras时间序列的未来6个月

时间:2018-11-11 19:02:54

标签: python machine-learning keras lstm

我使用keras进行时间序列预测。我的代码可以通过预测下一个月来预测下一个6个月,然后再次将其输入以进行下个月的预测,直到完成6个月为止。这意味着一个月预测6次。我可以一次预测下一个6个月吗?

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from keras.layers import LSTM
from pandas.tseries.offsets import MonthEnd
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, Dropout
import keras.backend as K
from keras.layers import Bidirectional
from keras.layers import Embedding
from keras.layers import GRU

df = pd.read_csv('D://data.csv',
             engine='python')

df['DATE_'] = pd.to_datetime(df['DATE_']) + MonthEnd(1)
df = df.set_index('DATE_')
df.head()

split_date = pd.Timestamp('03-01-2015')

train = df.loc[:split_date, ['data']]
test = df.loc[split_date:, ['data']]
sc = MinMaxScaler()

train_sc = sc.fit_transform(train)
test_sc = sc.transform(test)

X_train = train_sc[:-1]
y_train = train_sc[1:]

X_test = test_sc[:-1]
y_test = test_sc[1:]

K.clear_session()
model = Sequential()
model.add(Dense(12, input_dim=1, activation='relu'))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.summary()

model.fit(X_train, y_train, epochs=200, batch_size=2)

y_pred = model.predict(X_test)

real_pred = sc.inverse_transform(y_pred)
real_test = sc.inverse_transform(y_test)

print("Predict Value")
print(real_pred)

print("Test Value")
print(real_test)

1 个答案:

答案 0 :(得分:0)

是的,通过将输出层(最后一层)从Dense(1)更改为Dense(6)。当然,您还必须将y_train和y_test更改为形状(1,6)而不是(1,1)。

好运。