Here you can find python source code for Time Series Prediction with LSTM and Keras
import numpy as np import pandas as pd from sklearn import preprocessing from keras.models import Sequential from keras.layers.core import Dense from keras.layers.recurrent import LSTM from keras.layers import Dropout import matplotlib.pyplot as plt fname="C:\\Users\\stock_data.csv" data_csv = pd.read_csv (fname) #how many data we will use # (should not be more than dataset length ) data_to_use= 100 # number of training data # should be less than data_to_use train_end =70 total_data=len(data_csv) #most recent data is in the end #so need offset start=total_data - data_to_use #currently doing prediction only for 3 steps ahead steps_to_predict = 3 train_mse=[] test_mse=[] forecast=[] for i in range(steps_to_predict): train_mse.append(0) test_mse.append(0) forecast.append(0) yt = data_csv.iloc [start:total_data ,4] #Close price yt1 = data_csv.iloc [start:total_data ,1] #Open yt2 = data_csv.iloc [start:total_data ,2] #High yt3 = data_csv.iloc [start:total_data ,3] #Low vt = data_csv.iloc [start:total_data ,6] # volume for i in range(steps_to_predict): if i==0: units=20 batch_size=1 if i==1: units=15 batch_size=1 if i==2: units=80 batch_size=1 yt_ = yt.shift (-i - 1 ) data = pd.concat ([yt, yt_, vt, yt1, yt2, yt3], axis =1) data. columns = ['yt', 'yt_', 'vt', 'yt1', 'yt2', 'yt3'] data = data.dropna() # target variable - closed price y = data ['yt_'] # closed, volume, open, high, low cols =['yt', 'vt', 'yt1', 'yt2', 'yt3'] x = data [cols] scaler_x = preprocessing.MinMaxScaler ( feature_range =( -1, 1)) x = np. array (x).reshape ((len( x) ,len(cols))) x = scaler_x.fit_transform (x) scaler_y = preprocessing. MinMaxScaler ( feature_range =( -1, 1)) y = np.array (y).reshape ((len( y), 1)) y = scaler_y.fit_transform (y) x_train = x [0: train_end,] x_test = x[ train_end +1:len(x),] y_train = y [0: train_end] y_test = y[ train_end +1:len(y)] if (i == 0) : prediction_data=[] for j in range (len(y_test) - 0 ) : prediction_data.append (0) x_train = x_train.reshape (x_train. shape + (1,)) x_test = x_test.reshape (x_test. shape + (1,)) seed =2018 np.random.seed (seed) ############## ## i=0 ############## if i == 0 : fit0 = Sequential () fit0.add (LSTM ( units , activation = 'tanh', inner_activation = 'hard_sigmoid' , input_shape =(len(cols), 1) )) fit0.add(Dropout(0.2)) fit0.add (Dense (output_dim =1, activation = 'linear')) fit0.compile (loss ="mean_squared_error" , optimizer = "adam") fit0.fit (x_train, y_train, batch_size =batch_size, nb_epoch =25, shuffle = False) train_mse[i] = fit0.evaluate (x_train, y_train, batch_size =batch_size) test_mse[i] = fit0.evaluate (x_test, y_test, batch_size =batch_size) pred = fit0.predict (x_test) pred = scaler_y.inverse_transform (np. array (pred). reshape ((len( pred), 1))) # below is just fo i == 0 for j in range (len(pred) - 0 ) : prediction_data[j] = pred[j] forecast[i]=pred[-1] ############# ## i=1 ############# if i == 1 : fit1 = Sequential () fit1.add (LSTM ( units , activation = 'tanh', inner_activation = 'hard_sigmoid' , input_shape =(len(cols), 1) )) fit1.add(Dropout(0.2)) fit1.add (Dense (output_dim =1, activation = 'linear')) fit1.compile (loss ="mean_squared_error" , optimizer = "adam") fit1.fit (x_train, y_train, batch_size =batch_size, nb_epoch =25, shuffle = False) train_mse[i] = fit1.evaluate (x_train, y_train, batch_size =batch_size) test_mse[i] = fit1.evaluate (x_test, y_test, batch_size =batch_size) pred = fit1.predict (x_test) pred = scaler_y.inverse_transform (np. array (pred). reshape ((len( pred), 1))) forecast[i]=pred[-1] ############# ## i=2 ############# if i==2 : fit2 = Sequential () fit2.add (LSTM ( units , activation = 'tanh', inner_activation = 'hard_sigmoid' , input_shape =(len(cols), 1) )) fit2.add(Dropout(0.2)) fit2.add (Dense (output_dim =1, activation = 'linear')) fit2.compile (loss ="mean_squared_error" , optimizer = "adam") fit2.fit (x_train, y_train, batch_size =batch_size, nb_epoch =25, shuffle = False) train_mse[i] = fit2.evaluate (x_train, y_train, batch_size =batch_size) test_mse[i] = fit2.evaluate (x_test, y_test, batch_size =batch_size) pred = fit2.predict (x_test) pred = scaler_y.inverse_transform (np. array (pred). reshape ((len( pred), 1))) forecast[i]=pred[-1] x_test = scaler_x.inverse_transform (np. array (x_test). reshape ((len( x_test), len(cols)))) prediction_data = np.asarray(prediction_data) prediction_data = prediction_data.ravel() for j in range (len(prediction_data) - 1 ): prediction_data[len(prediction_data) - j - 1 ] = prediction_data[len(prediction_data) - 1 - j - 1] prediction_data = np.append(prediction_data, forecast) x_test_all = yt[len(yt)-len(prediction_data)-1:len(yt)-1] x_test_all = x_test_all.ravel() plt.plot(prediction_data, label="predictions") plt.plot( x_test_all, label="actual") plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), fancybox=True, shadow=True, ncol=2) import matplotlib.ticker as mtick fmt = '$%.0f' tick = mtick.FormatStrFormatter(fmt) ax = plt.axes() ax.yaxis.set_major_formatter(tick) plt.show() print ("prediction data") print ((prediction_data)) print ("x_test_all") print ((x_test_all)) print ("train_mse") print (train_mse) print ("test_mse") print (test_mse)