binder

Demo of ROCKET transform

Overview

ROCKET [1] transforms time series using random convolutional kernels (random length, weights, bias, dilation, and padding). ROCKET computes two features from the resulting feature maps: the max, and the proportion of positive values (or ppv). The transformed features are used to train a linear classifier.

[1] Dempster A, Petitjean F, Webb GI (2019) ROCKET: Exceptionally fast and accurate time series classification using random convolutional kernels. arXiv:1910.13051


Contents

  1. Imports

  2. Univariate Time Series

  3. Multivariate Time Series

  4. Pipeline Example


1 Imports

Import example data, ROCKET, and a classifier (RidgeClassifierCV from scikit-learn), as well as NumPy and make_pipeline from scikit-learn.

Note: ROCKET compiles (via Numba) on import, which may take a few seconds.

[1]:
# !pip install --upgrade numba
[2]:
import numpy as np
from sklearn.linear_model import RidgeClassifierCV
from sklearn.pipeline import make_pipeline

from aeon.datasets import load_arrow_head  # univariate dataset
from aeon.datasets import load_basic_motions  # multivariate dataset
from aeon.transformations.collection.convolution_based import Rocket

2 Univariate Time Series

We can transform the data using ROCKET and separately fit a classifier, or we can use ROCKET together with a classifier in a pipeline (section 4, below).

2.1 Load the Training Data

For more details on the data set, see the univariate time series classification notebook.

[3]:
X_train, y_train = load_arrow_head(split="train")

2.2 Initialise ROCKET and Transform the Training Data

[4]:
rocket = Rocket()  # by default, ROCKET uses 10,000 kernels
rocket.fit(X_train)
X_train_transform = rocket.transform(X_train)

2.3 Fit a Classifier

We recommend using RidgeClassifierCV from scikit-learn for smaller datasets (fewer than approx. 20K training examples), and using logistic regression trained using stochastic gradient descent for larger datasets.

[5]:
classifier = RidgeClassifierCV(alphas=np.logspace(-3, 3, 10))
classifier.fit(X_train_transform, y_train)
[5]:
RidgeClassifierCV(alphas=array([1.00000000e-03, 4.64158883e-03, 2.15443469e-02, 1.00000000e-01,
       4.64158883e-01, 2.15443469e+00, 1.00000000e+01, 4.64158883e+01,
       2.15443469e+02, 1.00000000e+03]))
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.

2.4 Load and Transform the Test Data

[6]:
X_test, y_test = load_arrow_head(split="test")
X_test_transform = rocket.transform(X_test)

2.5 Classify the Test Data

[7]:
classifier.score(X_test_transform, y_test)
[7]:
0.7771428571428571

3 Multivariate Time Series

We can use ROCKET in exactly the same way for multivariate time series.

3.1 Load the Training Data

[8]:
X_train, y_train = load_basic_motions(split="train")

3.2 Initialise ROCKET and Transform the Training Data

[9]:
rocket = Rocket()
rocket.fit(X_train)
X_train_transform = rocket.transform(X_train)

3.3 Fit a Classifier

[10]:
classifier = RidgeClassifierCV(alphas=np.logspace(-3, 3, 10))
classifier.fit(X_train_transform, y_train)
[10]:
RidgeClassifierCV(alphas=array([1.00000000e-03, 4.64158883e-03, 2.15443469e-02, 1.00000000e-01,
       4.64158883e-01, 2.15443469e+00, 1.00000000e+01, 4.64158883e+01,
       2.15443469e+02, 1.00000000e+03]))
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.

3.4 Load and Transform the Test Data

[11]:
X_test, y_test = load_basic_motions(split="test")
X_test_transform = rocket.transform(X_test)

3.5 Classify the Test Data

[12]:
classifier.score(X_test_transform, y_test)
[12]:
0.975

4 Pipeline Example

We can use ROCKET together with RidgeClassifierCV (or another classifier) in a pipeline. We can then use the pipeline like a self-contained classifier, with a single call to fit, and without having to separately transform the data, etc.

4.1 Initialise the Pipeline

[13]:
rocket_pipeline = make_pipeline(
    Rocket(), RidgeClassifierCV(alphas=np.logspace(-3, 3, 10))
)

4.2 Load and Fit the Training Data

[14]:
X_train, y_train = load_arrow_head(split="train")

# it is necessary to pass y_train to the pipeline
# y_train is not used for the transform, but it is used by the classifier
rocket_pipeline.fit(X_train, y_train)
[14]:
Pipeline(steps=[('rocket', Rocket()),
                ('ridgeclassifiercv',
                 RidgeClassifierCV(alphas=array([1.00000000e-03, 4.64158883e-03, 2.15443469e-02, 1.00000000e-01,
       4.64158883e-01, 2.15443469e+00, 1.00000000e+01, 4.64158883e+01,
       2.15443469e+02, 1.00000000e+03])))])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.

4.3 Load and Classify the Test Data

[15]:
X_test, y_test = load_arrow_head(split="test", return_X_y=True)

rocket_pipeline.score(X_test, y_test)
[15]:
0.7885714285714286

Generated using nbsphinx. The Jupyter notebook can be found here.