BaseIntervalForest#

class BaseIntervalForest(base_estimator=None, n_estimators=200, interval_selection_method='random', n_intervals='sqrt', min_interval_length=3, max_interval_length=inf, interval_features=None, series_transformers=None, att_subsample_size=None, replace_nan=None, time_limit_in_minutes=None, contract_max_n_estimators=500, random_state=None, n_jobs=1, parallel_backend=None)[source]#

A base class for interval extracting forest estimators.

Allows the implementation of classifiers and regressors along the lines of [1][2][3] which extract intervals and create an ensemble from the subsequent features.

Parameters:
base_estimatorBaseEstimator or None, default=None

scikit-learn BaseEstimator used to build the interval ensemble. If None, use a simple decision tree.

n_estimatorsint, default=200

Number of estimators to build for the ensemble.

interval_selection_method“random”, “supervised” or “random-supervised”,

default=”random”

The interval selection transformer to use.
  • “random” uses a RandomIntervalTransformer.

  • “supervised” uses a SupervisedIntervalTransformer.

  • “random-supervised” uses a SupervisedIntervalTransformer with

    randomised elements.

Supervised methods can only be used for classification tasks, and require function inputs for interval_features rather than transformers.

n_intervalsint, str, list or tuple, default=”sqrt”

Number of intervals to extract per tree for each series_transformers series.

An int input will extract that number of intervals from the series, while a str input will return a function of the series length (may differ per series_transformers output) to extract that number of intervals. Valid str inputs are:

  • “sqrt”: square root of the series length.

  • “sqrt-div”: sqrt of series length divided by the number

    of series_transformers.

A list or tuple of ints and/or strs will extract the number of intervals using the above rules and sum the results for the final n_intervals. i.e. [4, “sqrt”] will extract sqrt(n_timepoints) + 4 intervals.

Different number of intervals for each series_transformers series can be specified using a nested list or tuple. Any list or tuple input containing another list or tuple must be the same length as the number of series_transformers.

While random interval extraction will extract the n_intervals intervals total (removing duplicates), supervised intervals will run the supervised extraction process n_intervals times, returning more intervals than specified.

min_interval_lengthint, float, list, or tuple, default=3

Minimum length of intervals to extract from series. float inputs take a proportion of the series length to use as the minimum interval length.

Different minimum interval lengths for each series_transformers series can be specified using a list or tuple. Any list or tuple input must be the same length as the number of series_transformers.

max_interval_lengthint, float, list, or tuple, default=np.inf

Maximum length of intervals to extract from series. float inputs take a proportion of the series length to use as the maximum interval length.

Different maximum interval lengths for each series_transformers series can be specified using a list or tuple. Any list or tuple input must be the same length as the number of series_transformers.

Ignored for supervised interval_selection_method inputs.

interval_featuresBaseTransformer, callable, list, tuple, or None, default=None

The features to extract from the intervals using transformers or callable functions. If None, use the mean, standard deviation, and slope of the series.

Both transformers and functions should be able to take a 2D np.ndarray input. Functions should output a 1d array (the feature for each series), and transformers should output a 2d array where rows are the features for each series. A list or tuple of transformers and/or functions will extract all features and concatenate the output.

Different features for each series_transformers series can be specified using a nested list or tuple. Any list or tuple input containing another list or tuple must be the same length as the number of series_transformers.

series_transformersBaseTransformer, list, tuple, or None, default=None

The transformers to apply to the series before extracting intervals. If None, use the series as is.

A list or tuple of transformers will extract intervals from all transformations concatenate the output. Including None in the list or tuple will use the series as is for interval extraction.

att_subsample_sizeint, float, list, tuple or None, default=None

The number of attributes to subsample for each estimator. If None, use all

If int, use that number of attributes for all estimators. If float, use that proportion of attributes for all estimators.

Different subsample sizes for each series_transformers series can be specified using a list or tuple. Any list or tuple input must be the same length as the number of series_transformers.

replace_nan“nan”, int, float or None, default=None

The value to replace NaNs and infinite values with before fitting the base estimator. int or float input will replace with the specified value, while “nan” will replace infinite values with NaNs. If None, do not replace NaNs.

time_limit_in_minutesint, default=0

Time contract to limit build time in minutes, overriding n_estimators. Default of 0 means n_estimators are used.

contract_max_n_estimatorsint, default=500

Max number of estimators when time_limit_in_minutes is set.

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.

n_jobsint, default=1

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

parallel_backendstr, ParallelBackendBase instance or None, default=None

Specify the parallelisation backend implementation in joblib, if None a ‘prefer’ value of “threads” is used by default. Valid options are “loky”, “multiprocessing”, “threading” or a custom backend. See the joblib Parallel documentation for more details.

Attributes:
n_cases_int

The number of train cases.

n_channels_int

The number of channels per case.

n_timepoints_int

The length of each series.

total_intervals_int

Total number of intervals per tree from all representations.

estimators_list of shape (n_estimators) of BaseEstimator

The collections of estimators trained in fit.

intervals_list of shape (n_estimators) of BaseTransformer

Stores the interval extraction transformer for all estimators.

References

[1]

H.Deng, G.Runger, E.Tuv and M.Vladimir, “A time series forest for classification and feature extraction”, Information Sciences, 239, 2013

[2]

Matthew Middlehurst and James Large and Anthony Bagnall. “The Canonical Interval Forest (CIF) Classifier for Time Series Classification.” IEEE International Conference on Big Data 2020

[3]

Cabello, Nestor, et al. “Fast and Accurate Time Series Classification Through Supervised Interval Search.” IEEE ICDM 2020

Methods

temporal_importance_curves([return_dict, ...])

Calculate the temporal importance curves for each feature.

temporal_importance_curves(return_dict=False, normalise_time_points=False)[source]#

Calculate the temporal importance curves for each feature.

Can be finicky with transformers currently.

Parameters:
return_dictbool, default=False

If True, return a dictionary of curves. If False, return a list of names and a list of curves.

normalise_time_pointsbool, default=False

If True, normalise the time points for each feature to the number of splits that used that feature. If False, return the sum of the information gain for each split.

Returns:
nameslist of str

The names of the features.

curveslist of np.ndarray

The temporal importance curves for each feature.