enter image description hereI have 549 data points (it is daily data) & I want to forecast for the next 60 days. I kind of get a descent forecast for my test data set however I am struggling to forecast ahead of time.

import numpy
import matplotlib.pyplot as plt
import pandas
import math
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error


scaler = MinMaxScaler(feature_range=(-1, 1))
dataset = scaler.fit_transform(daily_data)

train, test = dataset[:365], dataset[365:len(dataset),:]
print(len(train), len(test))


# convert an array of values into a dataset matrix
def create_dataset(dataset, look_back=1):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
    a = dataset[i:(i+look_back), 0]
    dataX.append(a)
    dataY.append(dataset[i + look_back, 0])
return numpy.array(dataX), numpy.array(dataY)


from keras.layers import Dropout

# reshape into X=t and Y=t+1
look_back = 1
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)


# reshape input to be [samples, time steps, features]
trainX = numpy.reshape(trainX, (trainX.shape[0],1,trainX.shape[1]))
testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))


# create and fit the LSTM network
model = Sequential()
model.add(LSTM(50, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=150, batch_size=1, verbose=2)


# make predictions
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
# invert predictions
 trainPredict = scaler.inverse_transform(trainPredict)
 trainY = scaler.inverse_transform([trainY])
 testPredict = scaler.inverse_transform(testPredict)
 testY = scaler.inverse_transform([testY])
 # calculate root mean squared error
  trainScore=
 math.sqrt(mean_squared_error(trainY[0],trainPredict[:,0]))
 print('Train Score: %.2f RMSE' % (trainScore))
 testScore = math.sqrt(mean_squared_error(testY[0],     

 testPredict[:,0]))
 print('Test Score: %.2f RMSE' % (testScore))



 from pylab import rcParams
 rcParams['figure.figsize'] = 18, 5


 # shift train predictions for plotting
 trainPredictPlot = numpy.empty_like(dataset)
 trainPredictPlot[:, :] = numpy.nan
 trainPredictPlot[look_back:len(trainPredict)+look_back, :] =  

 trainPredict
 # shift test predictions for plotting
 testPredictPlot = numpy.empty_like(dataset)
 testPredictPlot[:, :] = numpy.nan
 testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1,  

 :] = testPredict
 # plot baseline and predictions
 plt.plot(scaler.inverse_transform(dataset))

 plt.plot(trainPredictPlot)
 plt.plot(testPredictPlot)
 plt.show()

I want to be able to make 60 time steps ahead forecasts. New to LSTM & have referred the following article:

https://machinelearningmastery.com/how-to-develop-lstm-models-for-multi-step-time-series-forecasting-of-household-power-consumption/

Can some one please help?

0 Answers