3
3
Learning shapelet classifier that simply wraps the LearningShapelet class from tslearn.
4
4
"""
5
5
6
+ __maintainer__ = ["MatthewMiddlehurst" ]
6
7
__all__ = ["LearningShapeletClassifier" ]
7
8
9
+
8
10
import numpy as np
9
11
10
12
from aeon .classification .base import BaseClassifier
@@ -31,67 +33,66 @@ class LearningShapeletClassifier(BaseClassifier):
31
33
32
34
Parameters
33
35
----------
34
- n_shapelets_per_size: dict ( default: None)
36
+ n_shapelets_per_size: dict, default= None
35
37
Dictionary giving, for each shapelet size (key),
36
38
the number of such shapelets to be trained (value).
37
39
If None, `grabocka_params_to_shapelet_size_dict` is used and the
38
40
size used to compute is that of the shortest time series passed at fit
39
41
time.
40
-
41
- max_iter: int (default: 10,000)
42
+ max_iter: int, default=10000
42
43
Number of training epochs.
43
-
44
- batch_size: int (default: 256)
44
+ batch_size: int, default=256
45
45
Batch size to be used.
46
-
47
- verbose: {0, 1, 2} (default: 0)
46
+ verbose: {0, 1, 2}, default=0
48
47
`keras` verbose level.
49
-
50
- optimizer: str or keras.optimizers.Optimizer (default: "sgd")
48
+ optimizer: str or keras.optimizers.Optimizer, default="sgd"
51
49
`keras` optimizer to use for training.
52
-
53
- weight_regularizer: float or None (default: 0.)
50
+ weight_regularizer: float or None, default=0.0
54
51
Strength of the L2 regularizer to use for training the classification
55
52
(softmax) layer. If 0, no regularization is performed.
56
-
57
- shapelet_length: float (default: 0.15)
53
+ shapelet_length: float, default=0.15
58
54
The length of the shapelets, expressed as a fraction of the time
59
55
series length.
60
56
Used only if `n_shapelets_per_size` is None.
61
-
62
- total_lengths: int (default: 3)
57
+ total_lengths: int, default=3
63
58
The number of different shapelet lengths. Will extract shapelets of
64
59
length i * shapelet_length for i in [1, total_lengths]
65
60
Used only if `n_shapelets_per_size` is None.
66
-
67
- max_size: int or None (default: None)
61
+ max_size: int or None, default=None
68
62
Maximum size for time series to be fed to the model. If None, it is
69
63
set to the size (number of timestamps) of the training time series.
70
-
71
- scale: bool (default: False)
64
+ scale: bool, default=False
72
65
Whether input data should be scaled for each feature of each time
73
- series to lie in the [0-1] interval.
74
- Default for this parameter is set to `False` in version 0.4 to ensure
75
- backward compatibility, but is likely to change in a future version.
76
-
77
- random_state : int or None, optional (default: None)
66
+ series to lie in the [0-1] interval. Default for this parameter is set to
67
+ `False`.
68
+ random_state : int or None, default=None
78
69
The seed of the pseudo random number generator to use when shuffling
79
70
the data. If int, random_state is the seed used by the random number
80
71
generator; If None, the random number generator is the RandomState
81
72
instance used by `np.random`.
82
73
83
74
References
84
75
----------
85
- .. [1] J. Grabocka et al. Learning Time-Series Shapelets. SIGKDD 2014.
86
-
76
+ .. Grabocka, J., Schilling, N., Wistuba, M. and Schmidt-Thieme, L., 2014, August.
77
+ Learning time-series shapelets. In Proceedings of the 20th ACM SIGKDD
78
+ international conference on Knowledge discovery and data mining (pp. 392-401).
79
+
80
+ Examples
81
+ --------
82
+ >>> from aeon.classification.shapelet_based import LearningShapeletClassifier
83
+ >>> from aeon.testing.utils.data_gen import make_example_3d_numpy
84
+ >>> X, y = make_example_3d_numpy(random_state=0)
85
+ >>> clf = LearningShapeletClassifier(max_iter=50, random_state=0) # doctest: +SKIP
86
+ >>> clf.fit(X, y) # doctest: +SKIP
87
+ MrSQMClassifier(...)
88
+ >>> clf.predict(X) # doctest: +SKIP
87
89
"""
88
90
89
91
_tags = {
90
92
"capability:multivariate" : True ,
91
93
"algorithm_type" : "shapelet" ,
92
94
"cant-pickle" : True ,
93
- "python_dependencies" : "tensorflow" ,
94
- "python_version" : "<3.10" ,
95
+ "python_dependencies" : ["tslearn" , "tensorflow" ],
95
96
}
96
97
97
98
def __init__ (
@@ -108,7 +109,6 @@ def __init__(
108
109
scale = False ,
109
110
random_state = None ,
110
111
):
111
- super ().__init__ ()
112
112
self .n_shapelets_per_size = n_shapelets_per_size
113
113
self .max_iter = max_iter
114
114
self .batch_size = batch_size
@@ -121,6 +121,8 @@ def __init__(
121
121
self .scale = scale
122
122
self .random_state = random_state
123
123
124
+ super ().__init__ ()
125
+
124
126
def _fit (self , X , y ):
125
127
from tslearn .shapelets import LearningShapelets
126
128
@@ -149,37 +151,37 @@ def _predict_proba(self, X) -> np.ndarray:
149
151
_X_transformed = _X_transformed_tslearn (X )
150
152
return self .clf_ .predict_proba (_X_transformed )
151
153
152
- def transform (self , X ):
153
- """Generate shapelet transform for a set of time series.
154
-
155
- Parameters
156
- ----------
157
- X : array-like of shape=(n_ts, sz, d)
158
- Time series dataset.
159
-
160
- Returns
161
- -------
162
- array of shape=(n_ts, n_shapelets)
163
- Shapelet-Transform of the provided time series.
164
- """
165
- _X_transformed = _X_transformed_tslearn (X )
166
- return self .clf_ .transform (_X_transformed )
167
-
168
- def locate (self , X ):
169
- """Compute shapelet match location for a set of time series.
170
-
171
- Parameters
172
- ----------
173
- X : array-like of shape=(n_ts, sz, d)
174
- Time series dataset.
175
-
176
- Returns
177
- -------
178
- array of shape=(n_ts, n_shapelets)
179
- Location of the shapelet matches for the provided time series.
180
- """
181
- _X_transformed = _X_transformed_tslearn (X )
182
- return self .clf_ .locate (_X_transformed )
154
+ # def transform(self, X):
155
+ # """Generate shapelet transform for a set of time series.
156
+ #
157
+ # Parameters
158
+ # ----------
159
+ # X : array-like of shape=(n_ts, sz, d)
160
+ # Time series dataset.
161
+ #
162
+ # Returns
163
+ # -------
164
+ # array of shape=(n_ts, n_shapelets)
165
+ # Shapelet-Transform of the provided time series.
166
+ # """
167
+ # _X_transformed = _X_transformed_tslearn(X)
168
+ # return self.clf_.transform(_X_transformed)
169
+ #
170
+ # def locate(self, X):
171
+ # """Compute shapelet match location for a set of time series.
172
+ #
173
+ # Parameters
174
+ # ----------
175
+ # X : array-like of shape=(n_ts, sz, d)
176
+ # Time series dataset.
177
+ #
178
+ # Returns
179
+ # -------
180
+ # array of shape=(n_ts, n_shapelets)
181
+ # Location of the shapelet matches for the provided time series.
182
+ # """
183
+ # _X_transformed = _X_transformed_tslearn(X)
184
+ # return self.clf_.locate(_X_transformed)
183
185
184
186
@classmethod
185
187
def get_test_params (cls , parameter_set = "default" ):
@@ -203,4 +205,4 @@ def get_test_params(cls, parameter_set="default"):
203
205
`MyClass(**params)` or `MyClass(**params[i])` creates a valid test instance.
204
206
`create_test_instance` uses the first (or only) dictionary in `params`.
205
207
"""
206
- return {"n_shapelets_per_size " : None , "shapelet_length " : 0.15 , "max_iter" : 50 }
208
+ return {"max_iter " : 50 , "batch_size " : 10 }
0 commit comments