1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Thu Aug 1 23:47:37 2019
4
+
5
+ @author: tanma
6
+ """
7
+
8
+ import numpy
9
+ import matplotlib .pyplot as plt
10
+ from pandas import read_csv
11
+ import math
12
+ from keras .models import Sequential
13
+ from keras .layers import Dense
14
+ from keras .layers import LSTM
15
+ from sklearn .preprocessing import MinMaxScaler
16
+ from sklearn .metrics import mean_squared_error
17
+
18
+ def create_dataset (dataset , look_back = 1 ):
19
+ dataX , dataY = [], []
20
+ for i in range (len (dataset )- look_back - 1 ):
21
+ a = dataset [i :(i + look_back ), 0 ]
22
+ dataX .append (a )
23
+ dataY .append (dataset [i + look_back , 0 ])
24
+ return numpy .array (dataX ), numpy .array (dataY )
25
+
26
+ numpy .random .seed (7 )
27
+
28
+ dataframe = read_csv ('airline_passengers.csv' , usecols = [1 ], engine = 'python' )
29
+ dataset = dataframe .values
30
+ dataset = dataset .astype ('float32' )
31
+
32
+ scaler = MinMaxScaler (feature_range = (0 , 1 ))
33
+ dataset = scaler .fit_transform (dataset )
34
+
35
+ train_size = int (len (dataset ) * 0.67 )
36
+ test_size = len (dataset ) - train_size
37
+ train , test = dataset [0 :train_size ,:], dataset [train_size :len (dataset ),:]
38
+
39
+ look_back = 3
40
+ trainX , trainY = create_dataset (train , look_back )
41
+ testX , testY = create_dataset (test , look_back )
42
+
43
+ trainX = numpy .reshape (trainX , (trainX .shape [0 ], trainX .shape [1 ], 1 ))
44
+ testX = numpy .reshape (testX , (testX .shape [0 ], testX .shape [1 ], 1 ))
45
+
46
+ batch_size = 1
47
+ model = Sequential ()
48
+ model .add (LSTM (4 , batch_input_shape = (batch_size , look_back , 1 ), stateful = True , return_sequences = True ))
49
+ model .add (LSTM (4 , batch_input_shape = (batch_size , look_back , 1 ), stateful = True ))
50
+ model .add (Dense (1 ))
51
+ model .compile (loss = 'mean_squared_error' , optimizer = 'adam' )
52
+ for i in range (100 ):
53
+ model .fit (trainX , trainY , epochs = 1 , batch_size = batch_size , verbose = 2 , shuffle = False )
54
+ model .reset_states ()
55
+
56
+ trainPredict = model .predict (trainX , batch_size = batch_size )
57
+ model .reset_states ()
58
+ testPredict = model .predict (testX , batch_size = batch_size )
59
+
60
+ trainPredict = scaler .inverse_transform (trainPredict )
61
+ trainY = scaler .inverse_transform ([trainY ])
62
+ testPredict = scaler .inverse_transform (testPredict )
63
+ testY = scaler .inverse_transform ([testY ])
64
+
65
+ trainScore = math .sqrt (mean_squared_error (trainY [0 ], trainPredict [:,0 ]))
66
+ print ('Train Score: %.2f RMSE' % (trainScore ))
67
+ testScore = math .sqrt (mean_squared_error (testY [0 ], testPredict [:,0 ]))
68
+ print ('Test Score: %.2f RMSE' % (testScore ))
69
+
70
+ trainPredictPlot = numpy .empty_like (dataset )
71
+ trainPredictPlot [:, :] = numpy .nan
72
+ trainPredictPlot [look_back :len (trainPredict )+ look_back , :] = trainPredict
73
+
74
+ testPredictPlot = numpy .empty_like (dataset )
75
+ testPredictPlot [:, :] = numpy .nan
76
+ testPredictPlot [len (trainPredict )+ (look_back * 2 )+ 1 :len (dataset )- 1 , :] = testPredict
77
+
78
+ plt .plot (scaler .inverse_transform (dataset ))
79
+ plt .plot (trainPredictPlot )
80
+ plt .plot (testPredictPlot )
81
+ plt .show ()
0 commit comments