1
|
|
|
# Author: Simon Blanke |
2
|
|
|
# Email: [email protected] |
3
|
|
|
# License: MIT License |
4
|
|
|
|
5
|
|
|
from sklearn.datasets import load_iris |
6
|
|
|
from sklearn.model_selection import cross_val_score |
7
|
|
|
from sklearn.tree import DecisionTreeClassifier |
8
|
|
|
from hyperactive import Hyperactive |
9
|
|
|
|
10
|
|
|
data = load_iris() |
11
|
|
|
X = data.data |
12
|
|
|
y = data.target |
13
|
|
|
|
14
|
|
|
random_state = 1 |
15
|
|
|
n_jobs = 2 |
16
|
|
|
|
17
|
|
|
|
18
|
|
View Code Duplication |
def model(para, X_train, y_train): |
|
|
|
|
19
|
|
|
model = DecisionTreeClassifier( |
20
|
|
|
criterion=para["criterion"], |
21
|
|
|
max_depth=para["max_depth"], |
22
|
|
|
min_samples_split=para["min_samples_split"], |
23
|
|
|
min_samples_leaf=para["min_samples_leaf"], |
24
|
|
|
) |
25
|
|
|
scores = cross_val_score(model, X_train, y_train, cv=2) |
26
|
|
|
|
27
|
|
|
return scores.mean(), model |
28
|
|
|
|
29
|
|
|
|
30
|
|
|
search_config = { |
31
|
|
|
model: { |
32
|
|
|
"criterion": ["gini", "entropy"], |
33
|
|
|
"max_depth": range(1, 11), |
34
|
|
|
"min_samples_split": range(2, 11), |
35
|
|
|
"min_samples_leaf": range(1, 11), |
36
|
|
|
} |
37
|
|
|
} |
38
|
|
|
|
39
|
|
|
warm_start = {model: {"max_depth": [1]}} |
40
|
|
|
|
41
|
|
|
|
42
|
|
|
def test_TabuOptimizer(): |
43
|
|
|
opt0 = Hyperactive( |
44
|
|
|
search_config, |
45
|
|
|
optimizer="TabuSearch", |
46
|
|
|
n_iter=1, |
47
|
|
|
random_state=random_state, |
48
|
|
|
verbosity=0, |
49
|
|
|
n_jobs=1, |
50
|
|
|
warm_start=warm_start, |
51
|
|
|
) |
52
|
|
|
opt0.fit(X, y) |
53
|
|
|
|
54
|
|
|
opt1 = Hyperactive( |
55
|
|
|
search_config, |
56
|
|
|
optimizer="TabuSearch", |
57
|
|
|
n_iter=30, |
58
|
|
|
random_state=random_state, |
59
|
|
|
verbosity=0, |
60
|
|
|
n_jobs=n_jobs, |
61
|
|
|
warm_start=warm_start, |
62
|
|
|
) |
63
|
|
|
opt1.fit(X, y) |
64
|
|
|
|
65
|
|
|
assert opt0._optimizer_.score_best < opt1._optimizer_.score_best |
66
|
|
|
|