v0.1.0

April 2023

This release follows on from sktime v0.16.0.

Following this release the deprecation policy remains suspended. Future releases may have breaking changes, so it may be wise to set an upper bound on the package version.

Highlights

  • aeon is now available on PyPI!

  • pandas 2 support is available for core functionality

  • Deep learning approaches in the classification module have been reworked and are more configurable

  • New estimators for classification in Inception Time (@hadifawaz1999) and WEASEL 2.0 (@patrickzib)

  • Improved transformers for selecting channels of multivariate time series (@haskarb)

Interface and breaking changes from sktime v0.16.0

Framework

Removed separate mlflow install via pip install aeon[mlfow]. The mlflow dependency is now integrated in all_extras when doing pip install aeon[all_extras], see #81

Removed support for Python 3.7, see #103

Increment scikit-learn lower bound version from scikit-learn>=0.24 to scikit-learn>=1.0.0, see #103

Remove statsforecast from all_extras install temporarily because non-compliance with pandas==2.0.0

Increment lower bound of pandas to >=1.5.3

Forecasting

Removed hcrystalball wrapper #115

Renamed parameter sktime_model in the mlflow module to estimator.This parameter was renamed in the functions save_model and log_model. See #221

Forecaster VARMAX still requires pandas<2.0.0, will be relaxed in future releases.

Classification

kNN Classifier and Regressor reimplementations #66

  • With the removal of dists_kerns the kNN implementation had to be reworked somewhat. The old version was unnecessarily memory intensive, which has been improved. With this change comes the removal of some parameters used in the old implementation.

Remove ProximityForest classifier #86

  • This is an old implementation which crashes on the majority of UCR datasets, skips all testing and struggles to reach equivalence to its published results. While we would like an implementation of the algorithm, there is currently no one willing to maintain this version.

convolution_based rename #90

  • The kernel_based package has been renamed to the more commonly used (and applicable to the classifiers) convolution_based. RandomIntervalClassifier has also moved to interval_based.

Remove TimeSeriesSVC #105

  • This implementation is a wrapper of the sklearn SVC for distances. Elastic distances for time series data do not generate semi-positive definite kernels, which breaks SVC assumptions. The wrapper does not align with our outlook for the distances module and has been removed for now.

Remove fit_predict in BaseClassifier #117

  • fit_predict in BaseClassifier was an inefficient alternative to simply using scikit-learn cross validation that involved coverting everything to dataframes. We think it is easier to just use scikit-learn functionality rather than reinvent the wheel (inefficiently).

Remove plotting #127

  • The classification plotting folder adds a single file to draw a graph for CIF added without review. While we do want functionality for plotting, there was no framework or discussion with this niche and estimator specific addition.

Refactor ColumnEnsemble to ChannelEnsemble #162

  • The term column has relevance only for pandas, if the data are stored in numpy[n_cases][n_channels][n_timepoints], calling dimension 2 “column” makes no sense. After discussion on slack, we chose channel rather than dimension (because dimension overloads on dimension of the array)

For classification: Adding InceptionTime, CNN and ResNet along with other classifiers and removing LSTM-FCN #134

  • This is mostly new functionality, but some parameter names have been simplified, i.e. n_conv_layers > n_layers

Refactor DummyClassifier and Compose classifiers #163

  • This PR moved the dummy classifier to the base classification directory from classification/dummy.

Regression

kNN Classifier and Regressor reimplementations #66

  • See classification section.

convolution_based rename #90

  • See classification section.

Remove ComposableTimeSeriesForestRegressor #92

  • This regressor is a duplicate, and for a long time has been unusable on any dataset. The decision was made to remove it rather than maintain.

Datasets

make single problem loaders for equal length problems return numpy arrays #109

  • The default datatype for classification and clustering are 3D numpy arrays, so we have changed the default return type for these types of dataset. The option to return as a DataFrame is still available as a parameter.

Clustering

Clean up clustering module #132

Transformations

Refactored PCATransformer #26

Removed summary function mad in WindowSummarizer and SummaryTransformer as in pandas>=2.0.0 the function mad is not supported anymore #153

Remove the DistanceFeatures transformer #143

  • The distance features transformer was a wrapper for Dists_Kerns function, see #144.

Change output type of numerous Panel transformers #209, #185, #196.

  • Over time we will be changing the output type of Panel transformers to primary be numpy arrays where possible, rather than converting to DataFrames.

Alignment

Remove the alignment module #87

  • The alignment module used an external package (python_dtw) to find alignments between series in a complex set of classes. It was not used anywhere else in the toolkit. The distance functions already have the ability to extract an alignment, and they do it four times faster than python_dtw. If there is a use case for a more structured alignment module then it should be based on distances, but there have been no issues raised to provide one.

Dists_kerns

Removes the dist_kerns module 179

  • We are currently not willing to maintain this module, distance measures are still available in the distances module.

Tags

Add tags for estimators using the taxonomy of classification #129

  • classifier_type changed to algorithm_type for use with regression/clustering.

Maintenance

Documentation

Fixes

Refactored

Enhancements

Other

Contributors

@aiwalter, @chrisholder, @GuiArcencio, @hadifawaz1999, @haskarb, @lmmentel, @MatthewMiddlehurst, @patrickzib, @scorcism, @TonyBagnall