Skip to content

Commit a5dac57

Browse files
committed
Merge branch 'dev' of https://github.com/SimonBlanke/Hyperactive into dev
2 parents c917940 + 7fd0b25 commit a5dac57

1 file changed

Lines changed: 86 additions & 0 deletions

File tree

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import numpy as np
2+
import random
3+
from sklearn.model_selection import cross_val_score
4+
from sklearn.tree import DecisionTreeClassifier
5+
from sklearn.datasets import load_breast_cancer
6+
from hyperactive import Hyperactive
7+
8+
data = load_breast_cancer()
9+
X, y = data.data, data.target
10+
11+
X_list, y_list = [X], [y]
12+
13+
def data_aug(X, y, sample_multi=5, feature_multi=5):
14+
X_list, y_list = [], []
15+
16+
n_samples = X.shape[0]
17+
n_features = X.shape[1]
18+
19+
for sample in range(1, sample_multi+1):
20+
idx_sample = np.random.randint(n_samples, size=int(n_samples / sample))
21+
22+
for feature in range(1, feature_multi+1):
23+
idx_feature = np.random.randint(n_features, size=int(n_features / feature))
24+
25+
X_temp_ = X[idx_sample, :]
26+
X_temp = X_temp_[:, idx_feature]
27+
y_temp = y[idx_sample]
28+
29+
X_list.append(X_temp)
30+
y_list.append(y_temp)
31+
32+
return X_list, y_list
33+
34+
def model(para, X, y):
35+
model = DecisionTreeClassifier(
36+
max_depth=para["max_depth"],
37+
min_samples_split=para["min_samples_split"],
38+
min_samples_leaf=para["min_samples_leaf"],
39+
)
40+
scores = cross_val_score(model, X, y, cv=3)
41+
42+
return scores.mean()
43+
44+
search_config_model = {
45+
model: {
46+
"max_depth": range(2, 50),
47+
"min_samples_split": range(2, 50),
48+
"min_samples_leaf": range(1, 50),
49+
}
50+
}
51+
52+
53+
def meta_opt(para, X_list, y_list):
54+
scores = []
55+
56+
for X, y in zip(X_list, y_list):
57+
X_list, y_list = data_aug(X, y, sample_multi=3, feature_multi=3)
58+
59+
for X, y in zip(X_list, y_list):
60+
61+
for n_iter in [10, 25, 50, 100]:
62+
opt = Hyperactive(
63+
search_config_model,
64+
optimizer={
65+
"ParticleSwarm": {"inertia": para["inertia"], "cognitive_weight": para["cognitive_weight"], "social_weight": para["social_weight"]}
66+
},
67+
n_iter=n_iter,
68+
verbosity=None,
69+
)
70+
opt.search(X, y)
71+
score = opt.score_best
72+
scores.append(score)
73+
74+
return np.array(scores).mean()
75+
76+
77+
search_config_meta = {
78+
meta_opt: {
79+
"inertia": np.arange(0, 1, 0.01),
80+
"cognitive_weight": np.arange(0, 1, 0.01),
81+
"social_weight": np.arange(0, 1, 0.01),
82+
}
83+
}
84+
85+
opt = Hyperactive(search_config_meta, optimizer="Bayesian", n_iter=30)
86+
opt.search(X_list, y_list)

0 commit comments

Comments
 (0)