jonathan-cristovao's picture
Upload 10 files
ef94dec verified
raw
history blame
2.01 kB
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import LSTM, Dense
import warnings
warnings.filterwarnings("ignore")
class Model:
def __init__(self, data):
self.data = data
self.scaler = MinMaxScaler(feature_range=(0, 1))
self.model = None
def prepare_data(self, look_back=1):
scaled_data = self.scaler.fit_transform(self.data['Close'].values.reshape(-1, 1))
def create_dataset(dataset):
X, Y = [], []
for i in range(len(dataset) - look_back):
a = dataset[i:(i + look_back), 0]
X.append(a)
Y.append(dataset[i + look_back, 0])
return np.array(X), np.array(Y)
X, Y = create_dataset(scaled_data)
X = np.reshape(X, (X.shape[0], 1, X.shape[1]))
return X, Y
def train_lstm(self, epochs=5, batch_size=1):
X, Y = self.prepare_data()
self.model = Sequential()
self.model.add(LSTM(50, input_shape=(1, 1)))
self.model.add(Dense(1))
self.model.compile(loss='mean_squared_error', optimizer='adam')
self.model.fit(X, Y, epochs=epochs, batch_size=batch_size, verbose=0)
def make_predictions(self):
X, _ = self.prepare_data()
predictions = self.model.predict(X)
predictions = self.scaler.inverse_transform(predictions)
return predictions
def forecast_future(self, days=5):
last_value = self.data['Close'].values[-1:].reshape(-1, 1)
last_scaled = self.scaler.transform(last_value)
future_predictions = []
for _ in range(days):
prediction = self.model.predict(last_scaled.reshape(1, 1, 1))[0]
future_predictions.append(prediction)
last_scaled = prediction
future_predictions = self.scaler.inverse_transform(future_predictions)
return future_predictions