Closed shamsulmasum closed 6 years ago
any help would be great. details of the code are collected from:
This issue has been automatically marked as stale because it has not had recent activity. It will be closed after 30 days if no further activity occurs, but feel free to re-open a closed issue if needed.
`from pandas import DataFrame from pandas import Series from pandas import concat from pandas import read_csv from pandas import datetime from sklearn.metrics import mean_squared_error from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from math import sqrt from matplotlib import pyplot from numpy import array
date-time parsing function for loading the dataset
def parser(x): return datetime.strptime('190'+x, '%Y-%m')
convert time series into supervised learning problem
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True): n_vars = 1 if type(data) is list else data.shape[1] df = DataFrame(data) cols, names = list(), list()
input sequence (t-n, ... t-1)
create a differenced series
def difference(dataset, interval=1): diff = list() for i in range(interval, len(dataset)): value = dataset[i] - dataset[i - interval] diff.append(value) return Series(diff)
transform series into train and test sets for supervised learning
def prepare_data(series, n_test, n_lag, n_seq):
extract raw values
fit an LSTM network to training data
def fit_lstm(train, n_lag, n_seq, n_batch, nb_epoch, n_neurons):
reshape training into [samples, timesteps, features]
make one forecast with an LSTM,
def forecast_lstm(model, X, n_batch):
reshape input pattern to [samples, timesteps, features]
evaluate the persistence model
def make_forecasts(model, n_batch, train, test, n_lag, n_seq): forecasts = list() for i in range(len(test)): X, y = test[i, 0:n_lag], test[i, n_lag:]
make forecast
invert differenced forecast
def inverse_difference(last_ob, forecast):
invert first forecast
inverse data transform on forecasts
def inverse_transform(series, forecasts, scaler, n_test): inverted = list() for i in range(len(forecasts)):
create array from forecast
evaluate the RMSE for each forecast time step
def evaluate_forecasts(test, forecasts, n_lag, n_seq): for i in range(n_seq): actual = [row[i] for row in test] predicted = [forecast[i] for forecast in forecasts] rmse = sqrt(mean_squared_error(actual, predicted)) print('t+%d RMSE: %f' % ((i+1), rmse))
plot the forecasts in the context of the original dataset
def plot_forecasts(series, forecasts, n_test):
plot the entire dataset in blue
load dataset
series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
configure
n_lag = 1 n_seq = 3 n_test = 10 n_epochs = 1500 n_batch = 1 n_neurons = 1
prepare data
scaler, train, test = prepare_data(series, n_test, n_lag, n_seq)
fit model
model = fit_lstm(train, n_lag, n_seq, n_batch, n_epochs, n_neurons)
make forecasts
forecasts = make_forecasts(model, n_batch, train, test, n_lag, n_seq)
inverse transform forecasts and test
forecasts = inverse_transform(series, forecasts, scaler, n_test+2) actual = [row[n_lag:] for row in test] actual = inverse_transform(series, actual, scaler, n_test+2)
evaluate forecasts
evaluate_forecasts(actual, forecasts, n_lag, n_seq)
plot forecasts
plot_forecasts(series, forecasts, n_test+2)`