@@ -28,9 +28,8 @@ def forecast_lstm(model, batch_size, X):
28
28
yhat = model .predict (X , batch_size = batch_size )
29
29
return yhat [0 ,0 ]
30
30
31
- def prepare_model ():
31
+ def prepare_model (series ):
32
32
# Convert series into supervised learning problem
33
- series = load_date_series ()
34
33
X = series .values
35
34
supervised = timeseries_to_supervised (X , 1 )
36
35
print ("*** Supervised Learning ***" )
@@ -62,14 +61,11 @@ def model(series):
62
61
# transform data to be stationary
63
62
raw_values = series .values
64
63
diff_values = difference (raw_values , 1 )
65
-
66
64
# transform data to be supervised learning
67
65
supervised = timeseries_to_supervised (diff_values , 1 )
68
66
supervised_values = supervised .values
69
-
70
67
# split data into train and test-sets
71
68
train , test = supervised_values [0 :- 12 ], supervised_values [- 12 :]
72
-
73
69
# transform the scale of the data
74
70
scaler , train_scaled , test_scaled = scale (train , test )
75
71
@@ -80,7 +76,7 @@ def model(series):
80
76
lstm_model .predict (train_reshaped , batch_size = 1 )
81
77
82
78
# walk-forward validation on the test data
83
- predictions = list ()
79
+ predictions = []
84
80
for i in range (len (test_scaled )):
85
81
# make one-step forecast
86
82
X , y = test_scaled [i , 0 :- 1 ], test_scaled [i , - 1 ]
@@ -102,5 +98,52 @@ def model(series):
102
98
plt .plot (predictions )
103
99
plt .show ()
104
100
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
+
105
146
series = load_date_series ()
106
- model (series )
147
+ # prepare_model(series)
148
+ # model(series)
149
+ multiple_repeats (series )
0 commit comments