layer_size = [(8, ), (10, ), (50, ), (10, 4), (8, 3)] solvers = ['adam', 'lbfgs'] learning_rate = ['constant', 'invscaling', 'adaptive'] learning_rate_init = [0.001, 0.005, 0.01, 0.05] act = ['relu', 'logistic', 'tanh'] # Get all possible configs configs = [] for l in layer_size: for s in solvers: for lr in learning_rate: for lri in learning_rate_init: for a in act: configs.append({ 'params': { 'hidden_layer_sizes': l, 'solver': s, 'learning_rate': lr, 'learning_rate_init': lri, 'activation': a }, 'x_train': x_train, 'y_train': y_train, 'x_test': x_test, 'y_test': y_test }) return configs ModelFactory.register_model('mlp', MLPModel)
def predict(self, x, **kwargs): pred = self.model.predict(x) return pred @with_xy def get_grid_search_configs(self, **kwargs): kernels = ['rbf'] cs = np.arange(0.5, 5.0, 0.5) gammas = ['auto', 0.001, 0.005, 0.01, 0.05] # Get all possible configs configs = [] for k in kernels: for c in cs: for g in gammas: configs.append({ 'params': { 'kernel': k, 'C': c, 'gamma': g, }, 'x_train': kwargs.get('x_train'), 'y_train': kwargs.get('y_train'), 'x_test': kwargs.get('x_test'), 'y_test': kwargs.get('y_test') }) return configs ModelFactory.register_model('svc', SVCModel)
# Maximum number of iterations of the k-means algorithm for a single run max_iter = [150, 300, 600] # Relative tolerance with regards to inertia to declare convergence tolerance = [0.0001, 0.0005, 0.0010] # Get all possible configs configs = [] for c in n_clusters: for n in n_init: for i in max_iter: for t in tolerance: configs.append({ 'params': { 'n_clusters': c, 'init': 'k-means++', # k-means++, random or ndarray 'n_init': n, 'max_iter': i, 'tol': t, 'n_jobs': None, }, 'x_train': kwargs.get('x_train'), 'y_train': kwargs.get('y_train'), 'x_test': kwargs.get('x_test'), 'y_test': kwargs.get('y_test') }) return configs ModelFactory.register_model('kmeans', KMeansModel)
@with_xy def get_grid_search_configs(self, **kwargs): weights = ['uniform', 'distance'] n_neighbors = [2, 3, 5, 9] leaf_size = [10] P = [2] # Get all possible configs configs = [] for w in weights: for n in n_neighbors: for l in leaf_size: for p in P: configs.append({ 'params': { 'n_neighbors': n, 'weights': w, 'leaf_size': l, 'p': p, 'n_jobs': None }, 'x_train': kwargs.get('x_train'), 'y_train': kwargs.get('y_train'), 'x_test': kwargs.get('x_test'), 'y_test': kwargs.get('y_test') }) return configs ModelFactory.register_model('knn', KNNModel)
self.params.get('alpha'), self.params.get('beta'))) return @with_x def get_grid_search_configs(self, **kwargs): x_train = kwargs.get('x_train') x_test = kwargs.get('x_test') seasonal_periods = range(1, 14) alpha = np.arange(0.5, 3, 0.5) beta = np.arange(0.0, 3.0, 0.5) # Get all possible configs configs = [] for p in seasonal_periods: for a in alpha: for b in beta: configs.append({ 'params': { 'seasonal_periods': p, 'alpha': a, 'beta': b, }, 'x_train': x_train, 'x_test': x_test }) return configs ModelFactory.register_model('expsmooth', ExpSmoothModel)
return to_discrete_double(forecast, -0.01, 0.01) except (ValueError, np.linalg.linalg.LinAlgError): logger.error('{}: convergence error'.format(str(self.model.get_params()))) @with_x def get_grid_search_configs(self, **kwargs): x_train = kwargs.get('x_train') x_test = kwargs.get('x_test') p_values = range(0,6) d_values = range(0,6) q_values = range(0,6) # If series is stationary, don't apply differentiation adf = adfuller(x_train) # 0 is score, 1 is pvalue if adf[1] < 0.05: # Null hp rejected, series is stationary and requires no differentiation logger.info('Series is stationary, no need for differencing') d_values = [0] # Set d = 0 # Get all possible configs configs = [] for p in p_values: for d in d_values: for q in q_values: configs.append({ 'params':{'order': (p,d,q)}, 'x_train' : x_train, 'x_test' : x_test }) return configs ModelFactory.register_model('arima', ARIMAModel)
if has_negative(x): x = scale(x, scaler='minmax', feature_range=(0, 1)) pred = self.model.predict(x) return pred @with_xy def get_grid_search_configs(self, **kwargs): alpha = [ 0.0000000001, 0.001, 0.005, 0.01, 0.05, 0.1, 0.3, 0.5, 0.8, 1.0, 1.5, 2.0 ] fit_prior = [True, False] # Get all possible configs configs = [] for k in alpha: for f in fit_prior: configs.append({ 'params': { 'alpha': k, 'fit_prior': f }, 'x_train': kwargs.get('x_train'), 'y_train': kwargs.get('y_train'), 'x_test': kwargs.get('x_test'), 'y_test': kwargs.get('y_test') }) return configs ModelFactory.register_model('mnb', MNBModel)
@with_x def get_grid_search_configs(self, **kwargs): x_train = kwargs.get('x_train') x_test = kwargs.get('x_test') p_values = range(0, 6) d_values = range(0, 6) q_values = range(0, 6) # If series is stationary, don't apply differentiation adf = adfuller(x_train) # 0 is score, 1 is pvalue if adf[1] < 0.05: # Null hp rejected, series is stationary and requires no differentiation logger.info('Series is stationary, no need for differencing') d_values = [0] # Set d = 0 # Get all possible configs configs = [] for p in p_values: for d in d_values: for q in q_values: configs.append({ 'params': { 'order': (p, d, q) }, 'x_train': x_train, 'x_test': x_test }) return configs ModelFactory.register_model('sarima', SARIMAModel)
import logging from lib.log import logger from lib.symbol import Symbol, DatasetType from lib.models import ModelFactory from lib.job import Job from lib.report import ReportCollection import pandas as pd logger.setup(filename='../job_test.log', filemode='w', root_level=logging.DEBUG, log_level=logging.DEBUG, logger='job_test') ModelFactory.discover() ohlcv = pd.read_csv("./data/result/ohlcv.csv", sep=',', encoding='utf-8', index_col='Date', parse_dates=True) btc = pd.read_csv("./data/coinmetrics.io/btc.csv", sep=',', encoding='utf-8', index_col='date', parse_dates=True) _sym = 'BTC' s = Symbol(_sym, ohlcv=ohlcv, blockchain=btc, column_map={