def __init__(self, hyperparameters, default_parameters=None): """ :param hyperparameters: A dictionary of the form ``` { 'hp_1': [value1, value2, value3], 'hp_2': [value1, value2, value3], ... } ``` This format is like the param_grid in SciKit-Learn: http://scikit-learn.org/stable/modules/grid_search.html#exhaustive-grid-search :param default_parameters: Default key-value pairs to add to the dictionary. """ self._hyperparameters = hyperparameters self._default_kwargs = default_parameters or {} named_hyperparameters = [] for name, values in self._hyperparameters.items(): named_hyperparameters.append([(name, v) for v in values]) self._hyperparameters_dicts = [ ppp.dot_map_dict_to_nested_dict(dict(tuple_list)) for tuple_list in itertools.product(*named_hyperparameters) ]
def generate_random_hyperparameters(self): hyperparameters = {} for hp in self._hyperparameters: hyperparameters[hp.name] = hp.generate() hyperparameters = ppp.dot_map_dict_to_nested_dict(hyperparameters) return ppp.merge_recursive_dicts( hyperparameters, copy.deepcopy(self._default_kwargs), ignore_duplicate_keys_in_second_dict=True, )
def wrapped_function(params): start_time = time.time() if flatten_choice_dictionary: params = flatten_hyperopt_choice_dict(params) if dotmap_to_nested_dictionary: params = dot_map_dict_to_nested_dict(params) loss = function( merge_recursive_dicts( params, extra_function_kwargs, ignore_duplicate_keys_in_second_dict=True, )) if maximize: loss = -loss if np.isnan(loss): loss = max_magnitude return { 'loss': loss, 'status': STATUS_OK, 'params': params, # -- store other results like this 'eval_time': time.time() - start_time, }
def test_dotmap_dict_to_nested_dict(self): a = {'foo': 1, 'bar.baz': 3} result = ppp.dot_map_dict_to_nested_dict(a) expected = {'foo': 1, 'bar': {'baz': 3}} self.assertDictEqual(result, expected)