diff --git a/bayes_opt/parameter.py b/bayes_opt/parameter.py index 1bc2e0b1..a8955e5b 100644 --- a/bayes_opt/parameter.py +++ b/bayes_opt/parameter.py @@ -489,7 +489,10 @@ def __call__(self, X: Any, Y: Any = None, eval_gradient: bool = False) -> Any: def __reduce__(self) -> str | tuple[Any, ...]: return (wrap_kernel, (kernel, transform)) - return WrappedKernel(**kernel.get_params()) + wrapped_instance = WrappedKernel.__new__(WrappedKernel) + wrapped_instance.__dict__.update(kernel.__dict__) + wrapped_instance._transform = transform + return wrapped_instance def _copy_signature(source_fct: Callable[..., Any]) -> Callable[[Callable[..., Any]], Callable[..., Any]]: diff --git a/tests/test_parameter.py b/tests/test_parameter.py index b2394a45..752656de 100644 --- a/tests/test_parameter.py +++ b/tests/test_parameter.py @@ -244,3 +244,17 @@ def test_wrapped_kernel_fit(): gp.fit(space.params, space.target) assert gp.kernel_.length_scale != 1e5 + + +def test_combined_wrapped_kernel_fit(): + pbounds = {"p1": (0, 1), "p2": (1, 10, int)} + space = TargetSpace(None, pbounds) + + space.register(space.random_sample(0), 1.0) + space.register(space.random_sample(1), 5.0) + + kernel_fct = kernels.Matern(nu=2.5, length_scale=1e5) + kernels.WhiteKernel(noise_level=1.0) + kernel = wrap_kernel(kernel_fct, space.kernel_transform) + gp = GaussianProcessRegressor(kernel=kernel, alpha=1e-6, n_restarts_optimizer=5) + + gp.fit(space.params, space.target)