跳转到主要内容

Python实现的soft-DTW

项目描述

Python实现的soft-DTW。

这是什么?

著名的动态时间规整(DTW)[1] 定义了两条时间序列之间的差异,为可能可变长度的序列,作为它们的最小对齐成本。尽管可能的对齐数量是两个时间序列长度的指数级,[1] 显示DTW可以使用动态规划以二次时间计算。

Soft-DTW [2] 提出用软最小值来替换这个最小值。像原始DTW一样,Soft-DTW可以使用动态规划以二次时间计算。然而,Soft-DTW的主要优势在于它处处可微分,并且其梯度也可以以二次时间计算。这使得可以使用Soft-DTW进行时间序列平均或作为损失函数,在真实时间序列和由神经网络预测的时间序列之间,该神经网络通过反向传播从头到尾进行训练。

支持的功能

  • soft-DTW(正向传递)和梯度(反向传递)计算,使用Cython实现以提高速度

  • 重心(时间序列平均)

  • UCR存档的数据集加载器

  • Chainer函数

计划的功能

  • PyTorch函数

示例

from sdtw import SoftDTW
from sdtw.distance import SquaredEuclidean

# Time series 1: numpy array, shape = [m, d] where m = length and d = dim
X = ...
# Time series 2: numpy array, shape = [n, d] where n = length and d = dim
Y = ...

# D can also be an arbitrary distance matrix: numpy array, shape [m, n]
D = SquaredEuclidean(X, Y)
sdtw = SoftDTW(D, gamma=1.0)
# soft-DTW discrepancy, approaches DTW as gamma -> 0
value = sdtw.compute()
# gradient w.r.t. D, shape = [m, n], which is also the expected alignment matrix
E = sdtw.grad()
# gradient w.r.t. X, shape = [m, d]
G = D.jacobian_product(E)

安装

没有可用的二进制包。

可以从其git存储库安装此项目。假设您有一个工作的C编译器。

  1. 通过以下方式获取源代码:

    git clone https://github.com/mblondel/soft-dtw.git

或者,如果没有git,可以从GitHub下载ZIP文件

  1. 安装依赖项

    # via pip
    
    pip install numpy scipy scikit-learn cython nose
    
    
    # via conda
    
    conda install numpy scipy scikit-learn cython nose
  2. 构建和安装soft-dtw

    cd soft-dtw
    python setup.py install

参考

作者

  • Mathieu Blondel,2017

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

soft-dtw-0.1.6.tar.gz (58.1 kB 查看哈希值)

上传时间 源代码

构建分发

soft_dtw-0.1.6-cp36-cp36m-macosx_10_13_x86_64.whl (29.3 kB 查看哈希值)

上传时间 CPython 3.6m macOS 10.13+ x86-64

由以下支持