-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathStock-LSTM.py
88 lines (67 loc) · 2.66 KB
/
Stock-LSTM.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# Introduction
# LSTMs are very powerful in sequence prediction problems because they’re able to store past information.
# This is important in our case because the previous price of a stock is crucial in predicting its future price.
# Amin Zayeromali ===> Linkedin Profile : https://ir.linkedin.com/in/aminzayeromali
# Import Python libs
from keras.layers import Dropout
from keras.layers import LSTM
from keras.layers import Dense
from keras.models import Sequential
from sklearn.preprocessing import MinMaxScaler
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Load Dataset from CSV Files ( Stock Price - Shapna )
dataset_train = pd.read_csv('../shapna.csv')
training_set = dataset_train.iloc[:, 1:2].values
# Show Dataset Head
dataset_train.head()
# Feature Scaling
sc = MinMaxScaler(feature_range=(0, 1))
training_set_scaled = sc.fit_transform(training_set)
# Creating Data with Timesteps
X_train = []
y_train = []
for i in range(60, 2400):
X_train.append(training_set_scaled[i-60:i, 0])
y_train.append(training_set_scaled[i, 0])
X_train, y_train = np.array(X_train), np.array(y_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
# Building the LSTM
regressor = Sequential()
regressor.add(LSTM(units=50, return_sequences=True,
input_shape=(X_train.shape[1], 1)))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units=50))
regressor.add(Dropout(0.2))
regressor.add(Dense(units=1))
regressor.compile(optimizer='adam', loss='mean_squared_error')
regressor.fit(X_train, y_train, epochs=100, batch_size=32)
# Predicting Future Stock using the Test Set
dataset_test = pd.read_csv('../shapna.csv')
real_stock_price = dataset_test.iloc[:, 1:2].values
dataset_total = pd.concat(
(dataset_train['open'], dataset_test['open']), axis=0)
inputs = dataset_total[len(dataset_total) - len(dataset_test) - 60:].values
inputs = inputs.reshape(-1, 1)
inputs = sc.transform(inputs)
X_test = []
for i in range(60, 2450):
X_test.append(inputs[i-60:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = sc.inverse_transform(predicted_stock_price)
# Plotting the Results
plt.plot(real_stock_price, color='black', label='Shapna Stock Price')
plt.plot(predicted_stock_price, color='green',
label='Predicted Shapna Stock Price')
plt.title('Shapna Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Shapna Stock Price')
plt.legend()
plt.show()