aeon-toolkit / aeon

A toolkit for machine learning from time series
https://aeon-toolkit.org/
BSD 3-Clause "New" or "Revised" License
1.02k stars 128 forks source link
data-mining data-science machine-learning scikit-learn time-series time-series-analysis time-series-anomaly-detection time-series-classification time-series-clustering time-series-regression time-series-segmentation

aeon logo

⌛ Welcome to aeon

aeon is an open-source toolkit for learning from time series. It is compatible with scikit-learn and provides access to the very latest algorithms for time series machine learning, in addition to a range of classical techniques for learning tasks such as forecasting and classification.

We strive to provide a broad library of time series algorithms including the latest advances, offer efficient implementations using numba, and interfaces with other time series packages to provide a single framework for algorithm comparison.

The latest aeon release is v0.11.1. You can view the full changelog here.

Our webpage and documentation is available at https://aeon-toolkit.org.

The following modules are still considered experimental, and the deprecation policy does not apply:

Overview
CI/CD github-actions-release github-actions-main github-actions-nightly docs-main docs-main !codecov openssf-scorecard
Code !pypi !conda !python-versions !black license binder
Community !slack !linkedin !x-twitter
Affiliation numfocus

⚙️ Installation

aeon requires a Python version of 3.9 or greater. Our full installation guide is available in our documentation.

The easiest way to install aeon is via pip:

pip install aeon

Some estimators require additional packages to be installed. If you want to install the full package with all optional dependencies, you can use:

pip install aeon[all_extras]

Instructions for installation from the GitHub source can be found here.

⏲️ Getting started

The best place to get started for all aeon packages is our getting started guide.

Below we provide a quick example of how to use aeon for classification and clustering.

Classification/Regression

Time series classification looks to predict class labels fore unseen series using a model fitted from a collection of time series. The framework for regression is similar, replace the classifier with a regressor and the labels with continuous values.

import numpy as np
from aeon.classification.distance_based import KNeighborsTimeSeriesClassifier

X = np.array([[[1, 2, 3, 4, 5, 5]],  # 3D array example (univariate)
             [[1, 2, 3, 4, 4, 2]],   # Three samples, one channel,
             [[8, 7, 6, 5, 4, 4]]])  # six series length
y = np.array(['low', 'low', 'high'])  # class labels for each sample

clf = KNeighborsTimeSeriesClassifier(distance="dtw")
clf.fit(X, y)  # fit the classifier on train data
>>> KNeighborsTimeSeriesClassifier()

X_test = np.array(
    [[[2, 2, 2, 2, 2, 2]], [[5, 5, 5, 5, 5, 5]], [[6, 6, 6, 6, 6, 6]]]
)
y_pred = clf.predict(X_test)  # make class predictions on new data
>>> ['low' 'high' 'high']

Clustering

Time series clustering groups similar time series together from a collection of time series.

import numpy as np
from aeon.clustering import TimeSeriesKMeans

X = np.array([[[1, 2, 3, 4, 5, 5]],  # 3D array example (univariate)
             [[1, 2, 3, 4, 4, 2]],   # Three samples, one channel,
             [[8, 7, 6, 5, 4, 4]]])  # six series length

clu = TimeSeriesKMeans(distance="dtw", n_clusters=2)
clu.fit(X)  # fit the clusterer on train data
>>> TimeSeriesKMeans(distance='dtw', n_clusters=2)

clu.labels_ # get training cluster labels
>>> array([0, 0, 1])

X_test = np.array(
    [[[2, 2, 2, 2, 2, 2]], [[5, 5, 5, 5, 5, 5]], [[6, 6, 6, 6, 6, 6]]]
)
clu.predict(X_test)  # Assign clusters to new data
>>> array([1, 0, 0])

💬 Where to ask questions

Type Platforms
🐛 Bug Reports GitHub Issue Tracker
Feature Requests & Ideas GitHub Issue Tracker & Slack
💻 Usage Questions GitHub Discussions & Slack
💬 General Discussion GitHub Discussions & Slack
🏭 Contribution & Development Slack

For enquiries about the project or collaboration, our email is contact@aeon-toolkit.org.

📚 Citation

If you use aeon we would appreciate a citation of the following paper:

@article{aeon24jmlr,
  author  = {Matthew Middlehurst and Ali Ismail-Fawaz and Antoine Guillaume and Christopher Holder and David Guijo-Rubio and Guzal Bulatova and Leonidas Tsaprounis and Lukasz Mentel and Martin Walter and Patrick Sch{{\"a}}fer and Anthony Bagnall},
  title   = {aeon: a Python Toolkit for Learning from Time Series},
  journal = {Journal of Machine Learning Research},
  year    = {2024},
  volume  = {25},
  number  = {289},
  pages   = {1--10},
  url     = {http://jmlr.org/papers/v25/23-1444.html}
}

If you let us know about your paper using aeon, we will happily list it here.