TimeSeriesCLARA¶
- class TimeSeriesCLARA(n_clusters: int = 8, init: str | ndarray = 'random', distance: str | Callable = 'msm', n_samples: int | None = None, n_sampling_iters: int = 10, n_init: int = 1, max_iter: int = 300, tol: float = 1e-06, verbose: bool = False, random_state: int | RandomState | None = None, distance_params: dict | None = None)[source]¶
Bases:
BaseClustererTime series CLARA implementation.
Clustering LARge Applications (CLARA) [1] is a clustering algorithm that samples the dataset, applies PAM to the sample, and then uses the medoids from the sample to seed PAM on the entire dataset.
For a comparison of using CLARA for time series compared to other k-medoids algorithms see [2].
- Parameters:
- n_clustersint, default=8
The number of clusters to form as well as the number of centroids to generate.
- initstr or np.ndarray, default=’random’
Method for initialising cluster centers. Any of the following are valid: [‘kmedoids++’, ‘random’, ‘first’]. Random is the default as it is very fast and it was found in [2] to perform about as well as the other methods. Kmedoids++ is a variant of kmeans++ [4] and is slower but often more accurate than random. It works by choosing centroids that are distant from one another. First is the fastest method and simply chooses the first k time series as centroids. If a np.ndarray provided it must be of shape (n_clusters,) and contain the indexes of the time series to use as centroids.
- distancestr or Callable, default=’msm’
Distance method to compute similarity between time series. A list of valid strings for metrics can be found in the documentation for
aeon.distances.get_distance_function. If a callable is passed it must be a function that takes two 2d numpy arrays as input and returns a float.- n_samplesint, default=None,
Number of samples to sample from the dataset. If None, then min(n_cases, 40 + 2 * n_clusters) is used.
- n_sampling_itersint, default=5,
Number of different subsets of samples to try. The best subset cluster centers are used.
- n_initint, default=5
Number of times the PAM algorithm will be run with different centroid seeds. The final result will be the best output of n_init consecutive runs in terms of inertia.
- max_iterint, default=300
Maximum number of iterations of the PAM algorithm for a single run.
- tolfloat, default=1e-6
Relative tolerance with regards to Frobenius norm of the difference in the cluster centers of two consecutive iterations to declare convergence.
- verbosebool, default=False
Verbosity mode.
- random_stateint, np.random.RandomState instance or None, default=None
Determines random number generation for centroid initialization. If int, random_state is the seed used by the random number generator; If np.random.RandomState instance, random_state is the random number generator; If None, the random number generator is the RandomState instance used by np.random.
- distance_paramsdict, default=None
Dictionary containing kwargs for the distance method being used.
- Attributes:
- cluster_centers_np.ndarray, of shape (n_cases, n_channels, n_timepoints)
A collection of time series instances that represent the cluster centers.
- labels_np.ndarray (1d array of shape (n_case,))
Labels that is the index each time series belongs to.
- inertia_float
Sum of squared distances of samples to their closest cluster center, weighted by the sample weights if provided.
- n_iter_int
Number of iterations run.
Notes
Capabilities ¶ Missing Values
No
Multithreading
No
Univariate
Yes
Multivariate
Yes
Unequal Length
No
References
[1]Kaufman, Leonard & Rousseeuw, Peter. (1986). Clustering Large Data Sets.
10.1016/B978-0-444-87877-9.50039-X.
[2]Holder, Christopher & Guijo-Rubio, David & Bagnall, Anthony. (2023).
Clustering time series with k-medoids based algorithms. In proceedings of the 8th Workshop on Advanced Analytics and Learning on Temporal Data (AALTD 2023).
Examples
>>> from aeon.clustering import TimeSeriesCLARA >>> from aeon.datasets import load_basic_motions >>> # Load data >>> X_train, y_train = load_basic_motions(split="TRAIN")[0:10] >>> X_test, y_test = load_basic_motions(split="TEST")[0:10] >>> # Example of PAM clustering >>> km = TimeSeriesCLARA(n_clusters=3, distance="euclidean", random_state=1) >>> km.fit(X_train) TimeSeriesCLARA(distance='euclidean', n_clusters=3, random_state=1) >>> preds = km.predict(X_test)
Methods
clone([random_state])Obtain a clone of the object with the same hyperparameters.
fit(X[, y])Fit time series clusterer to training data.
fit_predict(X[, y])Compute cluster centers and predict cluster index for each time series.
get_class_tag(tag_name[, raise_error, ...])Get tag value from estimator class (only class tags).
Get class tags from estimator class and all its parent classes.
get_fitted_params([deep])Get fitted parameters.
get_params([deep])Get parameters for this estimator.
get_tag(tag_name[, raise_error, ...])Get tag value from estimator class.
get_tags()Get tags from estimator.
predict(X)Predict the closest cluster each sample in X belongs to.
Predicts labels probabilities for sequences in X.
reset([keep])Reset the object to a clean post-init state.
set_params(**params)Set the parameters of this estimator.
set_tags(**tag_dict)Set dynamic tags to given values.
- clone(random_state=None)[source]¶
Obtain a clone of the object with the same hyperparameters.
A clone is a different object without shared references, in post-init state. This function is equivalent to returning
sklearn.cloneofself. Equal in value totype(self)(**self.get_params(deep=False)).- Parameters:
- random_stateint, RandomState instance, or None, default=None
Sets the random state of the clone. If
None, the random state is not set. Ifint,random_stateis the seed used by the random number generator. IfRandomStateinstance,random_stateis the random number generator.
- Returns:
- estimatorobject
Instance of
type(self), clone of self (see above)
- fit(X, y=None) BaseCollectionEstimator[source]¶
Fit time series clusterer to training data.
- Parameters:
- X3D np.ndarray (any number of channels, equal length series)
of shape (n_cases, n_channels, n_timepoints)
- or 2D np.array (univariate, equal length series)
of shape (n_cases, n_timepoints)
- or list of numpy arrays (any number of channels, unequal length series)
of shape [n_cases], 2D np.array (n_channels, n_timepoints_i), where n_timepoints_i is length of series i
other types are allowed and converted into one of the above.
- y: ignored, exists for API consistency reasons.
- Returns:
- self:
Fitted estimator.
- fit_predict(X, y=None) ndarray[source]¶
Compute cluster centers and predict cluster index for each time series.
Convenience method; equivalent of calling fit(X) followed by predict(X)
- Parameters:
- Xnp.ndarray (2d or 3d array of shape (n_cases, n_timepoints) or shape
(n_cases, n_channels, n_timepoints)). Time series instances to train clusterer and then have indexes each belong to return.
- y: ignored, exists for API consistency reasons.
- Returns:
- np.ndarray (1d array of shape (n_cases,))
Index of the cluster each time series in X belongs to.
- classmethod get_class_tag(tag_name, raise_error=True, tag_value_default=None)[source]¶
Get tag value from estimator class (only class tags).
- Parameters:
- tag_namestr
Name of tag value.
- raise_errorbool, default=True
Whether a
ValueErroris raised when the tag is not found.- tag_value_defaultany type, default=None
Default/fallback value if tag is not found and error is not raised.
- Returns:
- tag_value
Value of the
tag_nametag in cls. If not found, returns an error ifraise_errorisTrue, otherwise it returnstag_value_default.
- Raises:
- ValueError
if
raise_errorisTrueandtag_nameis not inself.get_tags().keys()
Examples
>>> from aeon.classification import DummyClassifier >>> DummyClassifier.get_class_tag("capability:multivariate") True
- classmethod get_class_tags()[source]¶
Get class tags from estimator class and all its parent classes.
- Returns:
- collected_tagsdict
Dictionary of tag name and tag value pairs. Collected from
_tagsclass attribute via nested inheritance. These are not overridden by dynamic tags set byset_tagsor class__init__calls.
- get_fitted_params(deep=True)[source]¶
Get fitted parameters.
- State required:
Requires state to be “fitted”.
- Parameters:
- deepbool, default=True
If
True, will return the fitted parameters for this estimator and contained subobjects that are estimators.
- Returns:
- fitted_paramsdict
Fitted parameter names mapped to their values.
- get_params(deep=True)¶
Get parameters for this estimator.
- Parameters:
- deepbool, default=True
If True, will return the parameters for this estimator and contained subobjects that are estimators.
- Returns:
- paramsdict
Parameter names mapped to their values.
- get_tag(tag_name, raise_error=True, tag_value_default=None)[source]¶
Get tag value from estimator class.
Includes dynamic and overridden tags.
- Parameters:
- tag_namestr
Name of tag to be retrieved.
- raise_errorbool, default=True
Whether a
ValueErroris raised when the tag is not found.- tag_value_defaultany type, default=None
Default/fallback value if tag is not found and error is not raised.
- Returns:
- tag_value
Value of the
tag_nametag in self. If not found, returns an error ifraise_errorisTrue, otherwise it returnstag_value_default.
- Raises:
- ValueError
if raise_error is
Trueandtag_nameis not inself.get_tags().keys()
Examples
>>> from aeon.classification import DummyClassifier >>> d = DummyClassifier() >>> d.get_tag("capability:multivariate") True
- get_tags()[source]¶
Get tags from estimator.
Includes dynamic and overridden tags.
- Returns:
- collected_tagsdict
Dictionary of tag name and tag value pairs. Collected from
_tagsclass attribute via nested inheritance and then any overridden and new tags from__init__orset_tags.
- predict(X) ndarray[source]¶
Predict the closest cluster each sample in X belongs to.
- Parameters:
- X3D np.ndarray
Input data, any number of channels, equal length series of shape
( n_cases, n_channels, n_timepoints)or 2D np.array (univariate, equal length series) of shape(n_cases, n_timepoints)or list of numpy arrays (any number of channels, unequal length series) of shape[n_cases], 2D np.array(n_channels, n_timepoints_i), wheren_timepoints_iis length of seriesi. Other types are allowed and converted into one of the above.
- Returns:
- np.array
shape ``(n_cases)`, index of the cluster each time series in X. belongs to.
- predict_proba(X) ndarray[source]¶
Predicts labels probabilities for sequences in X.
Default behaviour is to call _predict and set the predicted class probability to 1, other class probabilities to 0. Override if better estimates are obtainable.
- Parameters:
- X3D np.ndarray
Input data, any number of channels, equal length series of shape
( n_cases, n_channels, n_timepoints)or 2D np.array (univariate, equal length series) of shape(n_cases, n_timepoints)or list of numpy arrays (any number of channels, unequal length series) of shape[n_cases], 2D np.array(n_channels, n_timepoints_i), wheren_timepoints_iis length of seriesi. Other types are allowed and converted into one of the above.
- Returns:
- y2D array of shape [n_cases, n_classes] - predicted class probabilities
1st dimension indices correspond to instance indices in X 2nd dimension indices correspond to possible labels (integers) (i, j)-th entry is predictive probability that i-th instance is of class j
- reset(keep=None)[source]¶
Reset the object to a clean post-init state.
After a
self.reset()call,selfis equal or similar in value totype(self)(**self.get_params(deep=False)), assuming no other attributes were kept usingkeep.- Detailed behaviour:
- removes any object attributes, except:
hyper-parameters (arguments of
__init__) object attributes containing double-underscores, i.e., the string “__”
runs
__init__with current values of hyperparameters (result ofget_params)- Not affected by the reset are:
object attributes containing double-underscores class and object methods, class attributes any attributes specified in the
keepargument
- Parameters:
- keepNone, str, or list of str, default=None
If
None, all attributes are removed except hyperparameters. Ifstr, only the attribute with this name is kept. Iflistofstr, only the attributes with these names are kept.
- Returns:
- selfobject
Reference to self.
- Raises:
- TypeError
If ‘keep’ is not a string or a list of strings.
- set_params(**params)¶
Set the parameters of this estimator.
The method works on simple estimators as well as on nested objects (such as
Pipeline). The latter have parameters of the form<component>__<parameter>so that it’s possible to update each component of a nested object.- Parameters:
- **paramsdict
Estimator parameters.
- Returns:
- selfestimator instance
Estimator instance.