Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add tests for conversion between hyperactive and gradient-free-optimi…
…zers
- Loading branch information
1 parent
8df0aa6
commit 0519c53
Showing
1 changed file
with
215 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,215 @@ | ||
import time | ||
import pytest | ||
import numpy as np | ||
import pandas as pd | ||
|
||
from hyperactive import Hyperactive | ||
|
||
|
||
def objective_function_0(opt): | ||
score = -opt["x1"] * opt["x1"] | ||
return score | ||
|
||
|
||
search_space_0 = { | ||
"x1": list(np.arange(-5, 6, 1)), | ||
} | ||
search_space_1 = { | ||
"x1": list(np.arange(0, 6, 1)), | ||
} | ||
search_space_2 = { | ||
"x1": list(np.arange(-5, 1, 1)), | ||
} | ||
|
||
|
||
search_space_3 = { | ||
"x1": list(np.arange(-1, 1, 0.1)), | ||
} | ||
search_space_4 = { | ||
"x1": list(np.arange(-1, 0, 0.1)), | ||
} | ||
search_space_5 = { | ||
"x1": list(np.arange(0, 1, 0.1)), | ||
} | ||
|
||
|
||
search_space_para_0 = [ | ||
(search_space_0), | ||
(search_space_1), | ||
(search_space_2), | ||
(search_space_3), | ||
(search_space_4), | ||
(search_space_5), | ||
] | ||
|
||
|
||
@pytest.mark.parametrize("search_space", search_space_para_0) | ||
def test_trafo_0(search_space): | ||
hyper = Hyperactive() | ||
hyper.add_search(objective_function_0, search_space, n_iter=25) | ||
hyper.run() | ||
|
||
for value in hyper.results(objective_function_0)["x1"].values: | ||
if value not in search_space["x1"]: | ||
assert False | ||
|
||
|
||
# ----------------- # Test if wrong memory warm starts do work as intended | ||
|
||
|
||
from sklearn.datasets import load_breast_cancer | ||
from sklearn.model_selection import cross_val_score | ||
from sklearn.tree import DecisionTreeClassifier | ||
|
||
data = load_breast_cancer() | ||
X, y = data.data, data.target | ||
|
||
|
||
def objective_function_1(opt): | ||
dtc = DecisionTreeClassifier(min_samples_split=opt["min_samples_split"]) | ||
scores = cross_val_score(dtc, X, y, cv=5) | ||
|
||
return scores.mean() | ||
|
||
|
||
search_space_0 = { | ||
"min_samples_split": list(np.arange(2, 12)), | ||
} | ||
|
||
search_space_1 = { | ||
"min_samples_split": list(np.arange(12, 22)), | ||
} | ||
|
||
search_space_2 = { | ||
"min_samples_split": list(np.arange(22, 32)), | ||
} | ||
|
||
memory_dict = {"min_samples_split": range(2, 12), "score": range(2, 12)} | ||
memory_warm_start_0 = pd.DataFrame(memory_dict) | ||
|
||
memory_dict = {"min_samples_split": range(12, 22), "score": range(12, 22)} | ||
memory_warm_start_1 = pd.DataFrame(memory_dict) | ||
|
||
memory_dict = {"min_samples_split": range(22, 32), "score": range(22, 32)} | ||
memory_warm_start_2 = pd.DataFrame(memory_dict) | ||
|
||
search_space_para_1 = [ | ||
(search_space_0, memory_warm_start_0), | ||
(search_space_1, memory_warm_start_1), | ||
(search_space_2, memory_warm_start_2), | ||
] | ||
|
||
random_state_para_0 = [ | ||
(0), | ||
(1), | ||
(2), | ||
(3), | ||
(4), | ||
] | ||
|
||
|
||
@pytest.mark.parametrize("random_state", random_state_para_0) | ||
@pytest.mark.parametrize("search_space, memory_warm_start", search_space_para_1) | ||
def test_trafo_1(random_state, search_space, memory_warm_start): | ||
search_space = search_space | ||
memory_warm_start = memory_warm_start | ||
|
||
c_time_0 = time.time() | ||
hyper = Hyperactive() | ||
hyper.add_search( | ||
objective_function_1, | ||
search_space, | ||
n_iter=25, | ||
random_state=random_state, | ||
initialize={"random": 1}, | ||
) | ||
hyper.run() | ||
d_time_0 = time.time() - c_time_0 | ||
|
||
c_time_1 = time.time() | ||
hyper = Hyperactive() | ||
hyper.add_search( | ||
objective_function_1, | ||
search_space, | ||
n_iter=25, | ||
random_state=random_state, | ||
initialize={"random": 1}, | ||
memory_warm_start=memory_warm_start, | ||
) | ||
hyper.run() | ||
d_time_1 = time.time() - c_time_1 | ||
|
||
assert d_time_1 < d_time_0 * 0.8 | ||
|
||
|
||
# ----------------- # Test if wrong memory warm starts do not work as intended | ||
|
||
search_space_0 = { | ||
"min_samples_split": list(np.arange(2, 12)), | ||
} | ||
|
||
search_space_1 = { | ||
"min_samples_split": list(np.arange(12, 22)), | ||
} | ||
|
||
search_space_2 = { | ||
"min_samples_split": list(np.arange(22, 32)), | ||
} | ||
|
||
memory_dict = {"min_samples_split": range(12, 22), "score": range(2, 12)} | ||
memory_warm_start_0 = pd.DataFrame(memory_dict) | ||
|
||
memory_dict = {"min_samples_split": range(22, 32), "score": range(12, 22)} | ||
memory_warm_start_1 = pd.DataFrame(memory_dict) | ||
|
||
memory_dict = {"min_samples_split": range(2, 12), "score": range(22, 32)} | ||
memory_warm_start_2 = pd.DataFrame(memory_dict) | ||
|
||
search_space_para_2 = [ | ||
(search_space_0, memory_warm_start_0), | ||
(search_space_1, memory_warm_start_1), | ||
(search_space_2, memory_warm_start_2), | ||
] | ||
|
||
random_state_para_0 = [ | ||
(0), | ||
(1), | ||
(2), | ||
(3), | ||
(4), | ||
] | ||
|
||
""" test is possible in future gfo versions | ||
@pytest.mark.parametrize("random_state", random_state_para_0) | ||
@pytest.mark.parametrize("search_space, memory_warm_start", search_space_para_2) | ||
def test_trafo_2(random_state, search_space, memory_warm_start): | ||
search_space = search_space | ||
memory_warm_start = memory_warm_start | ||
c_time_0 = time.time() | ||
hyper = Hyperactive() | ||
hyper.add_search( | ||
objective_function_1, | ||
search_space, | ||
n_iter=25, | ||
random_state=random_state, | ||
initialize={"random": 1}, | ||
) | ||
hyper.run() | ||
d_time_0 = time.time() - c_time_0 | ||
c_time_1 = time.time() | ||
hyper = Hyperactive() | ||
hyper.add_search( | ||
objective_function_1, | ||
search_space, | ||
n_iter=25, | ||
random_state=random_state, | ||
initialize={"random": 1}, | ||
memory_warm_start=memory_warm_start, | ||
) | ||
hyper.run() | ||
d_time_1 = time.time() - c_time_1 | ||
assert not (d_time_1 < d_time_0 * 0.8) | ||
""" |