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", return_X_y=True) >>> X_test, y_test = load_unit_test(split="test", return_X_y=True) >>> 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
Check if the estimator has been fitted.
clone
()Obtain a clone of the object with same hyper-parameters.
clone_tags
(estimator[, tag_names])Clone/mirror tags from another estimator as dynamic override.
compute_harmonic_mean
(state_info, y)Calculate harmonic mean from a state info matrix and array of class labeles.
create_test_instance
([parameter_set, ...])Construct Estimator instance if possible.
create_test_instances_and_names
([parameter_set])Create list of all test instances and a list of names for them.
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[, tag_value_default, ...])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 metadata routing of this object.
Get parameter defaults for the object.
Get parameter names for the object.
get_params
([deep])Get parameters for this estimator.
Return the state information generated from the last predict/update call.
get_tag
(tag_name[, tag_value_default, ...])Get tag value from estimator class.
get_tags
()Get tags from estimator class.
get_test_params
([parameter_set])Return testing parameter settings for the estimator.
Check if the object is composite.
load_from_path
(serial)Load object from file location.
load_from_serial
(serial)Load object from serialized memory container.
predict
(X)Predicts labels for sequences in X.
Predicts labels probabilities for sequences in X.
reset
()Reset the object to a clean post-init state.
Reset the state information used in update methods.
save
([path])Save serialized self to bytes-like object or to (.zip) file.
score
(X, y)Scores predicted labels against ground truth labels on X.
set_params
(**params)Set the parameters of this object.
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.
- classmethod get_test_params(parameter_set='default')[source]¶
Return testing parameter settings for the estimator.
- Parameters:
- parameter_setstr, default=”default”
Name of the set of test parameters to return, for use in tests. If no special parameters are defined for a value, will return “default” set. ProbabilityThresholdEarlyClassifier provides the following special sets:
- “results_comparison” - used in some classifiers to compare against
previously generated results where the default set of parameters cannot produce suitable probability estimates
- Returns:
- paramsdict or list of dict, default={}
Parameters to create testing instances of the class. Each dict are parameters to construct an “interesting” test instance, i.e., MyClass(**params) or MyClass(**params[i]) creates a valid test instance. create_test_instance uses the first (or only) dictionary in params.
- check_is_fitted()[source]¶
Check if the estimator has been fitted.
- Raises:
- NotFittedError
If the estimator has not been fitted yet.
- clone()[source]¶
Obtain a clone of the object with same hyper-parameters.
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))
.- Returns:
- instance of
type(self)
, clone of self (see above)
- instance of
- clone_tags(estimator, tag_names=None)[source]¶
Clone/mirror tags from another estimator as dynamic override.
- Parameters:
- estimatorobject
Estimator inheriting from :class:BaseEstimator.
- tag_namesstr or list of str, default = None
Names of tags to clone. If None then all tags in estimator are used as tag_names.
- Returns:
- Self
Reference to self.
Notes
Changes object state by setting tag values in tag_set from estimator as dynamic tags in self.
- classmethod create_test_instance(parameter_set='default', return_first=True)[source]¶
Construct Estimator instance if possible.
Calls the get_test_params method and returns an instance or list of instances using the returned dict or list of dict.
- Parameters:
- parameter_setstr, default=”default”
Name of the set of test parameters to return, for use in tests. If no special parameters are defined for a value, will return “default” set.
- return_firstbool, default=True
If True, return the first instance of the list of instances. If False, return the list of instances.
- Returns:
- instanceBaseEstimator or list of BaseEstimator
Instance of the class with default parameters. If return_first is False, returns list of instances.
- classmethod create_test_instances_and_names(parameter_set='default')[source]¶
Create list of all test instances and a list of names for them.
- Parameters:
- parameter_setstr, default=”default”
Name of the set of test parameters to return, for use in tests. If no special parameters are defined for a value, will return “default” set.
- Returns:
- objslist of instances of cls
i-th instance is cls(**cls.get_test_params()[i]).
- nameslist of str, same length as objs
i-th element is name of i-th instance of obj in tests convention is {cls.__name__}-{i} if more than one instance otherwise {cls.__name__}.
- parameter_setstr, default=”default”
Name of the set of test parameters to return, for use in tests. If no special parameters are defined for a value, will return “default” set.
- 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, tag_value_default=None, raise_error=False)[source]¶
Get tag value from estimator class (only class tags).
- Parameters:
- tag_namestr
Name of tag value.
- tag_value_defaultany type
Default/fallback value if tag is not found.
- raise_errorbool
Whether a ValueError is raised when the tag is not found.
- 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 i.e. if tag_name is not in self.get_tags(
- ).keys()
See also
get_tag
Get a single tag from an object.
get_tags
Get all tags from an object.
get_class_tag
Get a single tag from a class.
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 : tag value pairs. Collected from _tags class attribute via nested inheritance. NOT overridden by dynamic tags set by set_tags or mirror_tags.
- get_fitted_params(deep=True)[source]¶
Get fitted parameters.
- State required:
Requires state to be “fitted”.
- Parameters:
- deepbool, default=True
Whether to return fitted parameters of components.
If True, will return a dict of parameter name : value for this object, including fitted parameters of fittable components (= BaseEstimator-valued parameters).
If False, will return a dict of parameter name : value for this object, but not include fitted parameters of components.
- Returns:
- fitted_paramsdict with str-valued keys
Dictionary of fitted parameters, paramname : paramvalue keys-value pairs include:
always: all fitted parameters of this object, as via
get_param_names
values are fitted parameter value for that key, of this objectif
deep=True
, also contains keys/value pairs of component parameters parameters of components are indexed as[componentname]__[paramname]
all parameters ofcomponentname
appear asparamname
with its valueif
deep=True
, also contains arbitrary levels of component recursion, e.g.,[componentname]__[componentcomponentname]__[paramname]
, etc.
- get_metadata_routing()[source]¶
Get metadata routing of this object.
Please check User Guide on how the routing mechanism works.
- Returns:
- routingMetadataRequest
A
MetadataRequest
encapsulating routing information.
- classmethod get_param_defaults()[source]¶
Get parameter defaults for the object.
- Returns:
- default_dict: dict with str keys
keys are all parameters of cls that have a default defined in __init__ values are the defaults, as defined in __init__.
- classmethod get_param_names()[source]¶
Get parameter names for the object.
- Returns:
- param_names: list of str, alphabetically sorted list of parameter names of cls
- 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, tag_value_default=None, raise_error=True)[source]¶
Get tag value from estimator class.
Uses dynamic tag overrides.
- Parameters:
- tag_namestr
Name of tag to be retrieved.
- tag_value_defaultany type, default=None
Default/fallback value if tag is not found.
- raise_errorbool
Whether a ValueError is raised when the tag is not found.
- 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 i.e. if tag_name is not in self.get_tags(
- ).keys()
See also
get_tags
Get all tags from an object.
get_clas_tags
Get all tags from a class.
get_class_tag
Get a single tag from a class.
Examples
>>> from aeon.classification import DummyClassifier >>> d = DummyClassifier() >>> d.get_tag("capability:multivariate") True
- get_tags()[source]¶
Get tags from estimator class.
Includes the dynamic tag overrides.
- Returns:
- dict
Dictionary of tag name : tag value pairs. Collected from _tags class attribute via nested inheritance and then any overrides and new tags from _tags_dynamic object attribute.
See also
get_tag
Get a single tag from an object.
get_class_tags
Get all tags from a class.
get_class_tag
Get a single tag from a class.
Examples
>>> from aeon.classification import DummyClassifier >>> d = DummyClassifier() >>> tags = d.get_tags()
- is_composite()[source]¶
Check if the object is composite.
A composite object is an object which contains objects, as parameters. Called on an instance, since this may differ by instance.
- Returns:
- composite: bool
Whether self contains a parameter which is BaseObject.
- classmethod load_from_path(serial)[source]¶
Load object from file location.
- Parameters:
- serialobject
Result of ZipFile(path).open(“object).
- Returns:
- deserialized self resulting in output at path, of cls.save(path)
- classmethod load_from_serial(serial)[source]¶
Load object from serialized memory container.
- Parameters:
- serialobject
First element of output of cls.save(None).
- Returns:
- deserialized self resulting in output serial, of cls.save(None).
- 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()[source]¶
Reset the object to a clean post-init state.
Equivalent to sklearn.clone but overwrites self. After
self.reset()
call, self is equal in value totype(self)(**self.get_params(deep=False))
Detail 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 hyper-parameters (result of get_params)Not affected by the reset are: object attributes containing double-underscores class and object methods, class attributes
- save(path=None)[source]¶
Save serialized self to bytes-like object or to (.zip) file.
Behaviour: if path is None, returns an in-memory serialized self if path is a file location, stores self at that location as a zip file
saved files are zip files with following contents: _metadata - contains class of self, i.e., type(self) _obj - serialized self. This class uses the default serialization (pickle).
- Parameters:
- pathNone or file location (str or Path).
if None, self is saved to an in-memory object if file location, self is saved to that file location. If:
path=”estimator” then a zip file estimator.zip will be made at cwd. path=”/home/stored/estimator” then a zip file estimator.zip will be stored in /home/stored/.
- Returns:
- if path is None - in-memory serialized self
- if path is file location - ZipFile with reference to the file.
- 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 object.
The method works on simple estimators as well as on nested objects. The latter have parameters of the form
<component>__<parameter>
so that it’s possible to update each component of a nested object.- Parameters:
- **paramsdict
BaseObject parameters
- Returns:
- selfreference to self (after parameters have been set)
- set_tags(**tag_dict)[source]¶
Set dynamic tags to given values.
- Parameters:
- **tag_dictdict
Dictionary of tag name : tag value pairs.
- Returns:
- Self
Reference to self.
Notes
Changes object state by setting tag values in tag_dict as dynamic tags in 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