Skip to content

Commit c564494

Browse files
[ENH,REF] Unequal length collection transforms (#2903)
* move and update unequal transforms * unequal transforms * comment * better sorting * extra transform test * changes for review
1 parent 3dc043b commit c564494

File tree

33 files changed

+2151
-1465
lines changed

33 files changed

+2151
-1465
lines changed

.github/workflows/pr_examples.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: PR Examples
1+
name: PR examples
22

33
on:
44
push:

aeon/classification/compose/_pipeline.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,14 @@ class ClassifierPipeline(BaseCollectionPipeline, BaseClassifier):
6161
6262
Examples
6363
--------
64-
>>> from aeon.transformations.collection import Resizer
64+
>>> from aeon.transformations.collection.unequal_length import Resizer
6565
>>> from aeon.classification.convolution_based import RocketClassifier
6666
>>> from aeon.datasets import load_unit_test
6767
>>> from aeon.classification.compose import ClassifierPipeline
6868
>>> X_train, y_train = load_unit_test(split="train")
6969
>>> X_test, y_test = load_unit_test(split="test")
7070
>>> pipeline = ClassifierPipeline(
71-
... Resizer(length=10), RocketClassifier(n_kernels=50)
71+
... Resizer(resized_length=10), RocketClassifier(n_kernels=50)
7272
... )
7373
>>> pipeline.fit(X_train, y_train)
7474
ClassifierPipeline(...)
@@ -104,8 +104,8 @@ def _get_test_params(cls, parameter_set="default"):
104104
`MyClass(**params)` or `MyClass(**params[i])` creates a valid test instance.
105105
"""
106106
from aeon.classification.distance_based import KNeighborsTimeSeriesClassifier
107-
from aeon.transformations.collection import Truncator
108107
from aeon.transformations.collection.feature_based import SevenNumberSummary
108+
from aeon.transformations.collection.unequal_length import Truncator
109109

110110
return {
111111
"transformers": [

aeon/classification/compose/tests/test_pipeline.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,22 @@
2121
AutocorrelationFunctionTransformer,
2222
HOG1DTransformer,
2323
Normalizer,
24-
Padder,
2524
Tabularizer,
2625
)
2726
from aeon.transformations.collection.feature_based import SevenNumberSummary
27+
from aeon.transformations.collection.unequal_length import Padder
2828

2929

3030
@pytest.mark.parametrize(
3131
"transformers",
3232
[
33-
Padder(pad_length=15),
33+
Padder(padded_length=15),
3434
SevenNumberSummary(),
35-
[Padder(pad_length=15), Tabularizer(), StandardScaler()],
36-
[Padder(pad_length=15), SevenNumberSummary()],
35+
[Padder(padded_length=15), Tabularizer(), StandardScaler()],
36+
[Padder(padded_length=15), SevenNumberSummary()],
3737
[Tabularizer(), StandardScaler(), SevenNumberSummary()],
3838
[
39-
Padder(pad_length=15),
39+
Padder(padded_length=15),
4040
SevenNumberSummary(),
4141
],
4242
],
@@ -67,14 +67,14 @@ def test_classifier_pipeline(transformers):
6767
@pytest.mark.parametrize(
6868
"transformers",
6969
[
70-
[Padder(pad_length=15), Tabularizer()],
70+
[Padder(padded_length=15), Tabularizer()],
7171
SevenNumberSummary(),
7272
[Tabularizer(), StandardScaler()],
73-
[Padder(pad_length=15), Tabularizer(), StandardScaler()],
74-
[Padder(pad_length=15), SevenNumberSummary()],
73+
[Padder(padded_length=15), Tabularizer(), StandardScaler()],
74+
[Padder(padded_length=15), SevenNumberSummary()],
7575
[Tabularizer(), StandardScaler(), SevenNumberSummary()],
7676
[
77-
Padder(pad_length=15),
77+
Padder(padded_length=15),
7878
SevenNumberSummary(),
7979
],
8080
],

aeon/classification/tests/test_sklearn_compatability.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
from aeon.classification.interval_based import CanonicalIntervalForestClassifier
3737
from aeon.testing.data_generation import make_example_3d_numpy
38-
from aeon.transformations.collection import Resizer
38+
from aeon.transformations.collection.unequal_length import Resizer
3939

4040
# StratifiedGroupKFold(n_splits=2), removed because it is not available in sklearn 0.24
4141
CROSS_VALIDATION_METHODS = [
@@ -60,7 +60,7 @@
6060
COMPOSITE_ESTIMATORS = [
6161
Pipeline(
6262
[
63-
("transform", Resizer(length=10)),
63+
("transform", Resizer(resized_length=10)),
6464
("clf", CanonicalIntervalForestClassifier._create_test_instance()),
6565
]
6666
),

aeon/clustering/compose/_pipeline.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ class ClustererPipeline(BaseCollectionPipeline, BaseClusterer):
6060
6161
Examples
6262
--------
63-
>>> from aeon.transformations.collection import Resizer
63+
>>> from aeon.transformations.collection.unequal_length import Resizer
6464
>>> from aeon.clustering import TimeSeriesKMeans
6565
>>> from aeon.datasets import load_unit_test
6666
>>> from aeon.clustering.compose import ClustererPipeline
6767
>>> X_train, y_train = load_unit_test(split="train")
6868
>>> X_test, y_test = load_unit_test(split="test")
6969
>>> pipeline = ClustererPipeline(
70-
... Resizer(length=10), TimeSeriesKMeans._create_test_instance()
70+
... Resizer(resized_length=10), TimeSeriesKMeans._create_test_instance()
7171
... )
7272
>>> pipeline.fit(X_train, y_train)
7373
ClustererPipeline(...)
@@ -108,8 +108,8 @@ def _get_test_params(cls, parameter_set="default"):
108108
`MyClass(**params)` or `MyClass(**params[i])` creates a valid test instance.
109109
"""
110110
from aeon.clustering import TimeSeriesKMeans
111-
from aeon.transformations.collection import Truncator
112111
from aeon.transformations.collection.feature_based import SevenNumberSummary
112+
from aeon.transformations.collection.unequal_length import Truncator
113113

114114
return {
115115
"transformers": [

aeon/clustering/compose/tests/test_pipeline.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,22 @@
1919
AutocorrelationFunctionTransformer,
2020
HOG1DTransformer,
2121
Normalizer,
22-
Padder,
2322
Tabularizer,
2423
)
2524
from aeon.transformations.collection.feature_based import SevenNumberSummary
25+
from aeon.transformations.collection.unequal_length import Padder
2626

2727

2828
@pytest.mark.parametrize(
2929
"transformers",
3030
[
31-
Padder(pad_length=15),
31+
Padder(padded_length=15),
3232
SevenNumberSummary(),
33-
[Padder(pad_length=15), Tabularizer(), StandardScaler()],
34-
[Padder(pad_length=15), SevenNumberSummary()],
33+
[Padder(padded_length=15), Tabularizer(), StandardScaler()],
34+
[Padder(padded_length=15), SevenNumberSummary()],
3535
[Tabularizer(), StandardScaler(), SevenNumberSummary()],
3636
[
37-
Padder(pad_length=15),
37+
Padder(padded_length=15),
3838
SevenNumberSummary(),
3939
],
4040
],
@@ -66,14 +66,14 @@ def test_clusterer_pipeline(transformers):
6666
@pytest.mark.parametrize(
6767
"transformers",
6868
[
69-
[Padder(pad_length=15), Tabularizer()],
69+
[Padder(padded_length=15), Tabularizer()],
7070
SevenNumberSummary(),
7171
[Tabularizer(), StandardScaler()],
72-
[Padder(pad_length=15), Tabularizer(), StandardScaler()],
73-
[Padder(pad_length=15), SevenNumberSummary()],
72+
[Padder(padded_length=15), Tabularizer(), StandardScaler()],
73+
[Padder(padded_length=15), SevenNumberSummary()],
7474
[Tabularizer(), StandardScaler(), SevenNumberSummary()],
7575
[
76-
Padder(pad_length=15),
76+
Padder(padded_length=15),
7777
SevenNumberSummary(),
7878
],
7979
],

aeon/pipeline/tests/test_make_pipeline.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,22 @@
1212
from aeon.pipeline import make_pipeline
1313
from aeon.regression import DummyRegressor
1414
from aeon.testing.data_generation import make_example_3d_numpy
15-
from aeon.transformations.collection import Padder, Tabularizer
15+
from aeon.transformations.collection import Tabularizer
1616
from aeon.transformations.collection.feature_based import SevenNumberSummary
17+
from aeon.transformations.collection.unequal_length import Padder
1718

1819

1920
@pytest.mark.parametrize(
2021
"pipeline",
2122
[
22-
[Padder(pad_length=15), DummyClassifier()],
23+
[Padder(padded_length=15), DummyClassifier()],
2324
[SevenNumberSummary(), RandomForestClassifier(n_estimators=2)],
24-
[Padder(pad_length=15), DummyRegressor()],
25+
[Padder(padded_length=15), DummyRegressor()],
2526
[SevenNumberSummary(), RandomForestRegressor(n_estimators=2)],
26-
[Padder(pad_length=15), TimeSeriesKMeans._create_test_instance()],
27+
[Padder(padded_length=15), TimeSeriesKMeans._create_test_instance()],
2728
[SevenNumberSummary(), KMeans(n_clusters=2, max_iter=3)],
28-
[Padder(pad_length=15), SevenNumberSummary()],
29-
[Padder(pad_length=15), Tabularizer(), StandardScaler()],
29+
[Padder(padded_length=15), SevenNumberSummary()],
30+
[Padder(padded_length=15), Tabularizer(), StandardScaler()],
3031
],
3132
)
3233
def test_make_pipeline(pipeline):

aeon/regression/compose/_pipeline.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ def _get_test_params(cls, parameter_set="default"):
9999
`MyClass(**params)` or `MyClass(**params[i])` creates a valid test instance.
100100
"""
101101
from aeon.regression.distance_based import KNeighborsTimeSeriesRegressor
102-
from aeon.transformations.collection import Truncator
103102
from aeon.transformations.collection.feature_based import SevenNumberSummary
103+
from aeon.transformations.collection.unequal_length import Truncator
104104

105105
return {
106106
"transformers": [

aeon/regression/compose/tests/test_pipeline.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,22 @@
2121
AutocorrelationFunctionTransformer,
2222
HOG1DTransformer,
2323
Normalizer,
24-
Padder,
2524
Tabularizer,
2625
)
2726
from aeon.transformations.collection.feature_based import SevenNumberSummary
27+
from aeon.transformations.collection.unequal_length import Padder
2828

2929

3030
@pytest.mark.parametrize(
3131
"transformers",
3232
[
33-
Padder(pad_length=15),
33+
Padder(padded_length=15),
3434
SevenNumberSummary(),
35-
[Padder(pad_length=15), Tabularizer(), StandardScaler()],
36-
[Padder(pad_length=15), SevenNumberSummary()],
35+
[Padder(padded_length=15), Tabularizer(), StandardScaler()],
36+
[Padder(padded_length=15), SevenNumberSummary()],
3737
[Tabularizer(), StandardScaler(), SevenNumberSummary()],
3838
[
39-
Padder(pad_length=15),
39+
Padder(padded_length=15),
4040
SevenNumberSummary(),
4141
],
4242
],
@@ -67,14 +67,14 @@ def test_regressor_pipeline(transformers):
6767
@pytest.mark.parametrize(
6868
"transformers",
6969
[
70-
[Padder(pad_length=15), Tabularizer()],
70+
[Padder(padded_length=15), Tabularizer()],
7171
SevenNumberSummary(),
7272
[Tabularizer(), StandardScaler()],
73-
[Padder(pad_length=15), Tabularizer(), StandardScaler()],
74-
[Padder(pad_length=15), SevenNumberSummary()],
73+
[Padder(padded_length=15), Tabularizer(), StandardScaler()],
74+
[Padder(padded_length=15), SevenNumberSummary()],
7575
[Tabularizer(), StandardScaler(), SevenNumberSummary()],
7676
[
77-
Padder(pad_length=15),
77+
Padder(padded_length=15),
7878
SevenNumberSummary(),
7979
],
8080
],

aeon/testing/estimator_checking/_yield_transformation_checks.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@ def check_transformer_output(estimator, datatype):
169169
Xt2 = _run_estimator_method(estimator, "fit_transform", datatype, "train")
170170
assert deep_equals(Xt, Xt2, ignore_index=True)
171171

172+
Xt3 = _run_estimator_method(estimator, "transform", datatype, "train")
173+
assert deep_equals(Xt, Xt3, ignore_index=True)
174+
172175

173176
def check_channel_selectors(estimator, datatype):
174177
"""Test channel selectors have fit and select at least one channel."""

0 commit comments

Comments
 (0)