def build_config_space(clustering_ls=["KMeans", "DBSCAN"], dim_reduction_ls=[]): cs = ConfigurationSpace() if len(clustering_ls) > 0: clustering_choice = CategoricalHyperparameter( "clustering_choice", clustering_ls, default_value=clustering_ls[0]) cs.add_hyperparameters([clustering_choice]) if len(dim_reduction_ls) > 0: dim_reduction_choice = CategoricalHyperparameter( "dim_reduction_choice", dim_reduction_ls, default_value=dim_reduction_ls[0]) cs.add_hyperparameters([dim_reduction_choice]) for idx, string in enumerate( itertools.chain(clustering_ls, dim_reduction_ls)): algorithm = Mapper.getClass(string) # encode parameter names encoded_params = [] for param in algorithm.params: encoded_string = StringUtils.encode_parameter( param.name, algorithm.name) param.name = encoded_string # add encoded paramters to configuration space cs.add_hyperparameters(algorithm.params) # define dependency for param in algorithm.params: cs.add_condition( InCondition(child=param, parent=clustering_choice if idx < len(clustering_ls) else dim_reduction_choice, values=[string])) # add forbidden clauses for condition in algorithm.forbidden_clauses: cs.add_forbidden_clause(condition) return cs
def build_config_space(clustering_ls: List[str] = None, feature_selection_ls: List[str] = None): if clustering_ls is None: clustering_ls = ["KMeans", "DBSCAN"] if feature_selection_ls is None: feature_selection_ls = ["NullModel", "NormalizedCut"] assert len(clustering_ls) > 0 assert len(feature_selection_ls) > 0 cs = ConfigurationSpace() clustering_choice = CategoricalHyperparameter( "clustering_choice", clustering_ls, default_value=clustering_ls[0]) feature_selection_choice = CategoricalHyperparameter( "feature_selection_choice", feature_selection_ls, default_value=feature_selection_ls[0]) cs.add_hyperparameters([clustering_choice]) cs.add_hyperparameters([feature_selection_choice]) for idx, string in enumerate( itertools.chain(clustering_ls, feature_selection_ls)): algorithm = Mapper.get_class(string) for param in algorithm.params: encoded_string = encode_parameter(param.name, algorithm.name) param.name = encoded_string cs.add_hyperparameters(algorithm.params) for param in algorithm.params: cs.add_condition( InCondition( child=param, parent=clustering_choice if idx < len(clustering_ls) else feature_selection_choice, values=[string])) for condition in algorithm.forbidden_clauses: cs.add_forbidden_clause(condition) return cs