Add some errorhandling for custom estimator
This commit is contained in:
		| @@ -45,7 +45,7 @@ progressbar.streams.wrap_stdout() | |||||||
| logger = logging.getLogger(__name__) | logger = logging.getLogger(__name__) | ||||||
|  |  | ||||||
|  |  | ||||||
| INITIAL_POINTS = 30 | INITIAL_POINTS = 5 | ||||||
|  |  | ||||||
| # Keep no more than SKOPT_MODEL_QUEUE_SIZE models | # Keep no more than SKOPT_MODEL_QUEUE_SIZE models | ||||||
| # in the skopt model queue, to optimize memory consumption | # in the skopt model queue, to optimize memory consumption | ||||||
| @@ -366,13 +366,19 @@ class Hyperopt: | |||||||
|  |  | ||||||
|     def get_optimizer(self, dimensions: List[Dimension], cpu_count) -> Optimizer: |     def get_optimizer(self, dimensions: List[Dimension], cpu_count) -> Optimizer: | ||||||
|         estimator = self.custom_hyperopt.generate_estimator() |         estimator = self.custom_hyperopt.generate_estimator() | ||||||
|  |  | ||||||
|  |         acq_optimizer = "sampling" | ||||||
|  |         if isinstance(estimator, str): | ||||||
|  |             if estimator not in ("GP", "RF", "ET", "GBRT"): | ||||||
|  |                 raise OperationalException(f"Estimator {estimator} not supported.") | ||||||
|  |             else: | ||||||
|  |                 acq_optimizer = "auto" | ||||||
|  |  | ||||||
|         logger.info(f"Using estimator {estimator}.") |         logger.info(f"Using estimator {estimator}.") | ||||||
|         # TODO: Impact of changing acq_optimizer to "sampling" is unclear |  | ||||||
|         # (other than that it fails with other optimizers when using custom sklearn regressors) |  | ||||||
|         return Optimizer( |         return Optimizer( | ||||||
|             dimensions, |             dimensions, | ||||||
|             base_estimator=estimator, |             base_estimator=estimator, | ||||||
|             acq_optimizer="sampling", |             acq_optimizer=acq_optimizer, | ||||||
|             n_initial_points=INITIAL_POINTS, |             n_initial_points=INITIAL_POINTS, | ||||||
|             acq_optimizer_kwargs={'n_jobs': cpu_count}, |             acq_optimizer_kwargs={'n_jobs': cpu_count}, | ||||||
|             random_state=self.random_state, |             random_state=self.random_state, | ||||||
|   | |||||||
| @@ -884,6 +884,10 @@ def test_in_strategy_auto_hyperopt(mocker, hyperopt_conf, tmpdir, fee) -> None: | |||||||
|     assert hyperopt.backtesting.strategy.buy_rsi.value != 35 |     assert hyperopt.backtesting.strategy.buy_rsi.value != 35 | ||||||
|     assert hyperopt.backtesting.strategy.sell_rsi.value != 74 |     assert hyperopt.backtesting.strategy.sell_rsi.value != 74 | ||||||
|  |  | ||||||
|  |     hyperopt.custom_hyperopt.generate_estimator = lambda *args, **kwargs: 'ET1' | ||||||
|  |     with pytest.raises(OperationalException, match="Estimator ET1 not supported."): | ||||||
|  |         hyperopt.get_optimizer([], 2) | ||||||
|  |  | ||||||
|  |  | ||||||
| def test_SKDecimal(): | def test_SKDecimal(): | ||||||
|     space = SKDecimal(1, 2, decimals=2) |     space = SKDecimal(1, 2, decimals=2) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user