Passed
Push — master ( 7b482c...5d2e95 )
by Simon
08:24
created

tests.test_general_optimizer_api   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 136
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 93
dl 0
loc 136
rs 10
c 0
b 0
f 0
wmc 13

8 Functions

Rating   Name   Duplication   Size   Complexity  
A test_init_para() 0 16 2
A test_n_iter() 0 11 2
A test_n_jobs() 0 11 2
A test_positional_args() 0 7 1
A test_verbosity() 0 10 2
A test_optimizer() 0 27 2
A _base_test() 0 4 1
A objective_function() 0 9 1
1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
import numpy as np
6
7
from sklearn.datasets import load_iris
8
from sklearn.model_selection import cross_val_score
9
from sklearn.tree import DecisionTreeClassifier
10
11
from hyperactive import Optimizer
12
13
data = load_iris()
14
X, y = data.data, data.target
15
16
17
def objective_function(para):
18
    dtc = DecisionTreeClassifier(
19
        max_depth=para["max_depth"],
20
        min_samples_split=para["min_samples_split"],
21
        min_samples_leaf=para["min_samples_leaf"],
22
    )
23
    scores = cross_val_score(dtc, para["features"], para["target"], cv=2)
24
25
    return scores.mean()
26
27
28
search_space = {
29
    "max_depth": range(1, 21),
30
    "min_samples_split": range(2, 21),
31
    "min_samples_leaf": range(1, 21),
32
}
33
34
35
def _base_test(search, opt_args={}):
36
    opt = Optimizer(**opt_args)
37
    opt.add_search(**search)
38
    opt.run()
39
40
41
def test_init_para():
42
    search = {
43
        "objective_function": objective_function,
44
        "function_parameter": {"features": X, "target": y},
45
        "search_space": search_space,
46
    }
47
48
    init_para1 = {
49
        "max_depth": 3,
50
        "min_samples_split": 3,
51
        "min_samples_leaf": 3,
52
    }
53
    init_para_list = [[init_para1]]
54
    for init_para in init_para_list:
55
        search["init_para"] = init_para
56
        _base_test(search)
57
58
59
test_init_para()
60
61
62
def test_verbosity():
63
    search = {
64
        "objective_function": objective_function,
65
        "function_parameter": {"features": X, "target": y},
66
        "search_space": search_space,
67
    }
68
69
    verbosity_list = [0, 1, 2, 3]
70
    for verbosity in verbosity_list:
71
        _base_test(search, opt_args={"verbosity": verbosity})
72
73
74
def test_n_jobs():
75
    search = {
76
        "objective_function": objective_function,
77
        "function_parameter": {"features": X, "target": y},
78
        "search_space": search_space,
79
    }
80
81
    n_jobs_list = [1, 2, 4, 10, -1]
82
    for n_jobs in n_jobs_list:
83
        search["n_jobs"] = n_jobs
84
        _base_test(search)
85
86
87
def test_positional_args():
88
    search = {
89
        "objective_function": objective_function,
90
        "function_parameter": {"features": X, "target": y},
91
        "search_space": search_space,
92
    }
93
    _base_test(search)
94
95
96
def test_n_iter():
97
    search = {
98
        "objective_function": objective_function,
99
        "function_parameter": {"features": X, "target": y},
100
        "search_space": search_space,
101
    }
102
103
    n_iter_list = [0, 1, 2, 4, 10, 100]
104
    for n_iter in n_iter_list:
105
        search["n_iter"] = n_iter
106
        _base_test(search)
107
108
109
def test_optimizer():
110
    search = {
111
        "objective_function": objective_function,
112
        "function_parameter": {"features": X, "target": y},
113
        "search_space": search_space,
114
        "n_iter": 33,
115
    }
116
117
    optimizer_list = [
118
        "HillClimbing",
119
        "StochasticHillClimbing",
120
        "TabuSearch",
121
        "RandomSearch",
122
        "RandomRestartHillClimbing",
123
        "RandomAnnealing",
124
        "SimulatedAnnealing",
125
        "StochasticTunneling",
126
        "ParallelTempering",
127
        "ParticleSwarm",
128
        "EvolutionStrategy",
129
        "Bayesian",
130
        "TPE",
131
        "DecisionTree",
132
    ]
133
    for optimizer in optimizer_list:
134
        search["optimizer"] = optimizer
135
        _base_test(search)
136