tsai
描述
最先进的时间序列和序列深度学习库。
tsai
是一个基于 Pytorch 和 fastai 的开源深度学习包,专注于时间序列任务(如分类、回归、预测、插补等)的最先进技术。
tsai
目前由 timeseriesAI 团队积极开发。
新功能:
在最近的几个版本中,以下是 tsai
的一些重要新增功能:
- 新模型:PatchTST(被 ICLR 2023 接收)、注意力机制的 RNN(RNNAttention、LSTMAttention、GRUAttention)、TabFusionTransformer 等等。
- 新数据集:我们增加了可以使用
tsai
下载的数据集数量:- 128 个单变量分类数据集
- 30 个多变量分类数据集
- 15 个回归数据集
- 62 个预测数据集
- 9 个长期预测数据集
- 新教程:PatchTST。 根据一些用户的请求,我们计划发布更多关于数据准备和预测的教程。
- 新功能:类似 sklearn 的流水线转换、前向交叉验证、减少 RAM 需求,以及大量新功能以执行更精确的时间序列预测。
- 支持 Pytorch 2.0。
安装
使用 Pip 安装
你可以通过 pip 安装 最新稳定 版本:
pip install tsai
如果你打算自己开发 tsai 或者想要使用最新的开发版本,你可以使用可编辑安装。首先安装 PyTorch,然后运行:
git clone https://github.com/timeseriesAI/tsai
pip install -e "tsai[dev]"
注意:从 tsai 0.3.0 版本开始,tsai 只会安装硬依赖。其他软依赖(仅为特定任务所需)将不会默认安装(这是推荐的方式。如果你需要任何未安装的依赖项,tsai 会在必要时提示你安装)。如果你仍然想安装 tsai 及其所有依赖项,可以运行:
pip install tsai[extras]
使用 Conda 安装
你也可以使用 conda 安装 tsai(请注意,如果你用 mamba 替换 conda,安装过程会更快且更可靠):
conda install -c timeseriesai tsai
文档
这里是 文档链接。
可用模型:
以下是 tsai
中一些最先进模型的列表:
- LSTM (Hochreiter, 1997) (论文)
- GRU (Cho, 2014) (论文)
- MLP - 多层感知机 (Wang, 2016) (论文)
- FCN - 全卷积网络 (Wang, 2016) (论文)
- ResNet - 残差网络 (Wang, 2016) (论文)
- LSTM-FCN (Karim, 2017) (论文)
- GRU-FCN (Elsayed, 2018) (论文)
- mWDN - 多级小波分解网络 (Wang, 2018) (论文)
- TCN - 时间卷积网络 (Bai, 2018) (论文)
- MLSTM-FCN - 多变量 LSTM-FCN (Karim, 2019) (论文)
- InceptionTime (Fawaz, 2019) (论文)
- Rocket (Dempster, 2019) (论文)
- XceptionTime (Rahimian, 2019) (论文)
- ResCNN - 1D-ResCNN (Zou , 2019) (论文)
- TabModel - 从 fastai 的 TabularModel 修改而来
- OmniScale - Omni-Scale 1D-CNN (Tang, 2020) (论文)
- TST - 时间序列 Transformer (Zerveas, 2020) (论文)
- TabTransformer (Huang, 2020) ([论文](https://
X, y, splits = get_classification_data('LSST', split_data=False)
tfms = [None, TSClassification()]
batch_tfms = TSStandardize(by_sample=True)
mv_clf = TSClassifier(X, y, splits=splits, path='models', arch="InceptionTimePlus", tfms=tfms, batch_tfms=batch_tfms, metrics=accuracy, cbs=ShowGraph())
mv_clf.fit_one_cycle(10, 1e-2)
mv_clf.export("mv_clf.pkl")
**推理:**
``` python
from tsai.inference import load_learner
mv_clf = load_learner("models/mv_clf.pkl")
probas, target, preds = mv_clf.get_X_preds(X[splits[1]], y[splits[1]])
多变量回归
训练:
from tsai.basics import *
X, y, splits = get_regression_data('AppliancesEnergy', split_data=False)
tfms = [None, TSRegression()]
batch_tfms = TSStandardize(by_sample=True)
reg = TSRegressor(X, y, splits=splits, path='models', arch="TSTPlus", tfms=tfms, batch_tfms=batch_tfms, metrics=rmse, cbs=ShowGraph(), verbose=True)
reg.fit_one_cycle(100, 3e-4)
reg.export("reg.pkl")
推理:
from tsai.inference import load_learner
reg = load_learner("models/reg.pkl")
raw_preds, target, preds = reg.get_X_preds(X[splits[1]], y[splits[1]])
ROCKETs(RocketClassifier, RocketRegressor, MiniRocketClassifier, MiniRocketRegressor, MiniRocketVotingClassifier 或 MiniRocketVotingRegressor)是有些不同的模型。它们实际上并不是深度学习模型(尽管它们使用卷积),并且使用方式也不同。
⚠️ 你还需要安装 sktime 才能使用它们。你可以单独安装:
pip install sktime
或者使用:
pip install tsai[extras]
训练:
from sklearn.metrics import mean_squared_error, make_scorer
from tsai.data.external import get_Monash_regression_data
from tsai.models.MINIROCKET import MiniRocketRegressor
X_train, y_train, *_ = get_Monash_regression_data('AppliancesEnergy')
rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)
reg = MiniRocketRegressor(scoring=rmse_scorer)
reg.fit(X_train, y_train)
reg.save('MiniRocketRegressor')
推理:
from sklearn.metrics import mean_squared_error
from tsai.data.external import get_Monash_regression_data
from tsai.models.MINIROCKET import load_minirocket
*_, X_test, y_test = get_Monash_regression_data('AppliancesEnergy')
reg = load_minirocket('MiniRocketRegressor')
y_pred = reg.predict(X_test)
mean_squared_error(y_test, y_pred, squared=False)
预测
你可以在以下场景中使用 tsai 进行预测:
- 单变量或多变量时间序列输入
- 单变量或多变量时间序列输出
- 单步或多步预测
你需要:* 准备 X(时间序列输入)和目标 y(参见文档) * 选择 PatchTST 或 tsai 以 Plus 结尾的模型之一(TSTPlus,InceptionTimePlus,TSiTPlus 等)。该模型将自动配置一个 head,以生成与目标输入 y 形状相同的输出。
单步预测
训练:
from tsai.basics import *
ts = get_forecasting_time_series("Sunspots").values
X, y = SlidingWindow(60, horizon=1)(ts)
splits = TimeSplitter(235)(y)
tfms = [None, TSForecasting()]
batch_tfms = TSStandardize()
fcst = TSForecaster(X, y, splits=splits, path='models', tfms=tfms, batch_tfms=batch_tfms, bs=512, arch="TSTPlus", metrics=mae, cbs=ShowGraph())
fcst.fit_one_cycle(50, 1e-3)
fcst.export("fcst.pkl")
推理:
from tsai.inference import load_learner
fcst = load_learner("models/fcst.pkl", cpu=False)
raw_preds, target, preds = fcst.get_X_preds(X[splits[1]], y[splits[1]])
raw_preds.shape
# torch.Size([235, 1])
多步预测
此示例显示如何构建 3 步预测的单变量预测。
训练:
from tsai.basics import *
ts = get_forecasting_time_series("Sunspots").values
X, y = SlidingWindow(60, horizon=3)(ts)
splits = TimeSplitter(235, fcst_horizon=3)(y)
tfms = [None, TSForecasting()]
batch_tfms = TSStandardize()
fcst = TSForecaster(X, y, splits=splits, path='models', tfms=tfms, batch_tfms=batch_tfms, bs=512, arch="TSTPlus", metrics=mae, cbs=ShowGraph())
fcst.fit_one_cycle(50, 1e-3)
fcst.export("fcst.pkl")
推理:
from tsai.inference import load_learner
fcst = load_learner("models/fcst.pkl", cpu=False)
raw_preds, target, preds = fcst.get_X_preds(X[splits[1]], y[splits[1]])
raw_preds.shape
# torch.Size([235, 3])
输入数据格式
tsai 中所有时间序列模型和图像模型的输入格式相同。一个具有 3 个维度的 np.ndarray(或类似数组对象,如 zarr 等):
[# 样本数 x 变量数 x 序列长度]
tsai 中的表格模型(如 TabModel,TabTransformer 和 TabFusionTransformer)的输入格式为 pandas dataframe。参见示例。
如何贡献给 tsai?
我们欢迎各种形式的贡献。开发增强功能、修复 bug、编写文档、制作教程笔记本等。
我们创建了一份指南,帮助你开始为 tsai 做贡献。你可以在此阅读它。
企业支持和咨询服务:
想要在专业环境中最大限度地利用 timeseriesAI/tsai?让我们来帮助你。发送电子邮件了解更多信息: info@timeseriesai.co
引用 tsai
如果你在研究中使用 tsai,请使用以下 BibTeX 条目:
@Misc{tsai,
author = {Ignacio Oguiza},
title = {tsai - A state-of-the-art deep learning library for time series and sequential data},
howpublished = {Github},
year = {2023},
url = {https://github.com/timeseriesAI/tsai}
}