TEASER

class TEASER(estimator=None, one_class_classifier=None, one_class_param_grid=None, classification_points=None, n_jobs=1, random_state=None)[source]

Two-tier Early and Accurate Series Classifier (TEASER).

An early classifier which uses one class SVM’s trained on prediction probabilities to determine whether an early prediction is safe or not.

Overview:

Build n classifiers, where n is the number of classification_points. For each classifier, train a one class svm used to determine prediction safety at that series length. Tune the number of consecutive safe svm predictions required to consider the prediction safe.

While a prediction is still deemed unsafe:

Make a prediction using the series length at classification point i. Decide whether the predcition is safe or not using decide_prediction_safety.

Parameters:
estimatoraeon classifier, default=None

An aeon estimator to be built at each of the classification_points time stamps. Defaults to a WEASEL classifier.

one_class_classifierone-class sklearn classifier, default=None

An sklearn one-class classifier used to determine whether an early decision is safe. Defaults to a tuned one-class SVM classifier.

one_class_param_griddict or list of dict, default=None

The hyper-parameters for the one-class classifier to learn using grid-search. Dictionary with parameters names (str) as keys and lists of parameter settings to try as values, or a list of such dictionaries.

classification_pointsList or None, default=None

List of integer time series time stamps to build classifiers and allow predictions at. Early predictions must have a series length that matches a value in the _classification_points List. Duplicate values will be removed, and the full series length will be appeneded if not present. If None, will use 20 thresholds linearly spaces from 0 to the series length.

n_jobsint, default=1

The number of jobs to run in parallel for both fit and predict. -1 means using all processors.

random_stateint, RandomState instance or None, default=None

If int, random_state is the seed used by the random number generator; If RandomState instance, random_state is the random number generator; If None, the random number generator is the RandomState instance used by np.random.

Attributes:
n_classes_int

The number of classes.

n_cases_int

The number of train cases.

n_channels_int

The number of dimensions per case.

n_timepoints_int

The full length of each series.

classes_list

The unique class labels.

state_info2d np.ndarray (4 columns)

Information stored about input instances after the decision-making process in update/predict methods. Used in update methods to make decisions based on the resutls of previous method calls. Records in order: the time stamp index, the number of consecutive decisions made, the predicted class and the series length.

References

[1]

Schäfer, Patrick, and Ulf Leser. “TEASER: early and accurate time series classification.” Data mining and knowledge discovery 34, no. 5 (2020)

Examples

>>> from aeon.classification.early_classification import TEASER
>>> from aeon.classification.interval_based import TimeSeriesForestClassifier
>>> from aeon.datasets import load_unit_test
>>> X_train, y_train = load_unit_test(split="train")
>>> X_test, y_test = load_unit_test(split="test")
>>> clf = TEASER(
...     classification_points=[6, 16, 24],
...     estimator=TimeSeriesForestClassifier(n_estimators=5),
... )
>>> clf.fit(X_train, y_train)
TEASER(...)
>>> y_pred, decisions = clf.predict(X_test)

Methods

clone([random_state])

Obtain a clone of the object with the same hyperparameters.

compute_harmonic_mean(state_info, y)

Calculate harmonic mean from a state info matrix and array of class labeles.

filter_X(X, decisions)

Remove True cases from X given a boolean array of decisions.

filter_X_y(X, y, decisions)

Remove True cases from X and y given a boolean array of decisions.

fit(X, y)

Fit time series classifier to training data.

get_class_tag(tag_name[, raise_error, ...])

Get tag value from estimator class (only class tags).

get_class_tags()

Get class tags from estimator class and all its parent classes.

get_fitted_params([deep])

Get fitted parameters.

get_metadata_routing()

Sklearn metadata routing.

get_params([deep])

Get parameters for this estimator.

get_state_info()

Return the state information generated from the last predict/update call.

get_tag(tag_name[, raise_error, ...])

Get tag value from estimator class.

get_tags()

Get tags from estimator.

predict(X)

Predicts labels for sequences in X.

predict_proba(X)

Predicts labels probabilities for sequences in X.

reset([keep])

Reset the object to a clean post-init state.

reset_state_info()

Reset the state information used in update methods.

score(X, y)

Scores predicted labels against ground truth labels on X.

set_params(**params)

Set the parameters of this estimator.

set_tags(**tag_dict)

Set dynamic tags to given values.

split_indices(indices, decisions)

Split a list of indices given a boolean array of decisions.

split_indices_and_filter(X, indices, decisions)

Remove True cases and split a list of indices given an array of decisions.

update_predict(X)

Update label prediction for sequences in X at a larger series length.

update_predict_proba(X)

Update label probabilities for sequences in X at a larger series length.

compute_harmonic_mean(state_info, y) tuple[float, float, float][source]

Calculate harmonic mean from a state info matrix and array of class labeles.

Parameters:
state_info2d np.ndarray of int

The state_info from a TEASER object after a prediction or update. It is assumed the state_info is complete, and a positive decision has been returned for all cases.

y1D np.array of int

Actual class labels for predictions. indices correspond to instance indices in state_info.

Returns:
harmonic_meanfloat

Harmonic Mean represents the balance between accuracy and earliness for a set of early predictions.

accuracyfloat

Accuracy for the predictions made in the state_info.

earlinessfloat

Average time taken to make a classification. The earliness for a single case is the number of time points required divided by the total series length.

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.clone of self. Equal in value to type(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. If int, random_state is the seed used by the random number generator. If RandomState instance, random_state is the random number generator.

Returns:
estimatorobject

Instance of type(self), clone of self (see above)

static filter_X(X, decisions)[source]

Remove True cases from X given a boolean array of decisions.

static filter_X_y(X, y, decisions)[source]

Remove True cases from X and y given a boolean array of decisions.

fit(X, y)[source]

Fit time series classifier to training data.

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), where n_timepoints_i is length of series i. Other types are allowed and converted into one of the above.

np.array

shape (n_cases) - class labels for fitting indices correspond to instance indices in X.

Returns:
selfReference to self.

Notes

Changes state by creating a fitted model that updates attributes ending in “_” and sets is_fitted flag to True.

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 ValueError is 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_name tag in cls. If not found, returns an error if raise_error is True, otherwise it returns tag_value_default.

Raises:
ValueError

if raise_error is True and tag_name is not in self.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 _tags class attribute via nested inheritance. These are not overridden by dynamic tags set by set_tags or 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_metadata_routing()[source]

Sklearn metadata routing.

Not supported by aeon estimators.

get_params(deep=True)[source]

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_state_info()[source]

Return the state information generated from the last predict/update call.

Returns:
An array containing the state info for each decision in X from update and
predict methods. Contains classifier dependant information for future decisions
on the data and information on when a cases decision has been made. Each row
contains information for a case from the latest decision on its safety made in
update/predict. Successive updates are likely to remove rows from the
state_info, as it will only store as many rows as there are input instances to
update/predict.
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 ValueError is 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_name tag in self. If not found, returns an error if raise_error is True, otherwise it returns tag_value_default.

Raises:
ValueError

if raise_error is True and tag_name is not in self.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 _tags class attribute via nested inheritance and then any overridden and new tags from __init__ or set_tags.

predict(X) tuple[ndarray, ndarray][source]

Predicts labels for sequences in X.

Early classifiers can predict at series lengths shorter than the train data series length.

Predict will return -1 for cases which it cannot make a decision on yet. The output is only guaranteed to return a valid class label for all cases when using the full series length.

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), where n_timepoints_i is length of series i other types are allowed and converted into one of the above.

Returns:
ynp.array

shape [n_cases] - predicted class labels indices correspond to instance indices in X.

decisions1D bool array

An array of booleans, containing the decision of whether a prediction is safe to use or not. i-th entry is the classifier decision that i-th instance safe to use.

predict_proba(X) tuple[ndarray, ndarray][source]

Predicts labels probabilities for sequences in X.

Early classifiers can predict at series lengths shorter than the train data series length.

Probability predictions will return [-1]*n_classes_ for cases which it cannot make a decision on yet. The output is only guaranteed to return a valid class label for all cases when using the full series length.

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), where n_timepoints_i is length of series i. 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

decisions1D bool array

An array of booleans, containing the decision of whether a prediction is safe to use or not. i-th entry is the classifier decision that i-th instance safe to use

reset(keep=None)[source]

Reset the object to a clean post-init state.

After a self.reset() call, self is equal or similar in value to type(self)(**self.get_params(deep=False)), assuming no other attributes were kept using keep.

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 of get_params)

Not affected by the reset are:

object attributes containing double-underscores class and object methods, class attributes any attributes specified in the keep argument

Parameters:
keepNone, str, or list of str, default=None

If None, all attributes are removed except hyperparameters. If str, only the attribute with this name is kept. If list of str, only the attributes with these names are kept.

Returns:
selfobject

Reference to self.

reset_state_info()[source]

Reset the state information used in update methods.

score(X, y) tuple[float, float, float][source]

Scores predicted labels against ground truth labels on X.

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), where n_timepoints_i is length of series i. other types are allowed and converted into one of the above.

y1D np.ndarray of int, of shape [n_cases] - class labels (ground truth)

indices correspond to instance indices in X

Returns:
Tuple of floats, harmonic mean, accuracy and earliness scores of predict(X) vs y
set_params(**params)[source]

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.

set_tags(**tag_dict)[source]

Set dynamic tags to given values.

Parameters:
**tag_dictdict

Dictionary of tag name and tag value pairs.

Returns:
selfobject

Reference to self.

static split_indices(indices, decisions)[source]

Split a list of indices given a boolean array of decisions.

static split_indices_and_filter(X, indices, decisions)[source]

Remove True cases and split a list of indices given an array of decisions.

update_predict(X) tuple[ndarray, ndarray][source]

Update label prediction for sequences in X at a larger series length.

Uses information stored in the classifiers state from previous predictions and updates at shorter series lengths. Update will only accept cases which have not yet had a decision made, cases which have had a positive decision should be removed from the input with the row ordering preserved.

If no state information is present, predict will be called instead.

Prediction updates will return -1 for cases which it cannot make a decision on yet. The output is only guaranteed to return a valid class label for all cases when using the full series length.

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), where n_timepoints_i is length of series i. other types are allowed and converted into one of the above.

Returns:
y1D np.array of int, of shape [n_cases] - predicted class labels

indices correspond to instance indices in X

decisions1D bool array

An array of booleans, containing the decision of whether a prediction is safe to use or not. i-th entry is the classifier decision that i-th instance safe to use

update_predict_proba(X) tuple[ndarray, ndarray][source]

Update label probabilities for sequences in X at a larger series length.

Uses information stored in the classifiers state from previous predictions and updates at shorter series lengths. Update will only accept cases which have not yet had a decision made, cases which have had a positive decision should be removed from the input with the row ordering preserved.

If no state information is present, predict_proba will be called instead.

Probability predictions updates will return [-1]*n_classes_ for cases which it cannot make a decision on yet. The output is only guaranteed to return a valid class label for all cases when using the full series length.

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), where n_timepoints_i is length of series i. 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

decisions1D bool array

An array of booleans, containing the decision of whether a prediction is safe to use or not. i-th entry is the classifier decision that i-th instance safe to use