Skip to content

Commit 296cbed

Browse files
committed
Adding multiple repeats for LSTM network
1 parent c613e4d commit 296cbed

File tree

1 file changed

+50
-7
lines changed

1 file changed

+50
-7
lines changed

python/shampoo_sales/lstm_neural_network.py

+50-7
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,8 @@ def forecast_lstm(model, batch_size, X):
2828
yhat = model.predict(X, batch_size=batch_size)
2929
return yhat[0,0]
3030

31-
def prepare_model():
31+
def prepare_model(series):
3232
# Convert series into supervised learning problem
33-
series = load_date_series()
3433
X = series.values
3534
supervised = timeseries_to_supervised(X, 1)
3635
print("*** Supervised Learning ***")
@@ -62,14 +61,11 @@ def model(series):
6261
# transform data to be stationary
6362
raw_values = series.values
6463
diff_values = difference(raw_values, 1)
65-
6664
# transform data to be supervised learning
6765
supervised = timeseries_to_supervised(diff_values, 1)
6866
supervised_values = supervised.values
69-
7067
# split data into train and test-sets
7168
train, test = supervised_values[0:-12], supervised_values[-12:]
72-
7369
# transform the scale of the data
7470
scaler, train_scaled, test_scaled = scale(train, test)
7571

@@ -80,7 +76,7 @@ def model(series):
8076
lstm_model.predict(train_reshaped, batch_size=1)
8177

8278
# walk-forward validation on the test data
83-
predictions = list()
79+
predictions = []
8480
for i in range(len(test_scaled)):
8581
# make one-step forecast
8682
X, y = test_scaled[i, 0:-1], test_scaled[i, -1]
@@ -102,5 +98,52 @@ def model(series):
10298
plt.plot(predictions)
10399
plt.show()
104100

101+
def multiple_repeats(series):
102+
# transform data to be stationary
103+
raw_values = series.values
104+
diff_values = difference(raw_values, 1)
105+
# transform data to be supervised learning
106+
supervised = timeseries_to_supervised(diff_values, 1)
107+
supervised_values = supervised.values
108+
# split data into train and test-sets
109+
train, test = supervised_values[0:-12], supervised_values[-12:]
110+
# transform the scale of the data
111+
scaler, train_scaled, test_scaled = scale(train, test)
112+
113+
# repeat experiment
114+
repeats = 30
115+
error_scores = []
116+
for r in range(repeats):
117+
# fit the model
118+
lstm_model = fit_lstm(train_scaled, 1, 3000, 4)
119+
# forecast the entire training dataset to build up state for forecasting
120+
train_reshaped = train_scaled[:, 0].reshape(len(train_scaled), 1, 1)
121+
lstm_model.predict(train_reshaped, batch_size=1)
122+
# walk-forward validation on the test data
123+
predictions = []
124+
for i in range(len(test_scaled)):
125+
# make one-step forecast
126+
X, y = test_scaled[i, 0:-1], test_scaled[i, -1]
127+
yhat = forecast_lstm(lstm_model, 1, X)
128+
# invert scaling
129+
yhat = invert_scale(scaler, X, yhat)
130+
# invert differencing
131+
yhat = inverse_difference(raw_values, yhat, len(test_scaled)+1-i)
132+
# store forecast
133+
predictions.append(yhat)
134+
# report performance
135+
rmse = sqrt(mse(raw_values[-12:], predictions))
136+
print('%d) Test RMSE: %.3f' % (r+1, rmse))
137+
error_scores.append(rmse)
138+
139+
# summarize results
140+
results = pd.DataFrame()
141+
results['rmse'] = error_scores
142+
print(results.describe())
143+
results.boxplot()
144+
plt.show()
145+
105146
series = load_date_series()
106-
model(series)
147+
# prepare_model(series)
148+
# model(series)
149+
multiple_repeats(series)

0 commit comments

Comments
 (0)