Skip to main content

基于 fastai 和 Pytorch 的时间序列/序列数据库的实用深度学习

项目描述


CI 派皮 DOI 公关

描述

用于时间序列和序列的最先进的深度学习库。

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 月

  • 请参阅我们的新教程笔记本,了解如何使用权重和偏差跟踪您的实验 在 Colab 中打开

  • tsai使用新的类似 sklearn 的 API 变得更容易使用:TSClassifierTSRegressorTSForecaster!! 有关更多信息,请参阅内容。

  • 新的教程笔记本,介绍如何在更短的时间内使用大于内存的数据集训练模型,实现高达 100% 的 GPU 使用率!! 在 Colab 中打开

  • tsai现在支持更多输入格式:np.array, np.memmap, zarr, xarray, dask, list, L, ...

之前

  • MINIROCKET一个 SOTA 时间序列分类模型(现在在 Pytorch 中可用):您现在可以在我们的新教程笔记本中检查 MiniRocket 的性能在 Colab 中打开

“使用这种方法,可以在不到 10 分钟的时间内在 UCR 档案中的所有 109 个数据集上训练和测试分类器,达到最先进的精度。” A.登普斯特等人。(2020 年 12 月)

  • 多类多标签时间序列分类笔记本:您还可以查看我们新的教程笔记本:在 Colab 中打开

  • 自监督学习:了解如何利用未标记的数据集在 Colab 中打开

  • 新的可视化: 我们还添加了一个新的 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

除其他外!

如何开始使用 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}
}

项目详情