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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
|