コード例 #1
0
def test_random_state():
    opt0 = Hyperactive(X, y, random_state=False, memory=memory)
    opt0.search(search_config)

    opt1 = Hyperactive(X, y, random_state=0, memory=memory)
    opt1.search(search_config)

    opt2 = Hyperactive(X, y, random_state=1, memory=memory)
    opt2.search(search_config)
コード例 #2
0
def test_shared_memory_warm_start_2():
    c_time = time.time()
    hyper = Hyperactive(n_processes=1)
    hyper.add_search(
        model,
        search_space,
        n_iter=100,
        n_jobs=1,
    )
    hyper.run()
    d_time_1 = time.time() - c_time

    search_data0 = hyper.results(model)

    c_time = time.time()
    hyper = Hyperactive(n_processes=1)
    hyper.add_search(
        model,
        search_space,
        n_iter=100,
        n_jobs=1,
        memory_warm_start=search_data0,
    )
    hyper.add_search(
        model,
        search_space,
        n_iter=100,
        n_jobs=1,
        memory_warm_start=search_data0,
    )
    hyper.add_search(
        model,
        search_space,
        n_iter=100,
        n_jobs=1,
        memory_warm_start=search_data0,
    )
    hyper.add_search(
        model,
        search_space,
        n_iter=100,
        n_jobs=1,
        memory_warm_start=search_data0,
    )
    hyper.run()
    d_time_2 = time.time() - c_time

    print("\n d_time_1 \n", d_time_1)
    print("\n d_time_2 \n", d_time_2)

    d_time_2 = d_time_2 / 2

    assert d_time_1 / d_time_2 > 1.1
コード例 #3
0
def test_HillClimbingOptimizer():
    opt = Hyperactive(X, y, memory=memory)
    opt.search(search_config, n_iter=n_iter, optimizer="HillClimbing")

    for epsilon in [0.01, 0.1, 1]:
        opt = Hyperactive(X, y, memory=memory)
        opt.search(
            search_config,
            n_iter=n_iter,
            optimizer={"HillClimbing": {
                "epsilon": epsilon
            }},
        )
コード例 #4
0
def test_ParticleSwarmOptimizer():
    opt = Hyperactive(X, y, memory=memory)
    opt.search(search_config, n_iter=n_iter, optimizer="ParticleSwarm")

    for n_particles in [2, 10, 30]:
        opt = Hyperactive(X, y, memory=memory)
        opt.search(
            search_config,
            n_iter=n_iter,
            optimizer={"ParticleSwarm": {
                "n_particles": n_particles
            }},
        )
コード例 #5
0
def test_StochasticTunnelingOptimizer():
    opt = Hyperactive(X, y, memory=memory)
    opt.search(search_config, n_iter=n_iter, optimizer="StochasticTunneling")

    for start_temp in [0.1, 1, 10]:
        opt = Hyperactive(X, y, memory=memory)
        opt.search(
            search_config,
            n_iter=n_iter,
            optimizer={"StochasticTunneling": {
                "start_temp": start_temp
            }},
        )
コード例 #6
0
def test_ParallelTemperingOptimizer():
    opt = Hyperactive(X, y, memory=memory)
    opt.search(search_config, n_iter=n_iter, optimizer="ParallelTempering")

    for n_swaps in [1, 10, 30]:
        opt = Hyperactive(X, y, memory=memory)
        opt.search(
            search_config,
            n_iter=n_iter,
            optimizer={"ParallelTempering": {
                "n_swaps": n_swaps
            }},
        )
コード例 #7
0
def test_memory_warm_start_0(search_space):
    hyper0 = Hyperactive()
    hyper0.add_search(objective_function, search_space, n_iter=20)
    hyper0.run()

    search_data0 = hyper0.results(objective_function)

    hyper1 = Hyperactive()
    hyper1.add_search(objective_function,
                      search_space,
                      n_iter=20,
                      memory_warm_start=search_data0)
    hyper1.run()
コード例 #8
0
def test_RandomAnnealingOptimizer():
    opt = Hyperactive(X, y, memory=memory)
    opt.search(search_config, n_iter=n_iter, optimizer="RandomAnnealing")

    for start_temp in [0.1, 1, 10]:
        opt = Hyperactive(X, y, memory=memory)
        opt.search(
            search_config,
            n_iter=n_iter,
            optimizer={"RandomAnnealing": {
                "start_temp": start_temp
            }},
        )
コード例 #9
0
def test_TabuOptimizer():
    opt = Hyperactive(X, y, memory=memory)
    opt.search(search_config, n_iter=n_iter, optimizer="TabuSearch")

    for tabu_memory in [1, 3, 5]:
        opt = Hyperactive(X, y, memory=memory)
        opt.search(
            search_config,
            n_iter=n_iter,
            optimizer={"TabuSearch": {
                "tabu_memory": tabu_memory
            }},
        )
コード例 #10
0
def test_EvolutionStrategyOptimizer():
    opt = Hyperactive(X, y, memory=memory)
    opt.search(search_config, n_iter=n_iter, optimizer="EvolutionStrategy")

    for individuals in [2, 10, 30]:
        opt = Hyperactive(X, y, memory=memory)
        opt.search(
            search_config,
            n_iter=n_iter,
            optimizer={"EvolutionStrategy": {
                "individuals": individuals
            }},
        )
コード例 #11
0
def test_BayesianOptimizer():
    opt = Hyperactive(X, y, memory=memory)
    opt.search(search_config, n_iter=int(n_iter / 33), optimizer="Bayesian")

    for warm_start_smbo in [True]:
        opt = Hyperactive(X, y, memory="long")
        opt.search(
            search_config,
            n_iter=int(n_iter / 33),
            optimizer={"Bayesian": {
                "warm_start_smbo": warm_start_smbo
            }},
        )
コード例 #12
0
def test_Bayesian():
    opt0 = Hyperactive(X, y, random_state=random_state)
    opt0.search(search_config,
                optimizer="Bayesian",
                n_iter=n_iter_min,
                init_config=init_config)

    opt1 = Hyperactive(X, y, random_state=random_state)
    opt1.search(search_config,
                optimizer="Bayesian",
                n_iter=n_iter_max,
                init_config=init_config)

    assert opt0.best_scores[model] < opt1.best_scores[model]
コード例 #13
0
def test_issue_25():
    # set a path to save the dataframe
    path = "./search_data.csv"
    search_space = {
        "n_neighbors": list(range(1, 50)),
    }

    # get para names from search space + the score
    para_names = list(search_space.keys()) + ["score"]

    # init empty pandas dataframe
    search_data = pd.DataFrame(columns=para_names)
    search_data.to_csv(path, index=False)

    def objective_function(para):
        # score = random.choice([1.2, 2.3, np.nan])
        score = np.nan

        # you can access the entire dictionary from "para"
        parameter_dict = para.para_dict

        # save the score in the copy of the dictionary
        parameter_dict["score"] = score

        # append parameter dictionary to pandas dataframe
        search_data = pd.read_csv(path, na_values="nan")
        search_data_new = pd.DataFrame(parameter_dict,
                                       columns=para_names,
                                       index=[0])
        search_data = search_data.append(search_data_new)
        search_data.to_csv(path, index=False, na_rep="nan")

        return score

    hyper0 = Hyperactive()
    hyper0.add_search(objective_function, search_space, n_iter=50)
    hyper0.run()

    search_data_0 = pd.read_csv(path, na_values="nan")
    """
    the second run should be much faster than before, 
    because Hyperactive already knows most parameters/scores
    """
    hyper1 = Hyperactive()
    hyper1.add_search(objective_function,
                      search_space,
                      n_iter=50,
                      memory_warm_start=search_data_0)
    hyper1.run()
コード例 #14
0
def test_StochasticHillClimbingOptimizer():
    opt = Hyperactive(X, y, memory=memory)
    opt.search(search_config,
               n_iter=n_iter,
               optimizer="StochasticHillClimbing")

    for p_down in [0.01, 0.1, 1]:
        opt = Hyperactive(X, y, memory=memory)
        opt.search(
            search_config,
            n_iter=n_iter,
            optimizer={"StochasticHillClimbing": {
                "p_down": p_down
            }},
        )
コード例 #15
0
def test_memory_timeSave_1():
    data = load_breast_cancer()
    X, y = data.data, data.target

    def objective_function(opt):
        dtc = DecisionTreeClassifier(max_depth=opt["max_depth"])
        scores = cross_val_score(dtc, X, y, cv=5)

        return scores.mean()

    search_space = {
        "max_depth": list(np.arange(1, 101)),
    }

    results = pd.DataFrame(np.arange(1, 101), columns=["max_depth"])
    results["score"] = 0

    c_time1 = time.time()
    hyper = Hyperactive()
    hyper.add_search(objective_function,
                     search_space,
                     n_iter=300,
                     memory_warm_start=results)
    hyper.run()
    diff_time1 = time.time() - c_time1

    assert diff_time1 < 1
コード例 #16
0
def meta_opt(para, X_list, y_list):
    scores = []

    for X, y in zip(X_list, y_list):
        X_list, y_list = data_aug(X, y, sample_multi=3, feature_multi=3)

        for X, y in zip(X_list, y_list):

            for n_iter in [10, 25, 50, 100]:
                opt = Hyperactive(
                    search_config_model,
                    optimizer={
                        "ParticleSwarm": {
                            "inertia": para["inertia"],
                            "cognitive_weight": para["cognitive_weight"],
                            "social_weight": para["social_weight"],
                        }
                    },
                    n_iter=n_iter,
                    verbosity=None,
                )
                opt.search(X, y)
                score = opt.score_best
                scores.append(score)

    return np.array(scores).mean()
コード例 #17
0
def meta_opt(para, X, y):
    def model(para, X, y):
        model = DecisionTreeClassifier(
            max_depth=para["max_depth"],
            min_samples_split=para["min_samples_split"],
            min_samples_leaf=para["min_samples_leaf"],
        )
        scores = cross_val_score(model, X, y, cv=3)

        return scores.mean()

    search_config = {
        model: {
            "max_depth": range(2, 50),
            "min_samples_split": range(2, 50),
            "min_samples_leaf": range(1, 50),
        }
    }

    opt = Hyperactive(
        search_config,
        optimizer={
            "ParticleSwarm": {
                "inertia": para["inertia"],
                "cognitive_weight": para["cognitive_weight"],
                "social_weight": para["social_weight"],
            }
        },
        verbosity=None,
    )
    opt.search(X, y)

    return opt.score_best
コード例 #18
0
ファイル: Bayesian.py プロジェクト: tangletit/Hyperactive
def test_gpr():
    opt = Hyperactive(X, y, memory=memory)
    opt.search(search_config,
               n_iter=n_iter,
               optimizer={"Bayesian": {
                   "gpr": "gp_linear"
               }})
コード例 #19
0
def test_attributes_result_errors_2():
    with pytest.raises(ValueError):
        hyper = Hyperactive()
        hyper.add_search(objective_function, search_space, n_iter=15)
        hyper.run()

        hyper.results(objective_function1)
コード例 #20
0
def test_ltm_0(objective_function, search_space, path):
    (search_space, compare) = search_space

    print("\n objective_function \n", objective_function)
    print("\n search_space \n", search_space)
    print("\n compare \n", compare)
    print("\n path \n", path)

    model_name = str(objective_function.__name__)

    hyper = Hyperactive()
    hyper.add_search(objective_function,
                     search_space,
                     n_iter=10,
                     initialize={"random": 1})
    hyper.run()
    results1 = hyper.results(objective_function)

    memory = LongTermMemory(model_name, path=path)
    memory.save(results1, objective_function)
    results2 = memory.load()

    print("\n results1 \n", results1)
    print("\n results2 \n", results2)

    memory.remove_model_data()

    compare(results1, results2)
コード例 #21
0
def test_attributes_results_1():
    hyper = Hyperactive()
    hyper.add_search(objective_function, search_space, n_iter=100)
    hyper.run()

    assert set(search_space.keys()) < set(
        hyper.results(objective_function).columns)
コード例 #22
0
def test_sklearn():
    from sklearn.tree import DecisionTreeClassifier

    def model(para, X_train, y_train):
        model = DecisionTreeClassifier(
            criterion=para["criterion"],
            max_depth=para["max_depth"],
            min_samples_split=para["min_samples_split"],
            min_samples_leaf=para["min_samples_leaf"],
        )
        scores = cross_val_score(model, X_train, y_train, cv=3)

        return scores.mean()

    search_config = {
        model: {
            "criterion": ["gini", "entropy"],
            "max_depth": range(1, 21),
            "min_samples_split": range(2, 21),
            "min_samples_leaf": range(1, 21),
        }
    }

    opt = Hyperactive(X, y)
    opt.search(search_config)
コード例 #23
0
def test_streamlit_backend_2():
    search_id1 = "test_model1"
    search_id2 = "test_model2"
    search_id3 = "test_model3"

    search_ids = [search_id1, search_id2, search_id3]

    board = StreamlitBackend(search_ids)

    def objective_function(opt):
        score = -opt["x1"] * opt["x1"]
        return score

    search_space = {
        "x1": np.arange(-100, 101, 1),
    }

    hyper = Hyperactive()
    hyper.add_search(objective_function, search_space, n_iter=200)
    hyper.run()
    search_data = hyper.results(objective_function)
    search_data["nth_iter"] = 0
    search_data["score_best"] = 0
    search_data["nth_process"] = 0
    search_data["best"] = 0

    plotly_fig = board.plotly(search_data, search_id1)

    assert plotly_fig is not None
コード例 #24
0
def test_early_stop_3():
    def objective_function(para):
        score = -para["x1"] * para["x1"]
        return score

    search_space = {
        "x1": np.arange(0, 100, 0.1),
    }

    n_iter_no_change = 5
    early_stopping = {
        "n_iter_no_change": n_iter_no_change,
    }

    hyper = Hyperactive()
    hyper.add_search(
        objective_function,
        search_space,
        n_iter=100000,
        initialize={"warm_start": [{
            "x1": 0
        }]},
        early_stopping=early_stopping,
    )
    hyper.run()

    search_data = hyper.results(objective_function)
    n_performed_iter = len(search_data)

    print("\n n_performed_iter \n", n_performed_iter)
    print("\n n_iter_no_change \n", n_iter_no_change)

    assert n_performed_iter == (n_iter_no_change + 1)
コード例 #25
0
def test_max_score_0():
    def objective_function(para):
        score = -para["x1"] * para["x1"]
        return score

    search_space = {
        "x1": np.arange(0, 100, 0.1),
    }

    max_score = -9999

    opt = HillClimbingOptimizer(
        epsilon=0.01,
        rand_rest_p=0,
    )

    hyper = Hyperactive()
    hyper.add_search(
        objective_function,
        search_space,
        optimizer=opt,
        n_iter=100000,
        initialize={"warm_start": [{
            "x1": 99
        }]},
        max_score=max_score,
    )
    hyper.run()

    print("\n Results head \n", hyper.results(objective_function).head())
    print("\n Results tail \n", hyper.results(objective_function).tail())

    print("\nN iter:", len(hyper.results(objective_function)))

    assert -100 > hyper.best_score(objective_function) > max_score
コード例 #26
0
def test_filter_data_0():
    search_id1 = "test_model1"
    search_id2 = "test_model2"
    search_id3 = "test_model3"
    search_ids = [search_id1, search_id2, search_id3]

    def objective_function(opt):
        score = -opt["x1"] * opt["x1"]
        return score

    search_space = {
        "x1": np.arange(-100, 101, 1),
    }

    hyper = Hyperactive()
    hyper.add_search(objective_function, search_space, n_iter=200)
    hyper.run()
    search_data = hyper.results(objective_function)

    indices = list(search_space.keys()) + ["score"]
    filter_dict = {
        "parameter": indices,
        "lower bound": "---",
        "upper bound": "---",
    }
    filter_df = pd.DataFrame(filter_dict)
    threshold = -1000
    filter_df["lower bound"].iloc[1] = threshold

    board = StreamlitBackend(search_ids)
    progress_data = board.filter_data(search_data, filter_df)

    assert not np.all(search_data["score"].values >= threshold)
    assert np.all(progress_data["score"].values >= threshold)
コード例 #27
0
def test_n_processes_5():
    hyper = Hyperactive(n_processes=1)
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=4)
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=4)
    hyper.run()

    assert len(hyper.results_list) == 8
コード例 #28
0
ファイル: Bayesian.py プロジェクト: tangletit/Hyperactive
def test_warm_start_smbo():
    opt = Hyperactive(X, y, memory="long")
    opt.search(search_config,
               n_iter=n_iter,
               optimizer={"Bayesian": {
                   "warm_start_smbo": True
               }})
コード例 #29
0
def test_max_score_1():
    def objective_function(para):
        score = -para["x1"] * para["x1"]
        time.sleep(0.01)
        return score

    search_space = {
        "x1": np.arange(0, 100, 0.1),
    }

    max_score = -9999

    c_time = time.time()
    hyper = Hyperactive()
    hyper.add_search(
        objective_function,
        search_space,
        n_iter=100000,
        initialize={"warm_start": [{
            "x1": 99
        }]},
        max_score=max_score,
    )
    hyper.run()
    diff_time = time.time() - c_time

    print("\n Results head \n", hyper.results(objective_function).head())
    print("\n Results tail \n", hyper.results(objective_function).tail())

    print("\nN iter:", len(hyper.results(objective_function)))

    assert diff_time < 1
コード例 #30
0
def test_attributes_results_6():
    def objective_function(optimizer):
        score = (-optimizer.suggested_params["x1"] *
                 optimizer.suggested_params["x1"])
        return score

    search_space = {
        "x1": np.arange(0, 10, 1),
    }

    hyper = Hyperactive()
    hyper.add_search(
        objective_function,
        search_space,
        n_iter=20,
        initialize={"random": 1},
        memory=False,
    )
    hyper.run()

    x1_results = list(hyper.results(objective_function)["x1"].values)

    print("\n x1_results \n", x1_results)

    assert len(set(x1_results)) < len(x1_results)