ProbabilityThresholdEarlyClassifier¶
- class ProbabilityThresholdEarlyClassifier(estimator=None, probability_threshold=0.85, consecutive_predictions=1, classification_points=None, n_jobs=1, random_state=None)[source]¶
Probability Threshold Early Classifier.
An early classifier which uses a threshold of prediction probability to determine whether an early prediction is safe or not.
- Overview:
Build n classifiers, where n is the number of classification_points. 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:
- probability_thresholdfloat, default=0.85
The class prediction probability required to deem a prediction as safe.
- consecutive_predictionsint, default=1
The number of consecutive predictions for a class above the threshold required to deem a prediction as safe.
- estimatoraeon classifier, default=None
An aeon estimator to be built using the transformed data. Defaults to a default DrCIF classifier.
- 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.
Examples
>>> from aeon.classification.early_classification import ( ... ProbabilityThresholdEarlyClassifier ... ) >>> 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 = ProbabilityThresholdEarlyClassifier( ... classification_points=[6, 16, 24], ... estimator=TimeSeriesForestClassifier(n_estimators=5), ... ) >>> clf.fit(X_train, y_train) ProbabilityThresholdEarlyClassifier(...) >>> y_pred = 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 from estimator class and all its parent classes.
get_fitted_params
([deep])Get fitted parameters.
Sklearn metadata routing.
get_params
([deep])Get parameters for this estimator.
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.
Predicts labels probabilities for sequences in X.
reset
([keep])Reset the object to a clean post-init state.
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 label prediction for sequences in X at a larger series length.
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 ProbabilityThresholdEarlyClassifier 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 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. 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_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)
, wheren_timepoints_i
is length of seriesi
. 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 ifraise_error
is True, otherwise it returnstag_value_default
.
- Raises:
- ValueError
if
raise_error
is True andtag_name
is 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
_tags
class attribute via nested inheritance. These are not overridden by dynamic tags set byset_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_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 ifraise_error
is True, otherwise it returnstag_value_default
.
- Raises:
- ValueError
if raise_error is
True
andtag_name
is 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
_tags
class attribute via nested inheritance and then any overridden and new tags from__init__
orset_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)
, wheren_timepoints_i
is length of seriesi
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)
, wheren_timepoints_i
is 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
- 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 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
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.
- 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)
, wheren_timepoints_i
is length of seriesi
. 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)
, wheren_timepoints_i
is length of seriesi
. 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)
, wheren_timepoints_i
is 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
- 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