Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/levperla/time_series_prediction_rnn
📈 Library for time series forecasting with RNN
https://github.com/levperla/time_series_prediction_rnn
deep-learning keras lstm rnn time-series
Last synced: 3 months ago
JSON representation
📈 Library for time series forecasting with RNN
- Host: GitHub
- URL: https://github.com/levperla/time_series_prediction_rnn
- Owner: LevPerla
- License: mit
- Created: 2020-04-11T14:04:18.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2022-12-28T11:18:08.000Z (about 2 years ago)
- Last Synced: 2024-10-10T15:18:04.248Z (3 months ago)
- Topics: deep-learning, keras, lstm, rnn, time-series
- Language: Jupyter Notebook
- Homepage:
- Size: 2.31 MB
- Stars: 5
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: License.txt
Awesome Lists containing this project
README
# Time_Series_Prediction_RNN
![code-size][code-size]
![license][license][code-size]: https://img.shields.io/github/languages/code-size/LevPerla/Time_Series_Prediction_RNN
[license]: https://img.shields.io/badge/license-MIT-green
## Requirements
ts_rnn requires the following to run:
* [Python](node) 3.7.3+
## Installation
### From pip
You could install the latest version from PyPi:
```sh
pip install ts-rnn
```### From Github
You could install the latest version directly from Github:
```sh
pip install https://github.com/LevPerla/Time_Series_Prediction_RNN/archive/master.zip
```### From source
Download the source code by cloning the repository or by pressing ['Download ZIP'](https://github.com/pandas-profiling/pandas-profiling/archive/master.zip) on this page.Install by navigating to the proper directory and running:
```sh
python setup.py install
```
## Example
[Example](https://github.com/LevPerla/Time_Series_Prediction_RNN/blob/master/notebooks/Example.ipynb)
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/LevPerla/Time_Series_Prediction_RNN/blob/master/notebooks/Example.ipynb)## Documentation
### Getting started
To import TS_RNN model run```python
from ts_rnn.model import TS_RNN
```First of all, we need to set architecture of RNN in config in the way like this:
```python
rnn_arch = {"layers": [
["LSTM", {"units": 64,
"return_sequences": False,
"kernel_initializer": "glorot_uniform",
"activation": "linear"}],
["Dropout", {"rate": 0.2}],
["Dense", {"activation": "linear"}]
]}
```> **WARNING**: *Last RNN block need to gave return_sequences: False, another - True*
#### To set the architecture of RNN you can use some of this blocks:
```python
# LSTM block
["LSTM", {Keras layer params}],
["GRU", {Keras layer params}],
["SimpleRNN", {Keras layer params}],
["Bidirectional", {Keras layer params}],
["Dropout", {Keras layer params}],
["Dense", {Keras layer params}]
```### TS_RNN class has 7 attributes:
- n_lags - length of the input vector;
- horizon - length of prediction horizon;
- rnn_arch - description of the model's parameters in Python dictionary format;
- strategy - prediction strategy: "Direct", "Recursive", "MiMo", "DirRec", "DirMo"
- tuner - tupe of Keras.tuner: "RandomSearch", "BayesianOptimization", "Hyperband"
- tuner_hp - keras_tuner.HyperParameters class
- n_step_out - length of the output vector (Need to define only for DirMo strategy);
- loss - Keras loss to train model;
- optimizer - Keras optimizer to train model.
- n_features - number of time series in the input (only for factors forecasting);
- save_dir - dir to save logs
#### You can set model this way:
```python
model = TS_RNN(rnn_arch=rnn_arch, # dict with model architecture
n_lags=12, # length of the input vector
horizon=TEST_LEN, # length of prediction horizon
strategy="MiMo", # Prediction strategy from "Direct", "Recursive", "MiMo", "DirRec", "DirMo"
loss="mae", # Keras loss
optimizer="adam", # Keras optimizer
n_features=X_train.shape[1] # also you need to define this if use factors
)
```### TS_RNN supports 5 methods:
- fit - train the neural network;
- predict - predict by the neural network by input;
- forecast - predict by the neural network by last train values;
- summary - print NNs architecture
- save - save model files to dict
FIT
```python
my_callbacks = [callbacks.EarlyStopping(patience=30, monitor='val_loss')]model.fit(factors_train=factors_val, # pd.DataFrame with factors time series
target_train=target_val, # pd.DataFrame or pd.Series with target time series
factors_val=factors_val, # pd.DataFrame with factors time series
target_val=target_val, # pd.DataFrame or pd.Series with target time series
epochs=100, # num epoch to train
batch_size=12, # batch_size
callbacks=my_callbacks, # Keras callbacks
save_dir="../your_folder", # folder to image save
verbose=2) # verbose
```PREDICT
```python
predicted = model.predict(factors=factors_to_pred,
target=target_to_pred,
prediction_len=len(y_test))
```FORECAST
```python
predicted = model.forecast(prediction_len=HORIZON)
```SUMMARY
```python
model.summary()
```SAVE
```python
model.save(model_name='tsrnn_model', save_dir='path')
```Also you may load TS_RNN model from folder
```python
from ts_rnn.model import load_ts_rnnmodel = load_ts_rnn(os.path.join('path', 'tsrnn_model'))
```### Simple example of usage:
> **Info**: For better performance use MinMaxScaler and Deseasonalizer before fitting
```python
from sklearn.model_selection import train_test_split
from ts_rnn.model import TS_RNN
import pandas as pdHORIZON = 12
data_url = "https://raw.githubusercontent.com/LevPerla/Time_Series_Prediction_RNN/master/data/series_g.csv"
target = pd.read_csv(data_url, sep=";").series_g
target_train, target_test = train_test_split(target, test_size=HORIZON, shuffle=False)model = TS_RNN(n_lags=12, horizon=HORIZON)
model.fit(target_train=target_train,
target_val=target_test,
epochs=40,
batch_size=12,
verbose=1)model.summary()
predicted = model.predict(target=target_train[-model.n_lags:], prediction_len=HORIZON)
```