| @@ 35-79 (lines=45) @@ | ||
| 32 | return ((num / den) + 0) / 1 |
|
| 33 | ||
| 34 | ||
| 35 | class ForestOptimizer(SMBO): |
|
| 36 | name = "Forest Optimization" |
|
| 37 | _name_ = "forest_optimization" |
|
| 38 | """Based on the forest-optimizer in the scikit-optimize package""" |
|
| 39 | ||
| 40 | def __init__( |
|
| 41 | self, |
|
| 42 | *args, |
|
| 43 | tree_regressor="extra_tree", |
|
| 44 | tree_para={"n_estimators": 100}, |
|
| 45 | xi=0.03, |
|
| 46 | warm_start_smbo=None, |
|
| 47 | max_sample_size=10000000, |
|
| 48 | sampling={"random": 1000000}, |
|
| 49 | warnings=100000000, |
|
| 50 | **kwargs |
|
| 51 | ): |
|
| 52 | super().__init__(*args, **kwargs) |
|
| 53 | self.tree_regressor = tree_regressor |
|
| 54 | self.tree_para = tree_para |
|
| 55 | self.regr = tree_regressor_dict[tree_regressor](**self.tree_para) |
|
| 56 | self.xi = xi |
|
| 57 | self.warm_start_smbo = warm_start_smbo |
|
| 58 | self.max_sample_size = max_sample_size |
|
| 59 | self.sampling = sampling |
|
| 60 | self.warnings = warnings |
|
| 61 | ||
| 62 | self.init_warm_start_smbo() |
|
| 63 | ||
| 64 | def _expected_improvement(self): |
|
| 65 | all_pos_comb = self._all_possible_pos() |
|
| 66 | self.pos_comb = self._sampling(all_pos_comb) |
|
| 67 | ||
| 68 | acqu_func = ExpectedImprovement(self.regr, self.pos_comb, self.xi) |
|
| 69 | return acqu_func.calculate(self.X_sample, self.Y_sample) |
|
| 70 | ||
| 71 | def _training(self): |
|
| 72 | X_sample = np.array(self.X_sample) |
|
| 73 | Y_sample = np.array(self.Y_sample) |
|
| 74 | ||
| 75 | if len(Y_sample) == 0: |
|
| 76 | return self.move_random() |
|
| 77 | ||
| 78 | Y_sample = normalize(Y_sample).reshape(-1, 1) |
|
| 79 | self.regr.fit(X_sample, Y_sample) |
|
| 80 | ||
| @@ 30-71 (lines=42) @@ | ||
| 27 | return ((num / den) + 0) / 1 |
|
| 28 | ||
| 29 | ||
| 30 | class BayesianOptimizer(SMBO): |
|
| 31 | name = "Bayesian Optimization" |
|
| 32 | _name_ = "bayesian_optimization" |
|
| 33 | ||
| 34 | def __init__( |
|
| 35 | self, |
|
| 36 | *args, |
|
| 37 | gpr=gaussian_process["gp_nonlinear"], |
|
| 38 | xi=0.03, |
|
| 39 | warm_start_smbo=None, |
|
| 40 | max_sample_size=10000000, |
|
| 41 | sampling={"random": 1000000}, |
|
| 42 | warnings=100000000, |
|
| 43 | **kwargs |
|
| 44 | ): |
|
| 45 | super().__init__(*args, **kwargs) |
|
| 46 | self.gpr = gpr |
|
| 47 | self.regr = gpr |
|
| 48 | self.xi = xi |
|
| 49 | self.warm_start_smbo = warm_start_smbo |
|
| 50 | self.max_sample_size = max_sample_size |
|
| 51 | self.sampling = sampling |
|
| 52 | self.warnings = warnings |
|
| 53 | ||
| 54 | self.init_warm_start_smbo() |
|
| 55 | ||
| 56 | def _expected_improvement(self): |
|
| 57 | all_pos_comb = self._all_possible_pos() |
|
| 58 | self.pos_comb = self._sampling(all_pos_comb) |
|
| 59 | ||
| 60 | acqu_func = ExpectedImprovement(self.gpr, self.pos_comb, self.xi) |
|
| 61 | return acqu_func.calculate(self.X_sample, self.Y_sample) |
|
| 62 | ||
| 63 | def _training(self): |
|
| 64 | X_sample = np.array(self.X_sample) |
|
| 65 | Y_sample = np.array(self.Y_sample) |
|
| 66 | ||
| 67 | if len(Y_sample) == 0: |
|
| 68 | return self.move_random() |
|
| 69 | ||
| 70 | Y_sample = normalize(Y_sample).reshape(-1, 1) |
|
| 71 | self.regr.fit(X_sample, Y_sample) |
|
| 72 | ||