Spaces:
Build error
Build error
from sklearn.preprocessing import MinMaxScaler | |
from keras.models import Sequential | |
from keras.layers import Dense, LSTM | |
import numpy as np | |
def __lstm__(stock_df): | |
# fig, ax = plt.subplots(figsize=(20, 10)) | |
# self.stock_df[["Adj Close", "pred_timesfm"]].plot(ax=ax) | |
# st.pyplot(fig) | |
# --------------------------------------- LSTM ----------------------------------- | |
data = stock_df.filter(['Close']) | |
# Convert the dataframe to a numpy array | |
dataset = data.values | |
# Get the number of rows to train the model on | |
training_data_len = int(np.ceil( len(dataset) * .80 )) | |
scaler = MinMaxScaler(feature_range=(0,1)) | |
scaled_data = scaler.fit_transform(dataset) | |
train_data = scaled_data[0:int(training_data_len), :] | |
x_train = [] | |
y_train = [] | |
for i in range(60, len(train_data)): | |
x_train.append(train_data[i - 60 : i, 0]) | |
y_train.append(train_data[i, 0]) | |
# Convert the x_train and y_train to numpy arrays | |
x_train, y_train = np.array(x_train), np.array(y_train) | |
# Reshape the data | |
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1)) | |
# Build the LSTM model | |
model = Sequential() | |
# -> (B, 60, 1) | |
model.add(LSTM(128, return_sequences=True, input_shape= (x_train.shape[1], 1), use_bias = False)) | |
# -> (B, 60, 128) | |
model.add(LSTM(64, return_sequences=False, use_bias = False)) | |
# -> (B, 64) | |
model.add(Dense(25)) | |
# -> (B, 25) | |
model.add(Dense(1)) | |
# -> (B, 1) | |
# Compile the model | |
model.compile(optimizer='adam', loss='mean_squared_error') | |
# Train the model | |
model.fit(x_train, y_train, batch_size=1, epochs=1) | |
# Create the testing data set | |
test_data = scaled_data[: , :] | |
# Create the data sets x_test and y_test | |
x_test = [] | |
y_test = dataset[:, :] | |
for i in range(60, len(test_data)): | |
x_test.append(test_data[i - 60:i, 0]) | |
# Convert the data to a numpy array | |
x_test = np.array(x_test) | |
# Reshape the data | |
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1 )) | |
# Get the models predicted price values | |
preds = model.predict(x_test) | |
preds = scaler.inverse_transform(preds) | |
print (preds.shape) | |
predictions = np.full((60,1), np.nan) | |
predictions = np.concatenate((predictions, preds), axis=0) | |
print(predictions.shape) | |
return predictions | |
# -------------------------------- timefm + LSTM --------------------------------- | |
# st.pyplot(plot_lstm_timefm_prediction(data = stock_df, lstm_prediction = predictions)) |