Module minder_utils.models.utils.util
Expand source code
import torch
import numpy as np
from sklearn.base import clone as sklearn_reset
import inspect
from sklearn.preprocessing import StandardScaler
def get_device():
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print("Running on:", device)
return device
def train_test_scale(X_train, X_test):
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
return X_train, X_test
class SklearnModelWrapper:
'''
This function allows you to wrap an sklearn model with the
method ```.reset()``` which resets the model and its
learned parameters, but keeps the set initialised parameters.
It also attempts to resolve the issue in which the y input
to the model is 2d, but the model itself only accepts 1d
arrays in y.
Arguments
---------
- model: sklearn class:
This is an initialised sklearn class.
'''
def __init__(self, model, model_type = 'nn'):
self.model = model
self.model_type = model_type
def __getattr__(self, name):
attr = getattr(self.model, name)
if callable(attr):
def wrapper(*args, **kwargs):
try:
out = attr(*args, **kwargs)
except ValueError as e:
if 'y should be a 1d array' in str(e):
new_args = []
y_pos = list(inspect.signature(attr).parameters.keys()).index('y')
if len(list(args)) > y_pos:
new_y = np.argmax(args[y_pos], axis = 1)
new_args = [(args[na] if na != y_pos else new_y) for na in range(len(args))]
else:
kwargs['y'] = np.argmax(kwargs['y'], axis = 1)
new_args = args
out = attr(*new_args, **kwargs)
else:
raise e
return out
return wrapper
else:
return attr
def reset(self, *args, **kwargs):
self.model = sklearn_reset(self.model)
Functions
def get_device()
-
Expand source code
def get_device(): device = 'cuda' if torch.cuda.is_available() else 'cpu' print("Running on:", device) return device
def train_test_scale(X_train, X_test)
-
Expand source code
def train_test_scale(X_train, X_test): scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) return X_train, X_test
Classes
class SklearnModelWrapper (model, model_type='nn')
-
This function allows you to wrap an sklearn model with the method
.reset()
which resets the model and its learned parameters, but keeps the set initialised parameters. It also attempts to resolve the issue in which the y input to the model is 2d, but the model itself only accepts 1d arrays in y.Arguments
- model: sklearn class: This is an initialised sklearn class.
Expand source code
class SklearnModelWrapper: ''' This function allows you to wrap an sklearn model with the method ```.reset()``` which resets the model and its learned parameters, but keeps the set initialised parameters. It also attempts to resolve the issue in which the y input to the model is 2d, but the model itself only accepts 1d arrays in y. Arguments --------- - model: sklearn class: This is an initialised sklearn class. ''' def __init__(self, model, model_type = 'nn'): self.model = model self.model_type = model_type def __getattr__(self, name): attr = getattr(self.model, name) if callable(attr): def wrapper(*args, **kwargs): try: out = attr(*args, **kwargs) except ValueError as e: if 'y should be a 1d array' in str(e): new_args = [] y_pos = list(inspect.signature(attr).parameters.keys()).index('y') if len(list(args)) > y_pos: new_y = np.argmax(args[y_pos], axis = 1) new_args = [(args[na] if na != y_pos else new_y) for na in range(len(args))] else: kwargs['y'] = np.argmax(kwargs['y'], axis = 1) new_args = args out = attr(*new_args, **kwargs) else: raise e return out return wrapper else: return attr def reset(self, *args, **kwargs): self.model = sklearn_reset(self.model)
Methods
def reset(self, *args, **kwargs)
-
Expand source code
def reset(self, *args, **kwargs): self.model = sklearn_reset(self.model)