2021-12-21 10:30:09 +01:00
|
|
|
|
|
|
|
|
from typing import Literal, Optional
|
|
|
|
|
from sklearn.base import clone
|
2021-12-21 15:57:08 +01:00
|
|
|
from abc import ABC, abstractmethod, abstractproperty
|
2021-12-21 10:30:09 +01:00
|
|
|
|
2021-12-21 15:57:08 +01:00
|
|
|
class Model(ABC):
|
2021-12-21 10:30:09 +01:00
|
|
|
|
|
|
|
|
data_scaling: Literal["scaled", "unscaled"]
|
2021-12-27 21:59:22 +01:00
|
|
|
feature_selection: Literal["on", "off"]
|
2021-12-21 10:30:09 +01:00
|
|
|
# data_format: Literal["wide", "narrow"]
|
|
|
|
|
only_column: Optional[str]
|
2021-12-27 21:59:22 +01:00
|
|
|
model_type: Literal['ml', 'static']
|
2021-12-21 10:30:09 +01:00
|
|
|
|
2021-12-21 15:57:08 +01:00
|
|
|
@abstractmethod
|
2021-12-23 10:35:20 +01:00
|
|
|
def fit(self, X, y, prev_model):
|
2021-12-21 10:30:09 +01:00
|
|
|
pass
|
|
|
|
|
|
2021-12-21 15:57:08 +01:00
|
|
|
@abstractmethod
|
2021-12-21 10:30:09 +01:00
|
|
|
def predict(self, X):
|
|
|
|
|
pass
|
|
|
|
|
|
2021-12-21 15:57:08 +01:00
|
|
|
@abstractmethod
|
2021-12-21 10:30:09 +01:00
|
|
|
def clone(self):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SKLearnModel(Model):
|
|
|
|
|
|
|
|
|
|
data_scaling = 'scaled'
|
|
|
|
|
only_column = None
|
2021-12-27 21:59:22 +01:00
|
|
|
feature_selection = 'on'
|
|
|
|
|
model_type = 'ml'
|
2021-12-21 10:30:09 +01:00
|
|
|
|
|
|
|
|
def __init__(self, model):
|
|
|
|
|
self.model = model
|
|
|
|
|
|
2021-12-23 10:35:20 +01:00
|
|
|
def fit(self, X, y, prev_model):
|
2021-12-21 10:30:09 +01:00
|
|
|
self.model.fit(X, y)
|
|
|
|
|
|
|
|
|
|
def predict(self, X):
|
|
|
|
|
return self.model.predict(X)
|
|
|
|
|
|
|
|
|
|
def clone(self):
|
|
|
|
|
return SKLearnModel(clone(self.model))
|