Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import pandas as pd | |
| import tensorflow as tf | |
| from tensorflow.keras import layers, models | |
| import matplotlib.pyplot as plt | |
| from sklearn.preprocessing import MinMaxScaler | |
| # Load the dataset | |
| data_url = 'https://raw.githubusercontent.com/selva86/datasets/master/aapl.csv' | |
| df = pd.read_csv(data_url) | |
| df = df[['Date', 'Close']] | |
| df['Date'] = pd.to_datetime(df['Date']) | |
| df.set_index('Date', inplace=True) | |
| # Normalize the data | |
| scaler = MinMaxScaler(feature_range=(0, 1)) | |
| scaled_data = scaler.fit_transform(df) | |
| # Create sequences | |
| def create_sequences(data, seq_length): | |
| xs = [] | |
| ys = [] | |
| for i in range(len(data) - seq_length): | |
| x = data[i:i + seq_length] | |
| y = data[i + seq_length] | |
| xs.append(x) | |
| ys.append(y) | |
| return np.array(xs), np.array(ys) | |
| seq_length = 60 | |
| X, y = create_sequences(scaled_data, seq_length) | |
| # Split the data into training and testing sets | |
| split = int(0.8 * len(X)) | |
| X_train, X_test = X[:split], X[split:] | |
| y_train, y_test = y[:split], y[split:] | |
| # Reshape data for the model | |
| X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1)) | |
| X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1)) | |
| # Build the RNN model | |
| model = models.Sequential() | |
| model.add(layers.LSTM(50, return_sequences=True, input_shape=(seq_length, 1))) | |
| model.add(layers.LSTM(50, return_sequences=False)) | |
| model.add(layers.Dense(25)) | |
| model.add(layers.Dense(1)) | |
| model.summary() | |
| # Compile the model | |
| model.compile(optimizer='adam', loss='mean_squared_error') | |
| # Train the model | |
| history = model.fit(X_train, y_train, batch_size=32, epochs=20, validation_split=0.1) | |
| # Make predictions | |
| train_predict = model.predict(X_train) | |
| test_predict = model.predict(X_test) | |
| # Inverse transform the predictions | |
| train_predict = scaler.inverse_transform(train_predict) | |
| y_train = scaler.inverse_transform(y_train.reshape(-1, 1)) | |
| test_predict = scaler.inverse_transform(test_predict) | |
| y_test = scaler.inverse_transform(y_test.reshape(-1, 1)) | |
| # Plot the results | |
| plt.figure(figsize=(14, 5)) | |
| plt.plot(df.index, df['Close'], label='True Price') | |
| plt.plot(df.index[seq_length:seq_length + len(train_predict)], train_predict, label='Train Predict') | |
| plt.plot(df.index[seq_length + len(train_predict):], test_predict, label='Test Predict') | |
| plt.xlabel('Date') | |
| plt.ylabel('Close Price') | |
| plt.legend() | |
| plt.show() | |