def evaluate(mth, run_i, seed):
    print(mth, run_i, seed, '===== start =====', flush=True)

    def objective_function(config):
        y = problem.evaluate_config(config)
        return y

    from smac.scenario.scenario import Scenario
    from smac.facade.smac_facade import SMAC
    from test.reproduction.smac_modified import RunHistory_modified   # use modified RunHistory to save record
    # Scenario object
    scenario = Scenario({"run_obj": "quality",
                         "runcount_limit": max_runs,
                         "cs": cs,
                         "cutoff_time": time_limit_per_trial,
                         "initial_incumbent": "RANDOM",
                         "deterministic": "true",
                         })
    runhistory = RunHistory_modified(None)  # aggregate_func handled by smac_facade.SMAC
    smac = SMAC(scenario=scenario, runhistory=runhistory,
                tae_runner=objective_function, run_id=seed,  # set run_id for smac output_dir
                rng=np.random.RandomState(seed))
    smac.optimize()
    # keys = [k.config_id for k in smac.runhistory.data.keys()]
    # perfs = [v.cost for v in smac.runhistory.data.values()]
    config_list = smac.runhistory.config_list
    perf_list = smac.runhistory.perf_list
    time_list = smac.runhistory.time_list
    return config_list, perf_list, time_list
예제 #2
0
def main():
    # Initialize scenario, using runcount_limit as budget.
    orig_scen_dict = {
        'algo': 'python cmdline_wrapper.py',
        'paramfile': 'param_config_space.pcs',
        'run_obj': 'quality',
        'runcount_limit': 25,
        'deterministic': True,
        'output_dir': 'restore_me'
    }
    original_scenario = Scenario(orig_scen_dict)
    smac = SMAC(scenario=original_scenario)
    smac.optimize()

    print(
        "\n########## BUDGET EXHAUSTED! Restoring optimization: ##########\n")

    # Now the output is in the folder 'restore_me'
    #
    # We could simply modify the scenario-object, stored in
    # 'smac.solver.scenario' and start optimization again:

    #smac.solver.scenario.ta_run_limit = 50
    #smac.optimize()

    # Or, to show the whole process of recovering a SMAC-run from the output
    # directory, create a new scenario with an extended budget:
    new_scenario = Scenario(
        orig_scen_dict,
        cmd_args={
            'runcount_limit': 50,  # overwrite these args
            'output_dir': 'restored'
        })

    # We load the runhistory, ...
    rh_path = os.path.join(original_scenario.output_dir, "runhistory.json")
    runhistory = RunHistory(aggregate_func=None)
    runhistory.load_json(rh_path, new_scenario.cs)
    # ... stats, ...
    stats_path = os.path.join(original_scenario.output_dir, "stats.json")
    stats = Stats(new_scenario)
    stats.load(stats_path)
    # ... and trajectory.
    traj_path = os.path.join(original_scenario.output_dir, "traj_aclib2.json")
    trajectory = TrajLogger.read_traj_aclib_format(fn=traj_path,
                                                   cs=new_scenario.cs)
    incumbent = trajectory[-1]["incumbent"]
    # Because we changed the output_dir, we might want to copy the old
    # trajectory-file (runhistory and stats will be complete)
    new_traj_path = os.path.join(new_scenario.output_dir, "traj_aclib2.json")
    shutil.copy(traj_path, new_traj_path)

    # Now we can initialize SMAC with the recovered objects and restore the
    # state where we left off. By providing stats and a restore_incumbent, SMAC
    # automatically detects the intention of restoring a state.
    smac = SMAC(scenario=new_scenario,
                runhistory=runhistory,
                stats=stats,
                restore_incumbent=incumbent)
    smac.optimize()
예제 #3
0
 def _getBasePredictor(self, randomSeed):
     f = open(self._baseDataPath, "w")
     f.truncate()
     f.close()
     self._lowTrainData = self._trainData.sample(fraction=self._lowRatio,
                                                 seed=randomSeed).cache()
     self._midTrainData = self._trainData.sample(fraction=self._midRatio,
                                                 seed=randomSeed).cache()
     cs = self.getPCS()
     scenario = Scenario({
         "run_obj": "quality",
         "runcount-limit": self._BPDS,
         "cs": cs,
         "deterministic": "true"
     })
     # Optimize, using a SMAC-object
     smac = SMAC(scenario=scenario,
                 rng=np.random.RandomState(42),
                 tae_runner=self._baseEval)
     smac.optimize()
     df = self._spark.read.format("libsvm").load(self._baseDataPath)
     rf = RandomForestRegressor()
     rfModel = rf.fit(df)
     self._lowTrainData.unpersist()
     self._midTrainData.unpersist()
     return rfModel
예제 #4
0
def tune_hyperparamerer_smac():
    configs, results = list(), list()
    config_space = create_hyperspace(regressor_id)
    output_dir = "logs/smac3_output_%s" % (datetime.datetime.fromtimestamp(
        time.time()).strftime('%Y-%m-%d_%H:%M:%S_%f'))
    scenario_dict = {
        'abort_on_first_run_crash': False,
        "run_obj": "quality",
        "cs": config_space,
        "deterministic": "true",
        "runcount-limit": trial_num,
        'output_dir': output_dir
    }
    optimizer = SMAC(scenario=Scenario(scenario_dict),
                     rng=np.random.RandomState(45),
                     tae_runner=obj_func_example)

    optimizer.optimize()

    runhistory = optimizer.solver.runhistory
    runkeys = list(runhistory.data.keys())
    for key in runkeys:
        _val = runhistory.data[key][0]
        _config = runhistory.ids_config[key[0]]
        configs.append(_config.get_dictionary())
        results.append(_val)

    inc_idx = np.argmin(results)
    return configs[inc_idx], (configs, results)
예제 #5
0
    def run(self, scen):
        optimizer = SMAC(scenario=scen)

        try:
            optimizer.optimize()
        except (TAEAbortException, FirstRunCrashedException) as err:
            self.logger.error(err)
예제 #6
0
    def run_smac(self,
                 num_iterations,
                 deterministic=True,
                 working_directory='/tmp'):
        """
            Wrapper around SMAC to return a HpBandSter Result object to integrate better with the other methods
        """

        try:
            from smac.facade.smac_facade import SMAC
            from smac.scenario.scenario import Scenario
        except ImportError:
            raise ImportError(
                'To run SMAC, please install the latest python implementation of SMAC (pip install smac)!'
            )
        except:
            raise

        os.makedirs(working_directory, exist_ok=True)
        tmp_fn = os.path.join(working_directory, 'smac_%s.json' % self.run_id)

        # SMAC puts every call into a subprocess, so the data has to be stored on disk to
        # be persistent. Here, we simply pickle the run data to disk after every call and
        # load it before the actual call.
        with open(tmp_fn, 'wb') as fh:
            pickle.dump(self.run_data, fh)

        def smac_objective(config, **kwargs):

            with open(tmp_fn, 'rb') as fh:
                self.run_data = pickle.load(fh)

            loss = self.evaluate_and_log(config, budget=self.max_budget)

            with open(tmp_fn, 'wb') as fh:
                pickle.dump(self.run_data, fh)

            return loss, []

        scenario = Scenario({
            "run_obj": "quality",
            "runcount-limit": num_iterations,
            "cs": self.configspace,
            "deterministic": deterministic,
            "initial_incumbent": "RANDOM",
            "output_dir": working_directory
        })

        smac = SMAC(scenario=scenario, tae_runner=smac_objective)
        smac.optimize()

        with open(tmp_fn, 'rb') as fh:
            self.run_data = pickle.load(fh)

        os.remove(tmp_fn)

        return (self.get_result())
예제 #7
0
    def main_cli(self):
        '''
            main function of SMAC for CLI interface
        '''

        cmd_reader = CMDReader()
        args_, misc_args = cmd_reader.read_cmd()

        logging.basicConfig(level=args_.verbose_level)

        root_logger = logging.getLogger()
        root_logger.setLevel(args_.verbose_level)

        scen = Scenario(args_.scenario_file, misc_args)

        rh = None
        if args_.warmstart_runhistory:
            aggregate_func = average_cost
            rh = RunHistory(aggregate_func=aggregate_func)

            scen, rh = merge_foreign_data_from_file(
                scenario=scen,
                runhistory=rh,
                in_scenario_fn_list=args_.warmstart_scenario,
                in_runhistory_fn_list=args_.warmstart_runhistory,
                cs=scen.cs,
                aggregate_func=aggregate_func)

        initial_configs = None
        if args_.warmstart_incumbent:
            initial_configs = [scen.cs.get_default_configuration()]
            for traj_fn in args_.warmstart_incumbent:
                trajectory = TrajLogger.read_traj_aclib_format(fn=traj_fn,
                                                               cs=scen.cs)
                initial_configs.append(trajectory[-1]["incumbent"])

        if args_.modus == "SMAC":
            optimizer = SMAC(scenario=scen,
                             rng=np.random.RandomState(args_.seed),
                             runhistory=rh,
                             initial_configurations=initial_configs)
        elif args_.modus == "ROAR":
            optimizer = ROAR(scenario=scen,
                             rng=np.random.RandomState(args_.seed),
                             runhistory=rh,
                             initial_configurations=initial_configs)
        try:
            optimizer.optimize()

        finally:
            # ensure that the runhistory is always dumped in the end
            if scen.output_dir is not None:
                optimizer.solver.runhistory.save_json(
                    fn=os.path.join(scen.output_dir, "runhistory.json"))
예제 #8
0
    def main_cli(self):
        '''
            main function of SMAC for CLI interface
        '''
        self.logger.info("SMAC call: %s" % (" ".join(sys.argv)))

        cmd_reader = CMDReader()
        args_, misc_args = cmd_reader.read_cmd()

        logging.basicConfig(level=args_.verbose_level)

        root_logger = logging.getLogger()
        root_logger.setLevel(args_.verbose_level)

        scen = Scenario(args_.scenario_file, misc_args, run_id=args_.seed)

        rh = None
        if args_.warmstart_runhistory:
            aggregate_func = average_cost
            rh = RunHistory(aggregate_func=aggregate_func)

            scen, rh = merge_foreign_data_from_file(
                scenario=scen,
                runhistory=rh,
                in_scenario_fn_list=args_.warmstart_scenario,
                in_runhistory_fn_list=args_.warmstart_runhistory,
                cs=scen.cs,
                aggregate_func=aggregate_func)

        initial_configs = None
        if args_.warmstart_incumbent:
            initial_configs = [scen.cs.get_default_configuration()]
            for traj_fn in args_.warmstart_incumbent:
                trajectory = TrajLogger.read_traj_aclib_format(fn=traj_fn,
                                                               cs=scen.cs)
                initial_configs.append(trajectory[-1]["incumbent"])

        if args_.modus == "SMAC":
            optimizer = SMAC(scenario=scen,
                             rng=np.random.RandomState(args_.seed),
                             runhistory=rh,
                             initial_configurations=initial_configs)
        elif args_.modus == "ROAR":
            optimizer = ROAR(scenario=scen,
                             rng=np.random.RandomState(args_.seed),
                             runhistory=rh,
                             initial_configurations=initial_configs)
        try:
            optimizer.optimize()
        except (TAEAbortException, FirstRunCrashedException) as err:
            self.logger.error(err)
예제 #9
0
def optimize(scenario, run, forest=False, seed=8, ratio=0.8):
    types, bounds = get_types(scenario.cs, scenario.feature_array)
    rfr = RandomForestWithInstances(types=types, bounds=bounds, instance_features=scenario.feature_array, seed=seed)
    ei = EI(model=rfr)
    if forest:
        optimizer = ForestSearch(ei, scenario.cs, ratio=ratio)
    else:
        optimizer = InterleavedLocalAndRandomSearch(ei, scenario.cs)

    scenario.output_dir = "%s_%s_%d_%lf" % ("./logs/run_", "forest_" if forest else "random_", seed, time.time())
    smac = SMAC(
        scenario=scenario,
        rng=np.random.RandomState(seed),
        model=rfr,
        acquisition_function=ei,
        acquisition_function_optimizer=optimizer,
        tae_runner=run,
    )

    try:
        incumbent = smac.optimize()
    finally:
        incumbent = smac.solver.incumbent

    return smac.get_tae_runner().run(incumbent, 1)[1]
예제 #10
0
def smac():
    # Build Configuration Space which defines all parameters and their ranges
    configuration_space = ConfigurationSpace()

    #Define initial ranges
    num_of_hidden_nodes = UniformIntegerHyperparameter("num_of_hidden_nodes",
                                                       1,
                                                       max_hidden_nodes,
                                                       default_value=1)
    decay = UniformFloatHyperparameter("decay", 0, 0.1, default_value=0)

    configuration_space.add_hyperparameters([num_of_hidden_nodes, decay])

    # creating the scenario object
    scenario = Scenario({
        "run_obj": "quality",
        "runcount-limit": hyperparameter_tuning_configs.SMAC_RUNCOUNT_LIMIT,
        "cs": configuration_space,
        "deterministic": "true",
        "abort_on_first_run_crash": "false"
    })

    # optimize using an SMAC object
    smac = SMAC(scenario=scenario,
                rng=np.random.RandomState(1),
                tae_runner=train_model)

    incumbent = smac.optimize()
    return incumbent.get_dictionary()
예제 #11
0
 def getBestModel(self,
                  cutoff_time=None,
                  wallclock_limit=None,
                  runcount_limit=None,
                  tuner_timeout=None):
     cs = self.getPCS()
     dic = {"run_obj": "quality", "cs": cs, "deterministic": "true"}
     if wallclock_limit:
         dic["wallclock_limit"] = wallclock_limit
     if runcount_limit:
         dic["runcount_limit"] = runcount_limit
     if tuner_timeout:
         dic["tuner_timeout"] = tuner_timeout
     scenario = Scenario(dic)
     # Optimize, using a SMAC-object
     print("Optimizing! Depending on your machine, \
         this might take a few minutes.")
     self._trainData.cache()
     smac = SMAC(scenario=scenario,
                 rng=np.random.RandomState(42),
                 tae_runner=self._eval)
     cfg = smac.optimize()
     cfg = self.getConfigurationDict(cfg)
     estimator = self._estimator(**cfg)
     model = estimator.fit(self._trainData)
     self._trainData.unpersist()
     return model
예제 #12
0
    def fit(self, X, y):
        """Execture hyperparameter search.

        Args:
            X (array-like): Predictor matrix.
            y (array-like): Target variable vector.

        """
        # NB:
        self._X, self._y = self._check_X_y(X, y)
        # Location to store metadata from hyperparameter search.
        search_metadata_dir = os.path.join(
            self.output_dir, f'{self.experiment_id}_{self.random_state}'
        )
        if not os.path.isdir(search_metadata_dir):
            os.makedirs(search_metadata_dir)
        # NOTE: See https://automl.github.io/SMAC3/dev/options.html for configs.
        scenario = Scenario(
            {
                'use_ta_time': True,
                'wallclock_limit': float(700),
                'cs': self.hparam_space,
                'output_dir': search_metadata_dir,
                'runcount-limit': self.max_evals,
                'run_obj': 'quality',
                'deterministic': 'true',
                'abort_on_first_run_crash': 'true',
             }
        )
        smac = SMAC(
            scenario=scenario,
            rng=np.random.RandomState(self.random_state),
            tae_runner=self.cv_objective_fn
        )
        self._best_config = smac.optimize()
예제 #13
0
    def smac_gm(self):
        clu_cs = ConfigurationSpace()
        cov_t = CategoricalHyperparameter(
            "covariance_type", ["full", "tied", "diag", "spherical"])
        tol = UniformFloatHyperparameter("tol", 1e-6, 0.1)
        reg_c = UniformFloatHyperparameter("reg_covar", 1e-10, 0.1)
        n_com = UniformIntegerHyperparameter("n_components", 2, 10)
        max_iter = UniformIntegerHyperparameter("max_iter", 10, 1000)
        clu_cs.add_hyperparameters([cov_t, tol, reg_c, n_com, max_iter])

        clu_scenario = Scenario({
            "run_obj":
            "quality",  # we optimize quality (alternatively runtime)
            # "runcount-limit": Constants.num_eval,  # maximum function evaluations
            "cs": clu_cs,  # configuration space
            "deterministic": "true",
            "tuner-timeout": constants.timeout,
            "wallclock_limit": constants.timeout,
            "cutoff_time": constants.timeout
        })
        print('Run GM SMAC ' + self.name)
        smac = SMAC(scenario=clu_scenario, tae_runner=self.run_gm)
        parameters = smac.optimize()
        value = smac.get_runhistory().get_cost(parameters)
        return value, parameters
예제 #14
0
    def smac_em(self):
        clu_cs = ConfigurationSpace()
        n_init = UniformIntegerHyperparameter("n_init", 1, 15)
        n_com = UniformIntegerHyperparameter("n_components", 2, 10)
        reg_c = UniformFloatHyperparameter("min_covar", 1e-6, 0.1)
        max_iter = UniformIntegerHyperparameter("n_iters", 10, 1000)
        tr = UniformFloatHyperparameter("threshold", 1e-6, 0.1)
        clu_cs.add_hyperparameters([n_init, tr, reg_c, n_com, max_iter])

        clu_scenario = Scenario({
            "run_obj":
            "quality",  # we optimize quality (alternatively runtime)
            # "runcount-limit": Constants.num_eval,  # maximum function evaluations
            "cs": clu_cs,  # configuration space
            "deterministic": "true",
            "tuner-timeout": constants.em_timeout,
            "wallclock_limit": constants.em_timeout,
            "cutoff_time": constants.em_timeout,
            "runcount-limit": 1
        })

        print('Run EM SMAC ' + self.name)
        smac = SMAC(scenario=clu_scenario, tae_runner=self.run_em)
        parameters = smac.optimize()
        value = smac.get_runhistory().get_cost(parameters)
        return value, parameters
예제 #15
0
def maxsat(n_eval, n_variables, random_seed):
    assert n_variables in [28, 43, 60]
    if n_variables == 28:
        evaluator = MaxSAT28(random_seed)
    elif n_variables == 43:
        evaluator = MaxSAT43(random_seed)
    elif n_variables == 60:
        evaluator = MaxSAT60(random_seed)
    name_tag = 'maxsat' + str(n_variables) + '_' + datetime.now().strftime(
        "%Y-%m-%d-%H:%M:%S:%f")
    cs = ConfigurationSpace()
    for i in range(n_variables):
        car_var = CategoricalHyperparameter('x' + str(i + 1).zfill(2),
                                            [str(elm) for elm in range(2)],
                                            default_value='0')
        cs.add_hyperparameter(car_var)
    init_points_numpy = evaluator.suggested_init.long().numpy()
    init_points = []
    for i in range(init_points_numpy.shape[0]):
        init_points.append(
            Configuration(
                cs, {
                    'x' + str(j + 1).zfill(2): str(init_points_numpy[i][j])
                    for j in range(n_variables)
                }))

    def evaluate(x):
        x_tensor = torch.LongTensor(
            [int(x['x' + str(j + 1).zfill(2)]) for j in range(n_variables)])
        return evaluator.evaluate(x_tensor).item()

    print('Began    at ' + datetime.now().strftime("%H:%M:%S"))
    scenario = Scenario({
        "run_obj": "quality",
        "runcount-limit": n_eval,
        "cs": cs,
        "deterministic": "true",
        'output_dir': os.path.join(EXP_DIR, name_tag)
    })
    smac = SMAC(scenario=scenario,
                tae_runner=evaluate,
                initial_configurations=init_points)
    smac.optimize()

    evaluations, optimum = evaluations_from_smac(smac)
    print('Finished at ' + datetime.now().strftime("%H:%M:%S"))
    return optimum
예제 #16
0
def branin(n_eval):
    evaluator = Branin()
    name_tag = '_'.join(
        ['branin', datetime.now().strftime("%Y-%m-%d-%H:%M:%S:%f")])
    cs = ConfigurationSpace()
    for i in range(len(evaluator.n_vertices)):
        car_var = UniformIntegerHyperparameter('x' + str(i + 1).zfill(2),
                                               0,
                                               int(evaluator.n_vertices[i]) -
                                               1,
                                               default_value=25)
        cs.add_hyperparameter(car_var)

    init_points_numpy = evaluator.suggested_init.long().numpy()
    init_points = []
    for i in range(init_points_numpy.shape[0]):
        init_points.append(
            Configuration(
                cs, {
                    'x' + str(j + 1).zfill(2): int(init_points_numpy[i][j])
                    for j in range(len(evaluator.n_vertices))
                }))

    def evaluate(x):
        x_tensor = torch.LongTensor([
            int(x['x' + str(j + 1).zfill(2)])
            for j in range(len(evaluator.n_vertices))
        ])
        return evaluator.evaluate(x_tensor).item()

    print('Began    at ' + datetime.now().strftime("%H:%M:%S"))
    scenario = Scenario({
        "run_obj": "quality",
        "runcount-limit": n_eval,
        "cs": cs,
        "deterministic": "true",
        'output_dir': os.path.join(EXP_DIR, name_tag)
    })
    smac = SMAC(scenario=scenario,
                tae_runner=evaluate,
                initial_configurations=init_points)
    smac.optimize()

    evaluations, optimum = evaluations_from_smac(smac)
    print('Finished at ' + datetime.now().strftime("%H:%M:%S"))
    return optimum
예제 #17
0
def contamination(n_eval, lamda, random_seed_pair):
    evaluator = Contamination(lamda, random_seed_pair)
    name_tag = '_'.join([
        'contamination', ('%.2E' % lamda),
        datetime.now().strftime("%Y-%m-%d-%H:%M:%S:%f")
    ])
    cs = ConfigurationSpace()
    for i in range(CONTAMINATION_N_STAGES):
        car_var = CategoricalHyperparameter('x' + str(i + 1).zfill(2),
                                            [str(elm) for elm in range(2)],
                                            default_value='0')
        cs.add_hyperparameter(car_var)

    init_points_numpy = evaluator.suggested_init.long().numpy()
    init_points = []
    for i in range(init_points_numpy.shape[0]):
        init_points.append(
            Configuration(
                cs, {
                    'x' + str(j + 1).zfill(2): str(init_points_numpy[i][j])
                    for j in range(CONTAMINATION_N_STAGES)
                }))

    def evaluate(x):
        x_tensor = torch.LongTensor([
            int(x['x' + str(j + 1).zfill(2)])
            for j in range(CONTAMINATION_N_STAGES)
        ])
        return evaluator.evaluate(x_tensor).item()

    print('Began    at ' + datetime.now().strftime("%H:%M:%S"))
    scenario = Scenario({
        "run_obj": "quality",
        "runcount-limit": n_eval,
        "cs": cs,
        "deterministic": "true",
        'output_dir': os.path.join(EXP_DIR, name_tag)
    })
    smac = SMAC(scenario=scenario,
                tae_runner=evaluate,
                initial_configurations=init_points)
    smac.optimize()

    evaluations, optimum = evaluations_from_smac(smac)
    print('Finished at ' + datetime.now().strftime("%H:%M:%S"))
    return optimum
예제 #18
0
def pest_control(n_eval, random_seed):
    evaluator = PestControl(random_seed)
    name_tag = 'pestcontrol_' + datetime.now().strftime("%Y-%m-%d-%H:%M:%S:%f")
    cs = ConfigurationSpace()
    for i in range(PESTCONTROL_N_STAGES):
        car_var = CategoricalHyperparameter(
            'x' + str(i + 1).zfill(2),
            [str(elm) for elm in range(PESTCONTROL_N_CHOICE)],
            default_value='0')
        cs.add_hyperparameter(car_var)

    init_points_numpy = sample_init_points([PESTCONTROL_N_CHOICE] *
                                           PESTCONTROL_N_STAGES, 20,
                                           random_seed).long().numpy()
    init_points = []
    for i in range(init_points_numpy.shape[0]):
        init_points.append(
            Configuration(
                cs, {
                    'x' + str(j + 1).zfill(2): str(init_points_numpy[i][j])
                    for j in range(PESTCONTROL_N_STAGES)
                }))

    def evaluate(x):
        x_tensor = torch.LongTensor([
            int(x['x' + str(j + 1).zfill(2)])
            for j in range(PESTCONTROL_N_STAGES)
        ])
        return evaluator.evaluate(x_tensor).item()

    print('Began    at ' + datetime.now().strftime("%H:%M:%S"))
    scenario = Scenario({
        "run_obj": "quality",
        "runcount-limit": n_eval,
        "cs": cs,
        "deterministic": "true",
        'output_dir': os.path.join(EXP_DIR, name_tag)
    })
    smac = SMAC(scenario=scenario,
                tae_runner=evaluate,
                initial_configurations=init_points)
    smac.optimize()

    evaluations, optimum = evaluations_from_smac(smac)
    print('Finished at ' + datetime.now().strftime("%H:%M:%S"))
    return optimum
 def getBestModelWithSubSampling(self,
                                 lowRatio=0.05,
                                 midRatio=0.2,
                                 taeLimit=50,
                                 basePredictorsNum=5,
                                 **kw):
     self._lowRatio = lowRatio
     self._midRatio = midRatio
     self._taeLimit = taeLimit
     self._basePredictors = self.__getBasePredictors(num=basePredictorsNum)
     self._finalLowTrainData = self._trainData.sample(
         fraction=self._lowRatio, seed=42)
     self._finalPredictor = None
     bestEvaluation = 0
     bestModel = None
     z = np.array([[]])
     y = np.array([[]])
     cs = self.getPCS()
     self._omiga = np.zeros((basePredictorsNum + 1, 1))
     if "run_obj" not in kw:
         kw["run_obj"] = "quality"
     kw["cs"] = cs
     kw["deterministic"] = "true"
     scenario = Scenario(kw)
     for i in range(taeLimit):
         # Optimize, using a SMAC-object
         smac = SMAC(scenario=scenario,
                     rng=np.random.RandomState(i + 1),
                     tae_runner=self.__finalEval)
         cfg = smac.optimize()
         cfg = {k: cfg[k] for k in cfg if cfg[k]}
         cfgList = [cfg[k] for k in sorted(cfg.keys())]
         estimator = self._estimator(**cfg)
         paramMap = estimator.extractParamMap()
         paramGrid = ParamGridBuilder().build()
         cv = CrossValidator(estimator=estimator,
                             evaluator=self._evaluator,
                             estimatorParamMaps=paramGrid,
                             numFolds=3)
         lowModel = cv.fit(self._finalLowTrainData, params=paramMap)
         hModel = cv.fit(self._trainData, params=paramMap)
         if hModel.avgMetrics[0] > bestEvaluation:
             bestModel = hModel.bestModel
             bestEvaluation = hModel.avgMetrics[0]
         transformData = self.__getBaseTransformedData(cfgList)
         if not z.any():
             z = np.array(transformData).reshape(
                 (-1, basePredictorsNum + 1))
         else:
             z = np.row_stack((z, transformData))
         if not y.any():
             y = np.array(hModel.avgMetrics[0] -
                          lowModel.avgMetrics[0]).reshape((-1, 1))
         else:
             y = np.row_stack(
                 (y, hModel.avgMetrics[0] - lowModel.avgMetrics[0]))
         self._omiga = pinv(z.T.dot(z)).dot(z.T).dot(y)
     return bestModel
예제 #20
0
def main():
    # Prepare the data for training.
    (x_train, y_train), (x_test, y_test), num_cls = load_data(dataset_name)
    dmtrain = xgb.DMatrix(x_train, label=y_train)
    dmvalid = xgb.DMatrix(x_test, label=y_test)
    cs = create_configspace()

    def objective_func(params):
        num_round = int(params['n_estimators'])
        parameters = {}
        for p in params:
            parameters[p] = params[p]

        if num_cls > 2:
            parameters['num_class'] = num_cls
            parameters['objective'] = 'multi:softmax'
            parameters['eval_metric'] = 'merror'
        elif num_cls == 2:
            parameters['objective'] = 'binary:logistic'
            parameters['eval_metric'] = 'error'

        parameters['tree_method'] = 'hist'
        parameters['booster'] = 'gbtree'
        parameters['nthread'] = args.nthread
        parameters['silent'] = 1
        watchlist = [(dmtrain, 'train'), (dmvalid, 'valid')]

        model = xgb.train(parameters,
                          dmtrain,
                          num_round,
                          watchlist,
                          verbose_eval=1)
        pred = model.predict(dmvalid)
        if num_cls == 2:
            pred = [int(i > 0.5) for i in pred]
        acc = accuracy_score(dmvalid.get_label(), pred)
        spill_result((params.get_dictionary(), params.get_array(), acc))
        return 1 - acc

    # Create scenario object
    scenario = Scenario({
        "run_obj": "quality",
        "runcount-limit": run_count,
        "cs": cs,
        "deterministic": "true"
    })

    smac = SMAC(scenario=scenario,
                rng=np.random.RandomState(60),
                tae_runner=objective_func)
    incumbent = smac.optimize()
    incumbent_value = objective_func(incumbent)
    print('The best configuration is', incumbent)
    print('The best performance, error:', incumbent_value)
    # Rename the temporary file.
    rename()
예제 #21
0
    def fit(self, X_train, y_train, X_valid, y_valid, 
            max_epochs:int,
            runcount_limit:int=100,
            loss_func=categorical_crossentropy,
            metrics=['accuracy']):


        def obj_func(config, instance=None, seed=None, pc=None):
            # continuing training if pc is given
            # otherwise, construct new DNN
            if pc is None:
                K.clear_session()
                pc = ParamFCNetClassification(config=config, n_feat=X_train.shape[1],
                                              n_classes=self.n_classes,
                                              max_num_epochs=max_epochs,
                                              metrics=metrics,
                                              verbose=0)
                
            history = pc.train(X_train=X_train, y_train=y_train, X_valid=X_valid,
                               y_valid=y_valid, n_epochs=1)
            final_loss = history.history["val_loss"][-1] 
            
            return final_loss, {"model": pc}


        taf = SimpleTAFunc(obj_func)
        cs = ParamFCNetClassification.get_config_space(max_num_layers=self.max_layers,
                                                       loss_functions=[loss_func],
                                                       output_activations=['softmax'],
                                                       use_l2_regularization=self.use_l2_regularization,
                                                       use_dropout=self.use_dropout)
        ac_scenario = Scenario({"run_obj": "quality",  # we optimize quality
                                "runcount-limit": max_epochs*runcount_limit,
                                "cost_for_crash": 10, 
                                "cs": cs,
                                "deterministic": "true",
                                "output-dir": ""
                                })
        
        intensifier = Intensifier(tae_runner=taf, stats=None,
                 traj_logger=None, 
                 rng=np.random.RandomState(42),
                 run_limit=100,
                 max_epochs=max_epochs)
        
        smac = SMAC(scenario=ac_scenario, 
                    tae_runner=taf,
                    rng=np.random.RandomState(42),
                    intensifier=intensifier)
        
        smac.solver.runhistory.overwrite_existing_runs = True
        
        incumbent = smac.optimize()
        
        return incumbent
예제 #22
0
def optimize():
    # We load the iris-dataset (a widely used benchmark)
    iris = datasets.load_iris()

    #logger = logging.getLogger("SVMExample")
    logging.basicConfig(level=logging.INFO)  # logging.DEBUG for debug output

    # Build Configuration Space which defines all parameters and their ranges
    cs = ConfigurationSpace()

    # We define a few possible types of SVM-kernels and add them as "kernel" to our cs
    kernel = CategoricalHyperparameter("kernel", ["linear", "rbf", "poly", "sigmoid"], default="poly")
    cs.add_hyperparameter(kernel)

    # There are some hyperparameters shared by all kernels
    C = UniformFloatHyperparameter("C", 0.001, 1000.0, default=1.0)
    shrinking = CategoricalHyperparameter("shrinking", ["true", "false"], default="true")
    cs.add_hyperparameters([C, shrinking])

    # Others are kernel-specific, so we can add conditions to limit the searchspace
    degree = UniformIntegerHyperparameter("degree", 1, 5, default=3)     # Only used by kernel poly
    coef0 = UniformFloatHyperparameter("coef0", 0.0, 10.0, default=0.0)  # poly, sigmoid
    cs.add_hyperparameters([degree, coef0])
    use_degree = InCondition(child=degree, parent=kernel, values=["poly"])
    use_coef0 = InCondition(child=coef0, parent=kernel, values=["poly", "sigmoid"])
    cs.add_conditions([use_degree, use_coef0])

    # This also works for parameters that are a mix of categorical and values from a range of numbers
    # For example, gamma can be either "auto" or a fixed float
    gamma = CategoricalHyperparameter("gamma", ["auto", "value"], default="auto")  # only rbf, poly, sigmoid
    gamma_value = UniformFloatHyperparameter("gamma_value", 0.0001, 8, default=1)
    cs.add_hyperparameters([gamma, gamma_value])
    # We only activate gamma_value if gamma is set to "value"
    cs.add_condition(InCondition(child=gamma_value, parent=gamma, values=["value"]))
    # And again we can restrict the use of gamma in general to the choice of the kernel
    cs.add_condition(InCondition(child=gamma, parent=kernel, values=["rbf", "poly", "sigmoid"]))


    # Scenario object
    scenario = Scenario("test/test_files/svm_scenario.txt")

    # Example call of the function
    # It returns: Status, Cost, Runtime, Additional Infos
    def_value = svm_from_cfg(cs.get_default_configuration())
    print("Default Value: %.2f" % (def_value))

    # Optimize, using a SMAC-object
    print("Optimizing! Depending on your machine, this might take a few minutes.")
    smac = SMAC(scenario=scenario, rng=np.random.RandomState(42),
            tae_runner=svm_from_cfg)

    incumbent = smac.optimize()
    inc_value = svm_from_cfg(incumbent)

    print("Optimized Value: %.2f" % (inc_value))
예제 #23
0
def main_loop(problem):
    logging.basicConfig(level=logging.INFO)  # logging.DEBUG for debug output

    cs = ConfigurationSpace()

    n_neighbors = UniformIntegerHyperparameter("n_neighbors", 2,10, default_value=5)
    cs.add_hyperparameter(n_neighbors)

    weights = CategoricalHyperparameter("weights", ["uniform","distance"], default_value="uniform")
    algorithm = CategoricalHyperparameter("algorithm", ["ball_tree", "kd_tree","brute","auto"], default_value="auto")
    cs.add_hyperparameters([weights, algorithm])

    leaf_size = UniformIntegerHyperparameter("leaf_size", 1, 100, default_value=50)
    cs.add_hyperparameter(leaf_size)
    use_leaf_size= InCondition(child=leaf_size, parent=algorithm, values=["ball_tree","kd_tree"])
    cs.add_condition(use_leaf_size)

    p = UniformIntegerHyperparameter("p", 1,3, default_value=2)
    cs.add_hyperparameter(p)

    # Scenario object
    max_eval=100000
    scenario = Scenario({"run_obj": "quality",   # we optimize quality (alternatively runtime)
                         "runcount-limit": max_eval,  # maximum function evaluations
                         "cs": cs,                        # configuration space
                         "shared_model": True,
                         "output_dir": "/home/naamah/Documents/CatES/result_All/smac/KNN/run_{}_{}_{}".format(max_eval,
                                                                                                           datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d_%H:%M:%S'),
                                                                                                              problem)

                         # "output_dir": "/home/naamah/Documents/CatES/result_All/smac/KNN/{}/run_{}_{}".format(problem,max_eval, datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d_%H:%M:%S_%f')),
                         # "input_psmac_dirs":"/home/naamah/Documents/CatES/result_All/",
                         # "deterministic": "true"
                         })

    # Example call of the function
    # It returns: Status, Cost, Runtime, Additional Infos
    def_value = svm_from_cfg(cs.get_default_configuration())
    print("Default Value: %.2f" % (def_value))

    # Optimize, using a SMAC-object
    print("Optimizing! Depending on your machine, this might take a few minutes.")
    smac = SMAC(scenario=scenario,tae_runner=svm_from_cfg)

    incumbent = smac.optimize()

    inc_value = svm_from_cfg(incumbent)
    print("Optimized Value: %.2f" % (inc_value))

    return (incumbent)


# main_loop()
예제 #24
0
def optimize(algorithm,
             data_location,
             max_evals=10,
             output_file='results/optimization',
             do_plotting=False):
    if experiment_type == 'mnist':
        data = mnist_data
        dictionary = dict_classifiers
        loss_function = accuracy_score
        classification = True
    elif experiment_type == 'galaxy':
        data = gz_data
        dictionary = dict_regressors
        loss_function = lambda x, y: np.sqrt(mean_squared_error(x, y))
    elif experiment_type == 'neal':
        data = neal_data
        dictionary = dict_classifiers
        loss_function = accuracy_score
        classification = True

    #logger = logging.getLogger("SVMExample")
    logging.basicConfig(level=logging.INFO)  # logging.DEBUG for debug output
    cs = get_config_space()
    # Scenario object
    scenario = Scenario({
        "run_obj": "quality",  # we optimize quality (alternatively runtime)
        "runcount-limit": max_evals,  # maximum function evaluations
        "cs": cs,  # configuration space
        "deterministic": "true"
    })

    # Example call of the function
    # It returns: Status, Cost, Runtime, Additional Infos
    def_value = ml_cfg(cs.get_default_configuration())
    print("Default Value: %.2f" % (def_value))

    # Optimize, using a SMAC-object
    print(
        "Optimizing! Depending on your machine, this might take a few minutes."
    )
    model = ml_cfg(data)
    smac = SMAC(scenario=scenario,
                rng=np.random.RandomState(42),
                tae_runner=model)

    incumbent = smac.optimize()

    inc_value = svm_from_cfg(incumbent)

    print("Optimized Value: %.2f" % (inc_value))
예제 #25
0
def main(b, seed):
    # Runs SMAC on a given benchmark
    scenario = Scenario({
        "run_obj": "quality",
        "runcount-limit": b.get_meta_information()['num_function_evals'],
        "cs": b.get_configuration_space(),
        "deterministic": "true",
        "output_dir": "./{:s}/run-{:d}".format(b.get_meta_information()['name'],
                                               seed)})

    smac = SMAC(scenario=scenario, tae_runner=b,
                rng=np.random.RandomState(seed))
    x_star = smac.optimize()

    print("Best value found:\n {:s}".format(str(x_star)))
    print("with {:s}".format(str(b.objective_function(x_star))))
예제 #26
0
        def opt_rosenbrock():
            cs = ConfigurationSpace()

            cs.add_hyperparameter(UniformFloatHyperparameter("x1", -5, 5, default_value=-3))
            cs.add_hyperparameter(UniformFloatHyperparameter("x2", -5, 5, default_value=-4))

            scenario = Scenario({"run_obj": "quality",  # we optimize quality (alternatively runtime)
                                 "runcount-limit": 50,  # maximum function evaluations
                                 "cs": cs,  # configuration space
                                 "deterministic": "true",
                                 "intensification_percentage": 0.000000001
                                 })

            smac = SMAC(scenario=scenario, rng=np.random.RandomState(42),
                        tae_runner=rosenbrock_2d)
            incumbent = smac.optimize()
            return incumbent
예제 #27
0
    def dont_test_smac_choice(self):

        import numpy as np
        from sklearn import svm, datasets
        from sklearn.model_selection import cross_val_score

        # Import ConfigSpace and different types of parameters
        from smac.configspace import ConfigurationSpace

        # Import SMAC-utilities
        from smac.tae.execute_func import ExecuteTAFuncDict
        from smac.scenario.scenario import Scenario
        from smac.facade.smac_facade import SMAC

        tfm = PCA() | Nystroem() | NoOp()
        planned_pipeline1 = (
            OneHotEncoder(handle_unknown='ignore', sparse=False)
            | NoOp()) >> tfm >> (LogisticRegression() | KNeighborsClassifier())

        cs: ConfigurationSpace = get_smac_space(planned_pipeline1,
                                                lale_num_grids=5)

        # Scenario object
        scenario = Scenario({
            "run_obj":
            "quality",  # we optimize quality (alternatively runtime)
            "runcount-limit": 1,  # maximum function evaluations
            "cs": cs,  # configuration space
            "deterministic": "true"
        })

        # Optimize, using a SMAC-object
        tae = test_iris_fmin_tae(planned_pipeline1, num_folds=2)
        print(
            "Optimizing! Depending on your machine, this might take a few minutes."
        )
        smac = SMAC(scenario=scenario,
                    rng=np.random.RandomState(42),
                    tae_runner=tae)

        incumbent = smac.optimize()

        inc_value = tae(incumbent)

        print("Optimized Value: %.2f" % (inc_value))
예제 #28
0
    def test_smac(self):

        import numpy as np
        from sklearn import svm, datasets
        from sklearn.model_selection import cross_val_score

        # Import ConfigSpace and different types of parameters
        from smac.configspace import ConfigurationSpace

        # Import SMAC-utilities
        from smac.tae.execute_func import ExecuteTAFuncDict
        from smac.scenario.scenario import Scenario
        from smac.facade.smac_facade import SMAC

        from lale.search.SMAC import get_smac_space

        lr = LogisticRegression()

        cs: ConfigurationSpace = get_smac_space(lr)

        # Scenario object
        scenario = Scenario({
            "run_obj":
            "quality",  # we optimize quality (alternatively runtime)
            "runcount-limit": 1,  # maximum function evaluations
            "cs": cs,  # configuration space
            "deterministic": "true",
            "abort_on_first_run_crash": False
        })

        # Optimize, using a SMAC-object
        tae = test_iris_fmin_tae(lr, num_folds=2)
        print(
            "Optimizing! Depending on your machine, this might take a few minutes."
        )
        smac = SMAC(scenario=scenario,
                    rng=np.random.RandomState(42),
                    tae_runner=tae)

        incumbent = smac.optimize()

        inc_value = tae(incumbent)

        print("Optimized Value: %.2f" % (inc_value))
예제 #29
0
파일: gen_CFG.py 프로젝트: 36000/HFSF
def main():
    cs = ConfigurationSpace()

    cell_size = CategoricalHyperparameter("cell_size", [128],
                                          default_value=128)  # kick up to 256
    n_cell = CategoricalHyperparameter("n_cell", [2], default_value=2)
    dropout = CategoricalHyperparameter("dropout", [0.5], default_value=0.5)

    activation = CategoricalHyperparameter("activation", ['sigmoid'],
                                           default_value='sigmoid')
    optimizer = CategoricalHyperparameter("optimizer", ['adam'],
                                          default_value='adam')
    optimizer_lr = CategoricalHyperparameter(
        "optimizer_lr", [.001, .003, .006, .01, 0.03, 0.1], default_value=.01)
    learning_decay_rate = UniformFloatHyperparameter("learning_decay_rate",
                                                     0,
                                                     0.9,
                                                     default_value=.6)

    nn_type = CategoricalHyperparameter("nn_type", ['RNN', 'LSTM', 'GRU'],
                                        default_value='LSTM')

    epochs = CategoricalHyperparameter("epochs", [10], default_value=10)

    cs.add_hyperparameters([
        cell_size, n_cell, dropout, nn_type, activation, optimizer,
        optimizer_lr, learning_decay_rate, epochs
    ])

    scenario = Scenario({
        "run_obj": "quality",
        "runcount-limit": 32,
        "cs": cs,
        "deterministic": "true"
    })
    scenario.output_dir_for_this_run = "C:\\NNwork\\HFSF\\SMAC3out"
    scenario.output_dir = "C:\\NNwork\\HFSF\\SMAC3out"
    smac = SMAC(scenario=scenario,
                rng=np.random.RandomState(23),
                tae_runner=rnn_from_cfg)

    best_model = smac.optimize()
    print_incumb(best_model)
    np.save("C:\\NNwork\\HFSF\\SMAC3out\\best.cfg", best_model)
예제 #30
0
def main(dataset_name):
    (x_train, y_train), (x_test, y_test), cls_num = load_dataset(dataset_name)
    epochs_num, run_count = get_default_setting(dataset_name)

    # Scenario object
    scenario = Scenario({
        "run_obj": "quality",
        "runcount-limit": run_count,
        "cs": create_configspace(),
        "deterministic": "true",
    })

    def wrapper_for_resnet_tuning(cfg):
        val_error, test_error = train(cls_num,
                                      epochs_num,
                                      cfg, (x_train, y_train),
                                      (x_test, y_test),
                                      proportion=0.2,
                                      seed=32)
        print('the validation accuracy is ', 1 - val_error)
        print('the test accuracy is ', 1 - test_error)

        tmp_file = 'data/tmp_%s_result.pkl' % dataset_name
        if not os.path.exists(tmp_file):
            data = []
        else:
            with open(tmp_file, 'rb') as f:
                data = pickle.load(f)
        data.append(
            (cfg.get_dictionary(), cfg.get_array(), val_error, test_error))

        with open(tmp_file, 'wb') as f:
            pickle.dump(data, f)
        return val_error

    smac = SMAC(scenario=scenario,
                rng=np.random.RandomState(60),
                tae_runner=wrapper_for_resnet_tuning)
    incumbent = smac.optimize()
    print('The best configuration is', incumbent)

    tmp_file = 'data/tmp_%s_result.pkl' % dataset_name
    target_file = 'data/result_%s_%d.pkl' % (dataset_name, run_count)
    os.rename(tmp_file, target_file)
예제 #31
0
elif benchmark == "bohachevsky":
    b = hpobench.Bohachevsky()
elif benchmark == "levy":
    b = hpobench.Levy()

info = b.get_meta_information()

scenario = Scenario({"run_obj": "quality",
                     "runcount-limit": n_iters,
                     "cs": b.get_configuration_space(),
                     "deterministic": "true",
                     "initial_incumbent": "RANDOM",
                     "output_dir": ""})

smac = SMAC(scenario=scenario, tae_runner=b)
smac.optimize()

rh = smac.runhistory
incs = []
inc = None
idx = 1
t = smac.get_trajectory()
for i in range(n_iters):

    if idx < len(t) and i == t[idx].ta_runs - 1:
        inc = t[idx].incumbent
        idx += 1
    incs.append(inc)

# Offline Evaluation
regret = []