基于 fastai 和 Pytorch 的时间序列/序列数据库的实用深度学习
项目描述
蔡
描述
用于时间序列和序列的最先进的深度学习库。
tsai
是一个基于 Pytorch 和 fastai 的开源深度学习包,专注于时间序列任务的最先进技术,如分类、回归、预测、插补......
tsai
目前正在由 timeseriesAI 积极开发。
什么是新的:
2022 年 3 月
- ⚡️ 从tsai 0.3.0开始,通过更好地使用依赖项,您将获得更快的安装和导入。
- 新的可视化方法:learn.feature_importance() 和 learn.step_importance() 将帮助您更好地了解模型的工作原理。
- 新的校准模型:learn.calibrate_model() 用于时间序列分类任务。
2021 年 11 月
- ✅ 从回顾 Kaggle 最新的时间序列竞赛中学到了一些知识(有关更多详细信息,请参阅 Medium博客文章),例如:
- 改进的 RNN 初始化(基于https://www.kaggle.com/junkoda共享的内核)
- 添加了将特征提取器传递给 RNNPlus 和 TSiT(Transformer)模型的选项。
- 创建了一个 MultiConv 层,该层允许将原始特征与一个或多个卷积层的输出并行连接。
2021 年 9 月
-
tsai
使用新的类似 sklearn 的 API 变得更容易使用:TSClassifier
、TSRegressor
和TSForecaster
!! 有关更多信息,请参阅此内容。 -
tsai
现在支持更多输入格式:np.array, np.memmap, zarr, xarray, dask, list, L, ...
之前
“使用这种方法,可以在不到 10 分钟的时间内在 UCR 档案中的所有 109 个数据集上训练和测试分类器,达到最先进的精度。” A.登普斯特等人。(2020 年 12 月)
-
新的可视化: 我们还添加了一个新的 PredictionDynamics 回调,它将在训练期间显示预测。这是您将在分类任务中获得的输出类型,例如:
安装
您可以使用以下命令从 pip安装最新的稳定版本:
pip install tsai
或者,您可以通过执行以下操作从 github 安装此库的最新版本:
pip install git+https://github.com/timeseriesAI/tsai.git
安装完成后,只需运行:
from tsai.all import *
注意:从 tsai 0.3.0 开始,tsai 只会安装硬依赖。其他软依赖项(仅选定任务需要)默认不会安装(这是推荐的方法。如果您需要任何未安装的依赖项,tsai 会在必要时要求您安装)。如果您仍然想安装 tsai 及其所有依赖项,您可以通过运行:
pip install tsai[extras]
文档
这是文档的链接。
可用型号:
以下是一些可用的最先进模型的列表tsai
:
- LSTM(Hochreiter,1997)(论文)
- GRU (Cho, 2014) (论文)
- MLP - 多层感知器(Wang,2016)(论文)
- FCN - 全卷积网络(Wang,2016)(论文)
- ResNet - 残差网络(Wang,2016)(论文)
- LSTM-FCN(卡里姆,2017)(论文)
- GRU-FCN(Elsayed,2018 年)(论文)
- mWDN - 多级小波分解网络(Wang,2018)(论文)
- TCN - 时间卷积网络(Bai,2018)(论文)
- MLSTM-FCN - 多变量 LSTM-FCN(Karim,2019)(论文)
- InceptionTime(Fawaz,2019)(论文)
- 火箭(Dempster,2019)(论文)
- XceptionTime(Rahimian,2019)(论文)
- ResCNN - 1D-ResCNN(邹,2019)(论文)
- TabModel - 从 fastai 的TabularModel修改而来
- OmniScale - Omni-Scale 1D-CNN (Tang, 2020) (论文)
- TST - 时间序列变压器(Zerveas,2020)(论文)
- TabTransformer(黄,2020)(论文)
- MiniRocket (Dempster, 2021) (纸)
- XCM - An Explainable Convolutional Neural Network (Fauvel, 2021)(论文)
- gMLP - 门控多层感知器(Liu,2021)(论文)
- GatedTabTransformer (Cholakov, 2022) (论文)
除其他外!
如何开始使用 tsai?
要了解 tsai 包,我们建议您从 Google Colab 中的这个笔记本开始:01_Intro_to_Time_Series_Classification 它提供了时间序列分类任务的概述。
我们还开发了许多其他教程笔记本。
要在你自己的 notebook 中使用 tsai,在安装包后你唯一需要做的就是运行这个:
from tsai.all import *
例子
这些只是您可以如何使用的几个示例tsai
:
二元、单变量分类
训练:
from tsai.all import *
X, y, splits = get_classification_data('ECG200', split_data=False)
batch_tfms = TSStandardize()
clf = TSClassifier(X, y, splits=splits, path='models', arch=InceptionTimePlus, batch_tfms=batch_tfms, metrics=accuracy, cbs=ShowGraph())
clf.fit_one_cycle(100, 3e-4)
clf.export("clf.pkl")
推理:
from tsai.inference import load_learner
clf = load_learner("models/clf.pkl")
probas, target, preds = clf.get_X_preds(X[splits[0]], y[splits[0]])
多类、多变量分类
训练:
from tsai.all import *
X, y, splits = get_classification_data('LSST', split_data=False)
batch_tfms = TSStandardize(by_sample=True)
mv_clf = TSClassifier(X, y, splits=splits, path='models', arch=InceptionTimePlus, batch_tfms=batch_tfms, metrics=accuracy, cbs=ShowGraph())
mv_clf.fit_one_cycle(10, 1e-2)
mv_clf.export("mv_clf.pkl")
推理:
from tsai.inference import load_learner
mv_clf = load_learner("models/mv_clf.pkl")
probas, target, preds = mv_clf.get_X_preds(X[splits[0]], y[splits[0]])
多元回归
训练:
from tsai.all import *
X, y, splits = get_regression_data('AppliancesEnergy', split_data=False)
batch_tfms = TSStandardize(by_sample=True)
reg = TSRegressor(X, y, splits=splits, path='models', arch=TSTPlus, 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[0]], y[splits[0]])
ROCKET(RocketClassifier、RocketRegressor、MiniRocketClassifier、MiniRocketRegressor、MiniRocketVotingClassifier 或 MiniRocketVotingRegressor)是有些不同的模型。它们实际上不是深度学习模型(尽管它们使用卷积)并且以不同的方式使用。
⚠️ 您还需要安装 sktime 才能使用它们。您可以单独安装或使用:
pip install tsai[extras]
训练:
from tsai.all import *
from sklearn.metrics import mean_squared_error
X_train, y_train, X_test, y_test = get_regression_data('AppliancesEnergy')
rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)
mr_reg = MiniRocketRegressor(scoring=rmse_scorer)
mr_reg.fit(X_train, y_train)
mr_reg.save("minirocket_regressor")
推理:
mr_reg = load_rocket("minirocket_regressor")
y_pred = mr_reg.predict(X_test)
mean_squared_error(y_test, y_pred, squared=False)
预测
您可以在以下情况下使用 tsai 进行预测:
- 单变量或多变量时间序列输入
- 单变量或多变量时间序列输出
- 单步或多步
您需要:
- 准备 X(时间序列输入)和目标 y(参见文档)
- 选择一个以 Plus 结尾的 tsai 模型(TSTPlus、InceptionTimePlus、TSiTPlus 等)。该模型将自动配置头部以产生与目标输入 y 具有相同形状的输出。
一小步
训练:
from tsai.all import *
ts = get_forecasting_time_series("Sunspots").values
X, y = SlidingWindow(60, horizon=1)(ts)
splits = TimeSplitter(235)(y)
batch_tfms = TSStandardize()
fcst = TSForecaster(X, y, splits=splits, path='models', 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[0]], y[splits[0]])
raw_preds.shape
输出:torch.Size([2940, 1])
多重步骤
此示例展示了如何构建提前 3 步的单变量预测。
训练:
from tsai.all import *
ts = get_forecasting_time_series("Sunspots").values
X, y = SlidingWindow(60, horizon=3)(ts)
splits = TimeSplitter(235)(y)
batch_tfms = TSStandardize()
fcst = TSForecaster(X, y, splits=splits, path='models', 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[0]], y[splits[0]])
raw_preds.shape
输出:torch.Size([2938, 3])
输入数据格式
tsai 中所有时间序列模型和图像模型的输入格式是相同的。具有 3 个维度的 np.ndarray(或类似数组的对象,如 zarr 等):
[# 样本 x # 变量 x 序列长度]
tsai 中表格模型(如 TabModel、TabTransformer 和 TabFusionTransformer)的输入格式是 pandas 数据框。见例子。
如何为蔡做贡献?
我们欢迎各种贡献。开发增强功能、错误修复、文档、教程笔记本……
我们创建了一个指南来帮助您开始为 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 = {2022},
url = {https://github.com/timeseriesAI/tsai}
}