def __init__(self, method, hyper_params, inputs_block, attr_types, random=False, random_max_run=1, name="DN"): assert 'r' not in attr_types, "real value attributes are not allowd here" self.attr_types = attr_types self.num_attr = len(self.attr_types) self.inputs_block = inputs_block self.method = method self.num_inputs = self.inputs_block[-1][1] self.name = name self.models = [] for i, block in enumerate(self.inputs_block): self.models.append(self.method()) try: self.models[-1].set_params(probability=True) except: pass self.hyper_params_choices = enumerate_parameters(hyper_params) if random: num_choices = len(self.hyper_params_choices) assert random_max_run <= num_choices sel = np.random.choice(range(num_choices), size=(random_max_run, ), replace=False) self.hyper_params_choices = [ self.hyper_params_choices[s] for s in sel ] self._define_masks()
def train_valid_search(self, X, y, v_X, v_y, param_grid, sample_weight=None, v_sample_weight=None, max_num_run=None, refit=False, verbose=1): hyper_params = enumerate_parameters(param_grid) hyper_params = np.random.choice(hyper_params, size=len(hyper_params), replace=False) if max_num_run is None: max_num_run = len(hyper_params) best_params = None best_score = 0 for r in range(max_num_run): self.estimator = clone(self.estimator) self.set_params(hyper_params[r]) self.fit(X, y, sample_weight=sample_weight) if verbose>=2: print hyper_params[r] score = self.estimator.score(v_X, v_y, sample_weight=v_sample_weight) if verbose>=2: print score if score > best_score: best_score = score best_params = hyper_params[r] if verbose>=1: print "best ------" print best_params print best_score if sample_weight is None: sample_weight = np.ones((X.shape[0], )) if v_sample_weight is None: v_sample_weight = np.ones((v_X.shape[0], )) train_data = np.concatenate([X, y[:, None], sample_weight[:, None]], axis=1) valid_data = np.concatenate([v_X, v_y[:, None], v_sample_weight[:, None]], axis=1) all_data = np.concatenate([train_data, valid_data], axis=0) np.random.shuffle(all_data) self.set_params(best_params) if refit: self.estimator = clone(self.estimator) self.fit(all_data[:, :-2], all_data[:, -2], sample_weight=all_data[:, -1])
def __init__(self, hyper_params, noise_generator, inputs_dim, prior_dim, inputs_block, attr_types, random=False, name="GDN"): self.hyper_params = hyper_params self.noise_generator = noise_generator self.inputs_dim = inputs_dim self.prior_dim = prior_dim self.inputs_block = inputs_block self.attr_types = attr_types self.name = name self.hyper_params_choices = enumerate_parameters(hyper_params) if random: num_choices = len(self.hyper_params_choices) sel = np.random.choice(range(num_choices), size=(num_choices, ), replace=False) self.hyper_params_choices = [ self.hyper_params_choices[s] for s in sel ] self.set_model(self.hyper_params_choices[0])
def __init__(self, hyper_params, random=True, name=None): self.name = name self.hyper_params_choices = enumerate_parameters(hyper_params) if random: num_choices = len(self.hyper_params_choices) sel = np.random.choice(range(num_choices), size=(num_choices,), replace=False) self.hyper_params_choices = [self.hyper_params_choices[s] for s in sel]
def __init__(self, method, hyper_params, random=False, random_max_run=1): self.hyper_params_choices = enumerate_parameters(hyper_params) if random: num_choices = len(self.hyper_params_choices) assert random_max_run <= num_choices sel = np.random.choice(range(num_choices), size=(random_max_run,), replace=False) self.hyper_params_choices = [self.hyper_params_choices[s] for s in sel] self.method = method self.performance_records = []
def __init__(self, base_model, hyper_params, inputs_dim, random=True, name=None): self.inputs_dim = inputs_dim self.base_model = base_model self.custom_objects = {} if self.base_model == "Gaussian": self.custom_objects["_mdn_gaussian_loss"] = self._mdn_gaussian_loss elif self.base_model == "Poisson": self.custom_objects["_mdn_poisson_loss"] = self._mdn_poisson_loss elif self.base_model == "NegativeBinomial": self.custom_objects["_mdn_negative_binomial_loss"] = self._mdn_negative_binomial_loss self.hyper_params_choices = enumerate_parameters(hyper_params) self.name = name self.n_components = None if random: num_choices = len(self.hyper_params_choices) sel = np.random.choice(range(num_choices), size=(num_choices,), replace=False) self.hyper_params_choices = [self.hyper_params_choices[s] for s in sel]