Skip to content

Commit

Permalink
feat: upgraged univarhybrid, multivarpure, multivarhybrid with evalua…
Browse files Browse the repository at this point in the history
…te model methods
  • Loading branch information
maxmekiska committed May 12, 2024
1 parent fe5ecb7 commit b4fb4cd
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 14 deletions.
16 changes: 15 additions & 1 deletion imbrium/predictors/multivarhybrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
cnngru, cnnlstm, cnnrnn)
from imbrium.blueprints.abstract_multivariate import MultiVariateMultiStep
from imbrium.utils.optimizer import get_optimizer
from imbrium.utils.transformer import data_prep_multi, multistep_prep_hybrid
from imbrium.utils.transformer import (data_prep_multi, multistep_prep_hybrid,
train_test_split)


class BaseHybridMulti(MultiVariateMultiStep):
Expand Down Expand Up @@ -46,6 +47,8 @@ def _model_intake_prep(
self.input_x, self.input_y, self.modified_back = multistep_prep_hybrid(
temp_data, sub_seq, steps_past, steps_future
)
self.input_x, self.input_x_test = train_test_split(self.input_x)
self.input_y, self.input_y_test = train_test_split(self.input_y)
else:
pass

Expand Down Expand Up @@ -750,6 +753,13 @@ def fit_model(
)
return self.details

def evaluate_model(self):
self.evaluation_details = self.model.evaluate(
x=self.input_x_test, y=self.input_y_test
)

return self.evaluation_details

def model_blueprint(self):
"""Prints a summary of the models layer structure."""
self.model.summary()
Expand All @@ -758,6 +768,10 @@ def show_performance(self):
"""Returns performance details."""
return self.details

def show_evaluation(self):
"""Returns performance details on test data."""
return self.evaluation_details

def predict(
self,
data: array,
Expand Down
23 changes: 22 additions & 1 deletion imbrium/predictors/multivarpure.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
mlp, rnn)
from imbrium.blueprints.abstract_multivariate import MultiVariateMultiStep
from imbrium.utils.optimizer import get_optimizer
from imbrium.utils.transformer import data_prep_multi, multistep_prep_standard
from imbrium.utils.transformer import (data_prep_multi,
multistep_prep_standard,
train_test_split)


class BasePureMulti(MultiVariateMultiStep):
Expand Down Expand Up @@ -42,6 +44,8 @@ def _model_intake_prep(self, steps_past: int, steps_future: int) -> None:
self.input_x, self.input_y = multistep_prep_standard(
temp_data, steps_past, steps_future
)
self.input_x, self.input_x_test = train_test_split(self.input_x)
self.input_y, self.input_y_test = train_test_split(self.input_y)
else:
pass

Expand Down Expand Up @@ -161,6 +165,12 @@ def create_mlp(

self.input_x = self.input_x.reshape((self.input_x.shape[0], self.dimension))

self.dimension_test = self.input_x_test.shape[1] * self.input_x_test.shape[2]

self.input_x_test = self.input_x_test.reshape(
(self.input_x_test.shape[0], self.dimension_test)
)

self.model = mlp(
optimizer=optimizer_obj,
loss=loss,
Expand Down Expand Up @@ -710,6 +720,13 @@ def fit_model(
)
return self.details

def evaluate_model(self):
self.evaluation_details = self.model.evaluate(
x=self.input_x_test, y=self.input_y_test
)

return self.evaluation_details

def model_blueprint(self):
"""Prints a summary of the models layer structure."""
self.model.summary()
Expand All @@ -718,6 +735,10 @@ def show_performance(self):
"""Returns performance details."""
return self.details

def show_evaluation(self):
"""Returns performance details on test data."""
return self.evaluation_details

def predict(self, data: array) -> array:
"""Takes in a sequence of values and outputs a forecast.
Parameters:
Expand Down
16 changes: 15 additions & 1 deletion imbrium/predictors/univarhybrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
cnngru, cnnlstm, cnnrnn)
from imbrium.blueprints.abstract_univariate import UniVariateMultiStep
from imbrium.utils.optimizer import get_optimizer
from imbrium.utils.transformer import data_prep_uni, sequence_prep_hybrid_uni
from imbrium.utils.transformer import (data_prep_uni, sequence_prep_hybrid_uni,
train_test_split)


class BaseHybridUni(UniVariateMultiStep):
Expand Down Expand Up @@ -42,6 +43,8 @@ def _model_intake_prep(
self.input_x, self.input_y, self.modified_back = sequence_prep_hybrid_uni(
temp_data, sub_seq, steps_past, steps_future
)
self.input_x, self.input_x_test = train_test_split(self.input_x)
self.input_y, self.input_y_test = train_test_split(self.input_y)
else:
pass

Expand Down Expand Up @@ -722,6 +725,13 @@ def fit_model(
)
return self.details

def evaluate_model(self):
self.evaluation_details = self.model.evaluate(
x=self.input_x_test, y=self.input_y_test
)

return self.evaluation_details

def model_blueprint(self):
"""Prints a summary of the models layer structure."""
self.model.summary()
Expand All @@ -730,6 +740,10 @@ def show_performance(self):
"""Returns performance details."""
return self.details

def show_evaluation(self):
"""Returns performance details on test data."""
return self.evaluation_details

def predict(
self, data: array, sub_seq: int = None, steps_past=None, steps_future=None
) -> array:
Expand Down
8 changes: 5 additions & 3 deletions imbrium/predictors/univarpure.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
mlp, rnn)
from imbrium.blueprints.abstract_univariate import UniVariateMultiStep
from imbrium.utils.optimizer import get_optimizer
from imbrium.utils.transformer import data_prep_uni, sequence_prep_standard_uni
from imbrium.utils.transformer import (data_prep_uni,
sequence_prep_standard_uni,
train_test_split)


class BasePureUni(UniVariateMultiStep):
Expand Down Expand Up @@ -39,8 +41,8 @@ def _model_intake_prep(self, steps_past: int, steps_future: int) -> None:
self.input_x, self.input_y = sequence_prep_standard_uni(
temp_data, steps_past, steps_future
)
self.input_x, self.input_x_test = self._train_test_split(self.input_x)
self.input_y, self.input_y_test = self._train_test_split(self.input_y)
self.input_x, self.input_x_test = train_test_split(self.input_x)
self.input_y, self.input_y_test = train_test_split(self.input_y)
else:
pass

Expand Down
15 changes: 14 additions & 1 deletion imbrium/utils/transformer.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from numpy import array, dstack, empty, reshape, vstack
from typing import Tuple

from numpy import array, dstack, empty, vstack


def data_prep_uni(data: array) -> array:
Expand Down Expand Up @@ -260,3 +262,14 @@ def multistep_prep_hybrid(
X = dstack(X)
Y = Y[0] # getting array out of list
return X, Y, mod


def train_test_split(data: array, test_size=0.2) -> Tuple[array, array]:
"""Splits the time series data into training and testing sets."""
n_samples = len(data)
n_test = int(test_size * n_samples)

train_data = data[:-n_test]
test_data = data[-n_test:]

return train_data, test_data
6 changes: 3 additions & 3 deletions tests/test_predictors/test_multivarhybrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,8 @@

y = np.array([3.422, 2.697, 2.992, 2.414, 2.267])

shape_x = (490, 1, 40, 1)
shape_y = (490, 5)
shape_x = (392, 1, 40, 1)
shape_y = (392, 5)

model_id = "CNN-LSTM"
optimizer = "adam"
Expand Down Expand Up @@ -533,7 +533,7 @@ def test_create_fit_cnnlstm():
pytest.fail(f"An exception was raised: {e}")


def test_create_cnngru():
def test_create_fit_cnngru():
try:
test1.create_fit_cnngru(sub_seq=1, steps_past=5, steps_future=5, epochs=1)
except Exception as e:
Expand Down
4 changes: 2 additions & 2 deletions tests/test_predictors/test_multivarpure.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,8 @@

y = np.array([3.585, 3.521, 3.413, 3.422, 2.697, 2.992, 2.414, 2.267, 2.611, 2.815])

shape_x = (488, 2, 8)
shape_y = (488, 10)
shape_x = (391, 2, 8)
shape_y = (391, 10)

model_id = "LSTM"
optimizer = "adam"
Expand Down
4 changes: 2 additions & 2 deletions tests/test_predictors/test_univarhybrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@
y = np.array([[2.135], [1.913], [1.592]])


shape_x = (486, 2, 5, 1)
shape_y = (486, 3, 1)
shape_x = (389, 2, 5, 1)
shape_y = (389, 3, 1)

model_id = "CNN-LSTM"
optimizer = "adam"
Expand Down

0 comments on commit b4fb4cd

Please sign in to comment.