From 015a3253cf4251d01b37f50db0d4414178a43efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franz=20Kir=C3=A1ly?= Date: Fri, 19 Sep 2025 14:35:52 +0200 Subject: [PATCH 1/5] fix tuner --- src/hyperactive/experiment/integrations/_skl_metrics.py | 3 +++ src/hyperactive/integrations/sktime/_classification.py | 7 +------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/hyperactive/experiment/integrations/_skl_metrics.py b/src/hyperactive/experiment/integrations/_skl_metrics.py index eafb8dde..9fec7fc4 100644 --- a/src/hyperactive/experiment/integrations/_skl_metrics.py +++ b/src/hyperactive/experiment/integrations/_skl_metrics.py @@ -71,6 +71,9 @@ def _coerce_to_scorer(scoring, estimator): scorer = scoring # passthrough scorer signature else: scorer = make_scorer(scoring) + elif isinstance(estimator, str): + metric = _default_metric_for(estimator) + scorer = make_scorer(metric) else: # string (scorer name) scorer = check_scoring(estimator, scoring=scoring) diff --git a/src/hyperactive/integrations/sktime/_classification.py b/src/hyperactive/integrations/sktime/_classification.py index 72674c57..93c4ca41 100644 --- a/src/hyperactive/integrations/sktime/_classification.py +++ b/src/hyperactive/integrations/sktime/_classification.py @@ -237,14 +237,9 @@ class labels for fitting estimator = self.estimator.clone() - # use dummy classifier from sklearn to get default coercion behaviour - # for classificatoin metrics - scoring = check_scoring(DummyClassifier(), self.scoring) - # scoring_name = f"test_{scoring.name}" - experiment = SktimeClassificationExperiment( estimator=estimator, - scoring=scoring, + scoring=self.scoring, cv=self.cv, X=X, y=y, From 12d0665403f6947570995e245d86de19a4e92657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franz=20Kir=C3=A1ly?= Date: Fri, 19 Sep 2025 14:56:07 +0200 Subject: [PATCH 2/5] Update test_sktime_estimators.py --- .../integrations/sktime/tests/test_sktime_estimators.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hyperactive/integrations/sktime/tests/test_sktime_estimators.py b/src/hyperactive/integrations/sktime/tests/test_sktime_estimators.py index 1ac4bd77..eeed78d3 100644 --- a/src/hyperactive/integrations/sktime/tests/test_sktime_estimators.py +++ b/src/hyperactive/integrations/sktime/tests/test_sktime_estimators.py @@ -5,9 +5,9 @@ from skbase.utils.dependencies import _check_soft_dependencies if _check_soft_dependencies("sktime", severity="none"): - from hyperactive.integrations.sktime import ForecastingOptCV + from hyperactive.integrations.sktime import ForecastingOptCV, TSCOptCV - EST_TO_TEST = [ForecastingOptCV] + EST_TO_TEST = [ForecastingOptCV, TSCOptCV] else: EST_TO_TEST = [] From 5787db705a097605975aedae381968fb98ca07ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franz=20Kir=C3=A1ly?= Date: Fri, 19 Sep 2025 15:01:15 +0200 Subject: [PATCH 3/5] Update _classification.py --- src/hyperactive/integrations/sktime/_classification.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/hyperactive/integrations/sktime/_classification.py b/src/hyperactive/integrations/sktime/_classification.py index 93c4ca41..4add3c43 100644 --- a/src/hyperactive/integrations/sktime/_classification.py +++ b/src/hyperactive/integrations/sktime/_classification.py @@ -232,9 +232,6 @@ class labels for fitting ------- self : Reference to self. """ - from sklearn.dummy import DummyClassifier - from sklearn.metrics import check_scoring - estimator = self.estimator.clone() experiment = SktimeClassificationExperiment( From c50dc4d8226aa41937ea9a598443a6314711d7c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franz=20Kir=C3=A1ly?= Date: Fri, 19 Sep 2025 15:51:48 +0200 Subject: [PATCH 4/5] Update _classification.py --- src/hyperactive/integrations/sktime/_classification.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hyperactive/integrations/sktime/_classification.py b/src/hyperactive/integrations/sktime/_classification.py index 4add3c43..0ada5dc2 100644 --- a/src/hyperactive/integrations/sktime/_classification.py +++ b/src/hyperactive/integrations/sktime/_classification.py @@ -329,10 +329,10 @@ def get_test_params(cls, parameter_set="default"): "scoring": accuracy_score, } params_hillclimb = { - "estimator": DummyClassifier(strategy="stratified"), + "estimator": DummyClassifier(strategy="constant"), "cv": KFold(n_splits=2, shuffle=False), "optimizer": HillClimbing( - search_space={"strategy": ["most_frequent", "stratified"]}, + search_space={"constant": [0, 3.14159, 2.718, 42]}, n_iter=10, n_neighbours=5, ), From 3dc37ad558327e07953d1e4487b67be9a31f6c2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franz=20Kir=C3=A1ly?= Date: Fri, 19 Sep 2025 16:07:53 +0200 Subject: [PATCH 5/5] Update _classification.py --- src/hyperactive/integrations/sktime/_classification.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hyperactive/integrations/sktime/_classification.py b/src/hyperactive/integrations/sktime/_classification.py index 0ada5dc2..af577071 100644 --- a/src/hyperactive/integrations/sktime/_classification.py +++ b/src/hyperactive/integrations/sktime/_classification.py @@ -308,6 +308,7 @@ def get_test_params(cls, parameter_set="default"): """ from sklearn.metrics import accuracy_score from sklearn.model_selection import KFold + from sktime.classification.distance_based import KNeighborsTimeSeriesClassifier from sktime.classification.dummy import DummyClassifier from hyperactive.opt.gfo import HillClimbing @@ -329,10 +330,10 @@ def get_test_params(cls, parameter_set="default"): "scoring": accuracy_score, } params_hillclimb = { - "estimator": DummyClassifier(strategy="constant"), + "estimator": KNeighborsTimeSeriesClassifier(), "cv": KFold(n_splits=2, shuffle=False), "optimizer": HillClimbing( - search_space={"constant": [0, 3.14159, 2.718, 42]}, + search_space={"n_neighbors": [1, 2, 4]}, n_iter=10, n_neighbours=5, ),