Predicting Stock Prices using LSTM Neural Networks with TensorFlow

Python

In this example, we're using an LSTM neural network in TensorFlow to predict stock prices based on historical data.

 1|  import numpy as np
 2|  import pandas as pd
 3|  import tensorflow as tf
 4|  from tensorflow.keras.models import Sequential
 5|  from tensorflow.keras.layers import LSTM, Dense
 6|  from sklearn.metrics import mean_squared_error
 7|  
 8|  # Load and preprocess data
 9|  data = pd.read_csv('stock_data.csv')
10|  data = data.dropna()
11|  close_prices = data['Close'].values.reshape(-1, 1)
12|  
13|  # Scale the data
14|  from sklearn.preprocessing import MinMaxScaler
15|  scaler = MinMaxScaler()
16|  scaled_prices = scaler.fit_transform(close_prices)
17|  
18|  # Split the data into training and testing sets
19|  train_size = int(len(scaled_prices) * 0.8)
20|  test_size = len(scaled_prices) - train_size
21|  train_prices, test_prices = scaled_prices[0:train_size,:], scaled_prices[train_size:len(scaled_prices),:]
22|  
23|  # Define the function to create the dataset for training the LSTM model
24|  def create_dataset(dataset, time_steps=1):
25|      dataX, dataY = [], []
26|      for i in range(len(dataset)-time_steps-1):
27|          a = dataset[i:(i+time_steps), 0]
28|          dataX.append(a)
29|          dataY.append(dataset[i + time_steps, 0])
30|      return np.array(dataX), np.array(dataY)
31|  
32|  # Set the number of time steps and create the training and testing datasets
33|  time_steps = 30
34|  X_train, y_train = create_dataset(train_prices, time_steps)
35|  X_test, y_test = create_dataset(test_prices, time_steps)
36|  
37|  # Reshape the input data for the LSTM model
38|  X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
39|  X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
40|  
41|  # Define the LSTM model architecture
42|  model = Sequential()
43|  model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
44|  model.add(LSTM(units=50))
45|  model.add(Dense(units=1))
46|  
47|  # Compile the model
48|  model.compile(optimizer='adam', loss='mean_squared_error')
49|  
50|  # Train the model
51|  model.fit(X_train, y_train, epochs=100, batch_size=32)
52|  
53|  # Make predictions on the testing set
54|  predictions = model.predict(X_test)
55|  
56|  # Scale the predictions back to their original values
57|  predictions = scaler.inverse_transform(predictions)
58|  
59|  # Evaluate the performance of the model
60|  rmse = np.sqrt(mean_squared_error(y_test, predictions))
61|  print(f'Root Mean Squared Error: {rmse}')
Did you find this snippet useful?

Sign up for free to to add this to your code library