Skip to content

Commit e21047a

Browse files
authored
Merge pull request #1296 from automl/development
Development
2 parents bd049a5 + 7364c68 commit e21047a

File tree

17 files changed

+190
-54
lines changed

17 files changed

+190
-54
lines changed

autosklearn/__version__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
"""Version information."""
22

33
# The following line *must* be the last in the module, exactly as formatted:
4-
__version__ = "0.14.1"
4+
__version__ = "0.14.2"

autosklearn/evaluation/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import autosklearn.evaluation.train_evaluator
2525
import autosklearn.evaluation.test_evaluator
2626
import autosklearn.evaluation.util
27+
import autosklearn.pipeline.components
2728
from autosklearn.evaluation.train_evaluator import TYPE_ADDITIONAL_INFO
2829
from autosklearn.util.backend import Backend
2930
from autosklearn.util.logging_ import PickableLoggerAdapter, get_named_client_logger
@@ -336,6 +337,7 @@ def run(
336337
init_params=init_params,
337338
budget=budget,
338339
budget_type=self.budget_type,
340+
additional_components=autosklearn.pipeline.components.base._addons,
339341
)
340342

341343
if self.resampling_strategy != 'test':

autosklearn/evaluation/abstract_evaluator.py

+11
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import autosklearn.pipeline.classification
1818
import autosklearn.pipeline.regression
19+
from autosklearn.pipeline.components.base import ThirdPartyComponents, _addons
1920
from autosklearn.constants import (
2021
CLASSIFICATION_TASKS,
2122
REGRESSION_TASKS,
@@ -181,6 +182,7 @@ def __init__(
181182
backend: Backend,
182183
queue: multiprocessing.Queue,
183184
metric: Scorer,
185+
additional_components: Dict[str, ThirdPartyComponents],
184186
port: Optional[int],
185187
configuration: Optional[Union[int, Configuration]] = None,
186188
scoring_functions: Optional[List[Scorer]] = None,
@@ -268,6 +270,15 @@ def __init__(
268270
self.budget = budget
269271
self.budget_type = budget_type
270272

273+
# Add 3rd-party components to the list of 3rd-party components in case this wasn't done
274+
# before (this happens if we run in parallel and the components are only passed to the
275+
# AbstractEvaluator via the TAE and are not there yet because the worker is in its own
276+
# process).
277+
for key in additional_components:
278+
for component_name, component in additional_components[key].components.items():
279+
if component_name not in _addons[key].components:
280+
_addons[key].add_component(component)
281+
271282
# Please mypy to prevent not defined attr
272283
self.model = self._get_model()
273284

autosklearn/evaluation/test_evaluator.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
AbstractEvaluator,
1313
_fit_and_suppress_warnings,
1414
)
15+
from autosklearn.pipeline.components.base import ThirdPartyComponents
1516
from autosklearn.metrics import calculate_loss, Scorer
1617
from autosklearn.util.backend import Backend
1718

@@ -29,6 +30,7 @@ def __init__(
2930
backend: Backend,
3031
queue: multiprocessing.Queue,
3132
metric: Scorer,
33+
additional_components: Dict[str, ThirdPartyComponents],
3234
port: Optional[int],
3335
configuration: Optional[Union[int, Configuration]] = None,
3436
scoring_functions: Optional[List[Scorer]] = None,
@@ -44,6 +46,7 @@ def __init__(
4446
port=port,
4547
configuration=configuration,
4648
metric=metric,
49+
additional_components=additional_components,
4750
scoring_functions=scoring_functions,
4851
seed=seed,
4952
output_y_hat_optimization=False,
@@ -120,6 +123,7 @@ def eval_t(
120123
exclude: Optional[List[str]],
121124
disable_file_output: bool,
122125
port: Optional[int],
126+
additional_components: Dict[str, ThirdPartyComponents],
123127
init_params: Optional[Dict[str, Any]] = None,
124128
budget: Optional[float] = None,
125129
budget_type: Optional[str] = None,
@@ -131,6 +135,7 @@ def eval_t(
131135
scoring_functions=scoring_functions,
132136
include=include, exclude=exclude,
133137
disable_file_output=disable_file_output,
134-
init_params=init_params)
138+
additional_components=additional_components,
139+
init_params=init_params,)
135140

136141
evaluator.fit_predict_and_loss()

autosklearn/evaluation/train_evaluator.py

+15-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
SUPPORTED_TARGET_TYPES,
3636
)
3737
from autosklearn.pipeline.base import PIPELINE_DATA_DTYPE
38-
from autosklearn.pipeline.components.base import IterativeComponent
38+
from autosklearn.pipeline.components.base import IterativeComponent, ThirdPartyComponents
3939
from autosklearn.metrics import Scorer
4040
from autosklearn.util.backend import Backend
4141
from autosklearn.util.logging_ import PicklableClientLogger
@@ -160,6 +160,7 @@ def __init__(
160160
backend: Backend,
161161
queue: multiprocessing.Queue,
162162
metric: Scorer,
163+
additional_components: Dict[str, ThirdPartyComponents],
163164
port: Optional[int],
164165
configuration: Optional[Union[int, Configuration]] = None,
165166
scoring_functions: Optional[List[Scorer]] = None,
@@ -184,6 +185,7 @@ def __init__(
184185
port=port,
185186
configuration=configuration,
186187
metric=metric,
188+
additional_components=additional_components,
187189
scoring_functions=scoring_functions,
188190
seed=seed,
189191
output_y_hat_optimization=output_y_hat_optimization,
@@ -1163,6 +1165,7 @@ def eval_holdout(
11631165
exclude: Optional[List[str]],
11641166
disable_file_output: bool,
11651167
port: Optional[int],
1168+
additional_components: Dict[str, ThirdPartyComponents],
11661169
init_params: Optional[Dict[str, Any]] = None,
11671170
budget: Optional[float] = 100.0,
11681171
budget_type: Optional[str] = None,
@@ -1183,6 +1186,7 @@ def eval_holdout(
11831186
include=include,
11841187
exclude=exclude,
11851188
disable_file_output=disable_file_output,
1189+
additional_components=additional_components,
11861190
init_params=init_params,
11871191
budget=budget,
11881192
budget_type=budget_type,
@@ -1206,6 +1210,7 @@ def eval_iterative_holdout(
12061210
exclude: Optional[List[str]],
12071211
disable_file_output: bool,
12081212
port: Optional[int],
1213+
additional_components: Dict[str, ThirdPartyComponents],
12091214
init_params: Optional[Dict[str, Any]] = None,
12101215
budget: Optional[float] = 100.0,
12111216
budget_type: Optional[str] = None,
@@ -1227,6 +1232,7 @@ def eval_iterative_holdout(
12271232
instance=instance,
12281233
disable_file_output=disable_file_output,
12291234
iterative=True,
1235+
additional_components=additional_components,
12301236
init_params=init_params,
12311237
budget=budget,
12321238
budget_type=budget_type
@@ -1249,6 +1255,7 @@ def eval_partial_cv(
12491255
exclude: Optional[List[str]],
12501256
disable_file_output: bool,
12511257
port: Optional[int],
1258+
additional_components: Dict[str, ThirdPartyComponents],
12521259
init_params: Optional[Dict[str, Any]] = None,
12531260
budget: Optional[float] = None,
12541261
budget_type: Optional[str] = None,
@@ -1274,6 +1281,7 @@ def eval_partial_cv(
12741281
include=include,
12751282
exclude=exclude,
12761283
disable_file_output=disable_file_output,
1284+
additional_components=additional_components,
12771285
init_params=init_params,
12781286
budget=budget,
12791287
budget_type=budget_type,
@@ -1298,6 +1306,7 @@ def eval_partial_cv_iterative(
12981306
exclude: Optional[List[str]],
12991307
disable_file_output: bool,
13001308
port: Optional[int],
1309+
additional_components: Dict[str, ThirdPartyComponents],
13011310
init_params: Optional[Dict[str, Any]] = None,
13021311
budget: Optional[float] = None,
13031312
budget_type: Optional[str] = None,
@@ -1321,6 +1330,7 @@ def eval_partial_cv_iterative(
13211330
exclude=exclude,
13221331
disable_file_output=disable_file_output,
13231332
iterative=True,
1333+
additional_components=additional_components,
13241334
init_params=init_params,
13251335
)
13261336

@@ -1342,6 +1352,7 @@ def eval_cv(
13421352
exclude: Optional[List[str]],
13431353
disable_file_output: bool,
13441354
port: Optional[int],
1355+
additional_components: Dict[str, ThirdPartyComponents],
13451356
init_params: Optional[Dict[str, Any]] = None,
13461357
budget: Optional[float] = None,
13471358
budget_type: Optional[str] = None,
@@ -1362,6 +1373,7 @@ def eval_cv(
13621373
include=include,
13631374
exclude=exclude,
13641375
disable_file_output=disable_file_output,
1376+
additional_components=additional_components,
13651377
init_params=init_params,
13661378
budget=budget,
13671379
budget_type=budget_type,
@@ -1386,6 +1398,7 @@ def eval_iterative_cv(
13861398
exclude: Optional[List[str]],
13871399
disable_file_output: bool,
13881400
port: Optional[int],
1401+
additional_components: Dict[str, ThirdPartyComponents],
13891402
init_params: Optional[Dict[str, Any]] = None,
13901403
budget: Optional[float] = None,
13911404
budget_type: Optional[str] = None,
@@ -1406,6 +1419,7 @@ def eval_iterative_cv(
14061419
exclude=exclude,
14071420
disable_file_output=disable_file_output,
14081421
port=port,
1422+
additional_components=additional_components,
14091423
init_params=init_params,
14101424
budget=budget,
14111425
budget_type=budget_type,

autosklearn/pipeline/components/base.py

+3
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import inspect
44
import pkgutil
55
import sys
6+
from typing import Dict
67

78
from sklearn.base import BaseEstimator, TransformerMixin
89

910
from autosklearn.pipeline.constants import SPARSE
1011

12+
_addons = dict() # type: Dict[str, 'ThirdPartyComponents']
13+
1114

1215
def find_components(package, directory, base_class):
1316
components = OrderedDict()

autosklearn/pipeline/components/classification/__init__.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@
55
import os
66

77
from ..base import AutoSklearnClassificationAlgorithm, find_components, \
8-
ThirdPartyComponents, AutoSklearnChoice
8+
ThirdPartyComponents, AutoSklearnChoice, _addons
99
from ConfigSpace.configuration_space import ConfigurationSpace
1010
from ConfigSpace.hyperparameters import CategoricalHyperparameter
1111

1212
classifier_directory = os.path.split(__file__)[0]
1313
_classifiers = find_components(__package__,
1414
classifier_directory,
1515
AutoSklearnClassificationAlgorithm)
16-
_addons = ThirdPartyComponents(AutoSklearnClassificationAlgorithm)
16+
additional_components = ThirdPartyComponents(AutoSklearnClassificationAlgorithm)
17+
_addons['classification'] = additional_components
1718

1819

1920
def add_classifier(classifier: Type[AutoSklearnClassificationAlgorithm]) -> None:
20-
_addons.add_component(classifier)
21+
additional_components.add_component(classifier)
2122

2223

2324
class ClassifierChoice(AutoSklearnChoice):
@@ -26,7 +27,7 @@ class ClassifierChoice(AutoSklearnChoice):
2627
def get_components(cls):
2728
components = OrderedDict()
2829
components.update(_classifiers)
29-
components.update(_addons.components)
30+
components.update(additional_components.components)
3031
return components
3132

3233
def get_available_components(cls, dataset_properties=None,

autosklearn/pipeline/components/data_preprocessing/categorical_encoding/__init__.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,20 @@
1010
from sklearn.base import BaseEstimator
1111

1212
from ...base import AutoSklearnPreprocessingAlgorithm, find_components, \
13-
ThirdPartyComponents, AutoSklearnChoice
13+
ThirdPartyComponents, AutoSklearnChoice, _addons
1414

1515
from autosklearn.pipeline.base import DATASET_PROPERTIES_TYPE, PIPELINE_DATA_DTYPE
1616

1717
ohe_directory = os.path.split(__file__)[0]
1818
_ohes = find_components(__package__,
1919
ohe_directory,
2020
AutoSklearnPreprocessingAlgorithm)
21-
_addons = ThirdPartyComponents(AutoSklearnPreprocessingAlgorithm)
21+
additional_components = ThirdPartyComponents(AutoSklearnPreprocessingAlgorithm)
22+
_addons['data_preprocessing.categorical_encoding'] = additional_components
2223

2324

2425
def add_ohe(ohe: 'OHEChoice') -> None:
25-
_addons.add_component(ohe)
26+
additional_components.add_component(ohe)
2627

2728

2829
class OHEChoice(AutoSklearnChoice):
@@ -31,7 +32,7 @@ class OHEChoice(AutoSklearnChoice):
3132
def get_components(cls: BaseEstimator) -> Dict[str, BaseEstimator]:
3233
components: Dict[str, BaseEstimator] = OrderedDict()
3334
components.update(_ohes)
34-
components.update(_addons.components)
35+
components.update(additional_components.components)
3536
return components
3637

3738
def get_hyperparameter_search_space(

autosklearn/pipeline/components/data_preprocessing/minority_coalescense/__init__.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from ConfigSpace.hyperparameters import CategoricalHyperparameter
99

1010
from ...base import AutoSklearnPreprocessingAlgorithm, find_components, \
11-
ThirdPartyComponents, AutoSklearnChoice
11+
ThirdPartyComponents, AutoSklearnChoice, _addons
1212

1313
from sklearn.base import BaseEstimator
1414

@@ -17,11 +17,12 @@
1717
mc_directory = os.path.split(__file__)[0]
1818
_mcs = find_components(
1919
__package__, mc_directory, AutoSklearnPreprocessingAlgorithm)
20-
_addons = ThirdPartyComponents(AutoSklearnPreprocessingAlgorithm)
20+
additional_components = ThirdPartyComponents(AutoSklearnPreprocessingAlgorithm)
21+
_addons['data_preprocessing.minority_coalescense'] = additional_components
2122

2223

2324
def add_mc(mc: BaseEstimator) -> None:
24-
_addons.add_component(mc)
25+
additional_components.add_component(mc)
2526

2627

2728
class CoalescenseChoice(AutoSklearnChoice):
@@ -30,7 +31,7 @@ class CoalescenseChoice(AutoSklearnChoice):
3031
def get_components(cls: BaseEstimator) -> Dict[str, BaseEstimator]:
3132
components: Dict[str, BaseEstimator] = OrderedDict()
3233
components.update(_mcs)
33-
components.update(_addons.components)
34+
components.update(additional_components.components)
3435
return components
3536

3637
def get_hyperparameter_search_space(

autosklearn/pipeline/components/data_preprocessing/rescaling/__init__.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from sklearn.base import BaseEstimator
1010

1111
from ...base import AutoSklearnPreprocessingAlgorithm, find_components, \
12-
ThirdPartyComponents, AutoSklearnChoice
12+
ThirdPartyComponents, AutoSklearnChoice, _addons
1313
from autosklearn.pipeline.base import DATASET_PROPERTIES_TYPE, PIPELINE_DATA_DTYPE
1414
from autosklearn.pipeline.components.data_preprocessing.rescaling.abstract_rescaling import (
1515
Rescaling
@@ -19,11 +19,12 @@
1919
_rescalers = find_components(__package__,
2020
rescaling_directory,
2121
AutoSklearnPreprocessingAlgorithm)
22-
_addons = ThirdPartyComponents(AutoSklearnPreprocessingAlgorithm)
22+
additional_components = ThirdPartyComponents(AutoSklearnPreprocessingAlgorithm)
23+
_addons['data_preprocessing.rescaling'] = additional_components
2324

2425

2526
def add_rescaler(rescaler: Rescaling) -> None:
26-
_addons.add_component(rescaler)
27+
additional_components.add_component(rescaler)
2728

2829

2930
class RescalingChoice(AutoSklearnChoice):
@@ -32,7 +33,7 @@ class RescalingChoice(AutoSklearnChoice):
3233
def get_components(cls: BaseEstimator) -> Dict[str, BaseEstimator]:
3334
components: Dict[str, BaseEstimator] = OrderedDict()
3435
components.update(_rescalers)
35-
components.update(_addons.components)
36+
components.update(additional_components.components)
3637
return components
3738

3839
def get_hyperparameter_search_space(

autosklearn/pipeline/components/feature_preprocessing/__init__.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,20 @@
33
from typing import Type
44

55
from ..base import AutoSklearnPreprocessingAlgorithm, find_components, \
6-
ThirdPartyComponents, AutoSklearnChoice
6+
ThirdPartyComponents, AutoSklearnChoice, _addons
77
from ConfigSpace.configuration_space import ConfigurationSpace
88
from ConfigSpace.hyperparameters import CategoricalHyperparameter
99

1010
classifier_directory = os.path.split(__file__)[0]
1111
_preprocessors = find_components(__package__,
1212
classifier_directory,
1313
AutoSklearnPreprocessingAlgorithm)
14-
_addons = ThirdPartyComponents(AutoSklearnPreprocessingAlgorithm)
14+
additional_components = ThirdPartyComponents(AutoSklearnPreprocessingAlgorithm)
15+
_addons['feature_preprocessing'] = additional_components
1516

1617

1718
def add_preprocessor(preprocessor: Type[AutoSklearnPreprocessingAlgorithm]) -> None:
18-
_addons.add_component(preprocessor)
19+
additional_components.add_component(preprocessor)
1920

2021

2122
class FeaturePreprocessorChoice(AutoSklearnChoice):
@@ -24,7 +25,7 @@ class FeaturePreprocessorChoice(AutoSklearnChoice):
2425
def get_components(cls):
2526
components = OrderedDict()
2627
components.update(_preprocessors)
27-
components.update(_addons.components)
28+
components.update(additional_components.components)
2829
return components
2930

3031
def get_available_components(self, dataset_properties=None,

0 commit comments

Comments
 (0)