多变量时间序列无监督可扩展表示学习 -- 代码
这是与"多变量时间序列无监督可扩展表示学习"(Jean-Yves Franceschi, Aymeric Dieuleveut 和 Martin Jaggi)工作相关的实验代码[NeurIPS] [arXiv] [HAL],该工作在 NeurIPS 2019 上展示。 之前的版本在 ICLR 2019 的第二届 LLD 研讨会上发表。
要求
实验使用以下 Python 3.6 的软件包版本:
- Numpy (
numpy
) v1.15.2; - Matplotlib (
matplotlib
) v3.0.0; - Orange (
Orange
) v3.18.0; - Pandas (
pandas
) v0.23.4; python-weka-wrapper3
v0.1.6 用于多变量时间序列(需要 Oracle JDK 8 或 OpenJDK 8);- PyTorch (
torch
) v0.4.1 with CUDA 9.0; - Scikit-learn (
sklearn
) v0.20.0; - Scipy (
scipy
) v1.1.0.
这些软件包的更新版本应该也能正确运行此代码。
数据集
本代码使用的数据集可以从以下位置下载:
- UCR 档案: https://www.cs.ucr.edu/~eamonn/time_series_data_2018/;
- UEA 档案: http://www.timeseriesclassification.com/;
- 个人家庭电力消耗数据集: https://archive.ics.uci.edu/ml/datasets/individual+household+electric+power+consumption.
文件
核心
losses
文件夹: 实现了三元组损失函数,适用于所有时间序列长度相同的训练集和时间序列长度不等的训练集;networks
文件夹: 实现了编码器及其构建块(扩张卷积、因果 CNN);scikit_wrappers.py
文件: 实现了继承 Scikit-learn 分类器的类,包装了一个编码器和一个 SVM 分类器。utils.py
文件: 实现了自定义 PyTorch 数据集;default_hyperparameters.json
文件: 包含(编码器, 分类器)对超参数的 JSON 文件示例。
测试
ucr.py
文件: 处理 UCR 档案的学习(使用方法见下文);uea.py
文件: 处理 UEA 档案的学习(使用方法见下文);transfer_ucr.py
文件: 处理 UCR 档案的迁移学习(使用方法见下文);combine_ucr.py
文件: 组合 UCR 档案的学习(编码器, 分类器)对(使用方法见下文);combine_uea.py
文件: 组合 UEA 档案的学习(编码器, 分类器)对(使用方法见下文);sparse_labeling.ipynb
文件: 包含在我们的表示上训练 SVM 的代码,用于不同数量的可用标签;HouseholdPowerConsumption.ipynb
文件: 包含个人家庭电力消耗数据集实验的 Jupyter 笔记本。
结果和可视化
results_ucr.csv
文件: 汇编了 UCR 档案上的所有结果(包括竞争方法的结果)的 CSV 文件;results_uea.csv
文件: 汇编了 UEA 档案上的所有结果(包括竞争方法的结果)的 CSV 文件;results_sparse_labeling_TwoPatterns.csv
文件: 汇编了在我们的表示和论文中描述的 ResNet 架构上学习 SVM 的五次运行的平均值和标准差,用于不同数量的可用标签;cd.ipynb
文件: 包含生成临界差异图的代码的 Jupyter 笔记本;stat_plots.ipynb
文件: 包含生成 UCR 档案结果箱线图和直方图的代码的 Jupyter 笔记本;models
文件夹: 包含 UCR 数据集 CricketX 的预训练模型。
使用方法
在 UCR 和 UEA 档案上训练
要在 UCR 档案的 Mallat 数据集上训练模型:
python3 ucr.py --dataset Mallat --path path/to/Mallat/folder/ --save_path /path/to/save/models --hyper default_hyperparameters.json [--cuda --gpu 0]
添加 --load
选项可以从指定的保存路径加载模型。
使用 uea.py
在 UEA 档案上训练的方法类似。
更多文档
更多详细信息请参阅代码文档。可以使用 -h
选项调用 ucr.py
、uea.py
、transfer_ucr.py
、combine_ucr.py
和 combine_uea.py
获取额外帮助。
超参数
超参数在论文的 S2.2 节中有描述。
对于 UCR 和 UEA 的超参数,有两个值被错误地互换了。 应该如示例配置文件所示:
- 因果网络的输出通道数(最大池化前): 160;
- 表示的维度: 320.
而不是
- 因果网络的输出通道数(最大池化前): 320;
- 表示的维度: 160.
预训练模型
预训练模型可以在 https://data.lip6.fr/usrlts/ 下载。