Python Source Code for Machine Learning Stock Prediction with LSTM and Keras – Python Source Code with LSTM and Keras Below is the code for machine learning stock prediction with LSTM neural network.
# -*- coding: utf-8 -*- import numpy as np import pandas as pd from sklearn import preprocessing 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 1 step ahead steps_to_predict =1 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 print ("yt head :") print (yt.head()) yt_ = yt.shift (-1) data = pd.concat ([yt, yt_, vt, yt1, yt2, yt3], axis =1) data. columns = ['yt', 'yt_', 'vt', 'yt1', 'yt2', 'yt3'] data = data.dropna() print (data) # target variable - closed price # after shifting 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)] x_train = x_train.reshape (x_train. shape + (1,)) x_test = x_test.reshape (x_test. shape + (1,)) from keras.models import Sequential from keras.layers.core import Dense from keras.layers.recurrent import LSTM from keras.layers import Dropout seed =2016 np.random.seed (seed) fit1 = Sequential () fit1.add (LSTM ( 1000 , 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 =16, nb_epoch =25, shuffle = False) print (fit1.summary()) score_train = fit1.evaluate (x_train, y_train, batch_size =1) score_test = fit1.evaluate (x_test, y_test, batch_size =1) print (" in train MSE = ", round( score_train ,4)) print (" in test MSE = ", score_test ) pred1 = fit1.predict (x_test) pred1 = scaler_y.inverse_transform (np. array (pred1). reshape ((len( pred1), 1))) prediction_data = pred1[-1] fit1.summary() print ("Inputs: {}".format(fit1.input_shape)) print ("Outputs: {}".format(fit1.output_shape)) print ("Actual input: {}".format(x_test.shape)) print ("Actual output: {}".format(y_test.shape)) print ("prediction data:") print (prediction_data) print ("actual data") x_test = scaler_x.inverse_transform (np. array (x_test). reshape ((len( x_test), len(cols)))) print (x_test) plt.plot(pred1, label="predictions") y_test = scaler_y.inverse_transform (np. array (y_test). reshape ((len( y_test), 1))) plt.plot( [row[0] for row in y_test], 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()
References
1. Machine Learning Stock Prediction with LSTM and Keras – Python Source Code with LSTM and Keras