diff --git a/skpro/model_selection/_tuning.py b/skpro/model_selection/_tuning.py index 84f50dc07..d2a48b8cc 100644 --- a/skpro/model_selection/_tuning.py +++ b/skpro/model_selection/_tuning.py @@ -8,6 +8,7 @@ import pandas as pd from sklearn.model_selection import ParameterGrid, ParameterSampler, check_cv +from skpro.metrics import CRPS from skpro.benchmarking.evaluate import evaluate from skpro.regression.base._delegate import _DelegatedProbaRegressor from skpro.utils.parallel import parallelize @@ -156,6 +157,8 @@ def _fit(self, X, y, C=None): # scoring = check_scoring(self.scoring, obj=self) scoring = self.scoring + if scoring is None: + scoring = CRPS() scoring_name = f"test_{scoring.name}" backend = self.backend @@ -631,6 +634,8 @@ def get_test_params(cls, parameter_set="default"): "scoring": PinballLoss(), "error_score": "raise", } + param_no_backend = {**param1, "backend": "None"} + params = [param1, param2, params3, param_no_backend] from skpro.regression.online._refit import OnlineRefit @@ -832,6 +837,7 @@ def __init__( verbose=0, return_n_best_estimators=1, random_state=None, + backend="loky", error_score=np.nan, backend_params=None, update_behaviour="no_update", @@ -843,6 +849,7 @@ def __init__( cv=cv, verbose=verbose, return_n_best_estimators=return_n_best_estimators, + backend=backend, error_score=error_score, backend_params=backend_params, update_behaviour=update_behaviour, @@ -906,6 +913,8 @@ def get_test_params(cls, parameter_set="default"): "scoring": PinballLoss(), "error_score": "raise", } + param_no_backend = {**param1, "backend": "None"} + params = [param1, param2, params3, param_no_backend] from skpro.regression.online._refit import OnlineRefit diff --git a/skpro/model_selection/tests/__init__.py b/skpro/model_selection/tests/__init__.py new file mode 100644 index 000000000..90ba1208e --- /dev/null +++ b/skpro/model_selection/tests/__init__.py @@ -0,0 +1 @@ +"""Tests for model selection utilities.""" \ No newline at end of file diff --git a/skpro/model_selection/tests/test_tuning.py b/skpro/model_selection/tests/test_tuning.py new file mode 100644 index 000000000..7adaaee85 --- /dev/null +++ b/skpro/model_selection/tests/test_tuning.py @@ -0,0 +1,37 @@ +"""Tests for model selection tuning utilities.""" + +import pandas as pd +import pytest +from sklearn.model_selection import KFold + +from skpro.model_selection import GridSearchCV, RandomizedSearchCV +from skpro.regression.dummy import DummyProbaRegressor +from skpro.tests.test_switch import run_test_module_changed + + +def _get_test_data(): + X = pd.DataFrame({"x": [1, 2, 3, 4]}) + y = pd.DataFrame({"y": [1.0, 2.0, 3.0, 4.0]}) + return X, y + + +@pytest.mark.skipif( + not run_test_module_changed("skpro.model_selection"), + reason="Test only if skpro.model_selection has been changed", +) +def test_randomizedsearch_accepts_backend_argument(): + """RandomizedSearchCV should accept backend argument documented in API.""" + X, y = _get_test_data() + + rscv = RandomizedSearchCV( + estimator=DummyProbaRegressor(), + cv=KFold(n_splits=2), + param_distributions={"strategy": ["empirical"]}, + n_iter=1, + scoring=None, + backend="threading", + backend_params={"n_jobs": 1}, + ) + rscv.fit(X, y) + + assert rscv.backend == "threading" \ No newline at end of file