1
|
|
|
import numpy as np |
2
|
|
|
from sklearn.datasets import load_diabetes |
3
|
|
|
from sklearn.tree import DecisionTreeRegressor |
4
|
|
|
from sklearn.model_selection import cross_val_score |
5
|
|
|
|
6
|
|
|
from hyperactive.search_config import SearchConfig |
7
|
|
|
from hyperactive.optimizers import HillClimbingOptimizer |
8
|
|
|
|
9
|
|
|
from hyperactive.base import BaseExperiment |
10
|
|
|
|
11
|
|
|
|
12
|
|
|
class SklearnExperiment(BaseExperiment): |
13
|
|
|
def setup(self, estimator, X, y, cv=5): |
14
|
|
|
self.estimator = estimator |
15
|
|
|
self.X = X |
16
|
|
|
self.y = y |
17
|
|
|
self.cv = cv |
18
|
|
|
|
19
|
|
|
def _score(self, params): |
20
|
|
|
model = self.estimator(**params) |
21
|
|
|
scores = cross_val_score(model, self.X, self.y, cv=self.cv) |
22
|
|
|
return scores.mean() |
23
|
|
|
|
24
|
|
|
|
25
|
|
|
data = load_diabetes() |
26
|
|
|
X, y = data.data, data.target |
27
|
|
|
|
28
|
|
|
|
29
|
|
|
search_config = SearchConfig( |
30
|
|
|
max_depth=list(np.arange(2, 15, 1)), |
31
|
|
|
min_samples_split=list(np.arange(2, 25, 2)), |
32
|
|
|
) |
33
|
|
|
|
34
|
|
|
experiment = SklearnExperiment() |
35
|
|
|
experiment.setup(DecisionTreeRegressor, X, y, cv=4) |
36
|
|
|
|
37
|
|
|
optimizer1 = HillClimbingOptimizer() |
38
|
|
|
optimizer1.add_search(experiment, search_config, n_iter=100, n_jobs=2) |
39
|
|
|
optimizer1.run() |
40
|
|
|
|