Meta-Learning for Time Series Forecasting
Project description
MetaTS | Meta-Learning for Global Time Series Forecasting
Features:
- Generating meta features
- Statistical features : TsFresh, User defined features
- Automated feature extraction using Deep Unsupervised Learning : Deep AutoEncoder (MLP, LSTM, GRU, ot custom model)
- Supporting sktime and darts libraries for base-forecasters
- Providing a Meta-Learning pipeline
Quick Start
Installing the package
pip install metats
Generating a toy dataset by sampling from two different processes
from metats.datasets import ETSDataset
ets_generator = ETSDataset({'A,N,N': 512,
'M,M,M': 512}, length=30, freq=4)
data, labels = ets_generator.load(return_family=True)
colors = list(map(lambda x: (x=='A,N,N')*1, labels))
Normalizing the time series
from sklearn.preprocessing import StandardScaler
scaled_data = StandardScaler().fit_transform(data.T)
data = scaled_data.T[:, :, None]
Checking How data looks like
import matplotlib.pyplot as plt
_ = plt.plot(data[10, :, 0])
Generating the meta-features
Statistical features using TsFresh
from metats.features.statistical import TsFresh
stat_features = TsFresh().transform(data)
Deep Unsupervised Features
Training an AutoEncoder
from metats.features.unsupervised import DeepAutoEncoder
from metats.features.deep import AutoEncoder, MLPEncoder, MLPDecoder
enc = MLPEncoder(input_size=1, input_length=30, latent_size=8, hidden_layers=(16,))
dec = MLPDecoder(input_size=1, input_length=30, latent_size=8, hidden_layers=(16,))
ae = AutoEncoder(encoder=enc, decoder=dec)
ae_feature = DeepAutoEncoder(auto_encoder=ae, epochs=150, verbose=True)
ae_feature.fit(data)
Generating features using the auto-encoder
deep_features = ae_feature.transform(data)
Visualizing both statistical and deep meta-features
Dimensionality reduction using UMAP for visualization
from umap import UMAP
deep_reduced = UMAP().fit_transform(deep_features)
stat_reduced = UMAP().fit_transform(stat_features)
Visualizing the statistical features:
plt.scatter(stat_reduced[:512, 0], stat_reduced[:512, 1], c='#e74c3c', label='ANN')
plt.scatter(stat_reduced[512:, 0], stat_reduced[512:, 1], c='#9b59b6', label='MMM')
plt.legend()
plt.title('TsFresh Meta-Features')
_ = plt.show()
And similarly the auto encoder's features
plt.scatter(deep_reduced[:512, 0], deep_reduced[:512, 1], c='#e74c3c', label='ANN')
plt.scatter(deep_reduced[512:, 0], deep_reduced[512:, 1], c='#9b59b6', label='MMM')
plt.legend()
plt.title('Deep Unsupervised Meta-Features')
_ = plt.show()
Meta-Learning Pipeline
Creating a meta-learning pipeline with selection strategy:
from metats.pipeline import MetaLearning
pipeline = MetaLearning(method='selection', loss='mse')
Adding AutoEncoder features:
from metats.features.unsupervised import DeepAutoEncoder
from metats.features.deep import AutoEncoder, MLPEncoder, MLPDecoder
enc = MLPEncoder(input_size=1, input_length=23, latent_size=8, hidden_layers=(16,))
dec = MLPDecoder(input_size=1, input_length=23, latent_size=8, hidden_layers=(16,))
ae = AutoEncoder(encoder=enc, decoder=dec)
ae_features = DeepAutoEncoder(auto_encoder=ae, epochs=200, verbose=True)
pipeline.add_feature(ae_features)
You can add as many features as you like:
from metats.features.statistical import TsFresh
stat_features = TsFresh()
pipeline.add_feature(stat_features)
Adding two sktime forecaster as base-forecasters
from sktime.forecasting.naive import NaiveForecaster
from sktime.forecasting.compose import make_reduction
from sklearn.neighbors import KNeighborsRegressor
regressor = KNeighborsRegressor(n_neighbors=1)
forecaster1 = make_reduction(regressor, window_length=15, strategy="recursive")
forecaster2 = NaiveForecaster()
pipeline.add_forecaster(forecaster1)
pipeline.add_forecaster(forecaster2)
Specify some meta-learner
from sklearn.ensemble import RandomForestClassifier
pipeline.add_metalearner(RandomForestClassifier())
Training the pipeline
pipeline.fit(data, fh=7)
Prediction for another set of data
pipeline.predict(data, fh=7)
About the package
Contributors
- Sasan Barak
- Amirabbas Asadi
We wish to see your name in the list of contributors, So we are waiting for pull requests!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
metats-0.2.1.tar.gz
(16.9 kB
view details)
Built Distribution
metats-0.2.1-py3-none-any.whl
(16.7 kB
view details)
File details
Details for the file metats-0.2.1.tar.gz
.
File metadata
- Download URL: metats-0.2.1.tar.gz
- Upload date:
- Size: 16.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.65.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 941cc8245be1b5599cd91a2ae5bf88db19a075a0b223387ee8c46c9325b6d27c |
|
MD5 | 120ddafd18251e6dbc172b7b74d97bc9 |
|
BLAKE2b-256 | df834c9d15851cc5d10d90136a9aa691212cc1fd5dd8dc7840b56ccce58762f0 |
File details
Details for the file metats-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: metats-0.2.1-py3-none-any.whl
- Upload date:
- Size: 16.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.65.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | db2124dcc6034a3d682469b4106750de926ae1066025dbef3576394cfd0915ce |
|
MD5 | cd87eb75b3858794e834e98dcaa29543 |
|
BLAKE2b-256 | ca4167430b8b854556a07199f06b7bc444a9f782c9f015c660d6c7dc20071cd4 |