标签: dtw

时间序列距离度量

为了聚类一组时间序列,我正在寻找智能距离度量.我尝试了一些众所周知的指标,但没有人适合我的情况.

例:我们假设我的聚类算法提取了这三个质心[s1,s2,s3]: 在此输入图像描述

我想把这个新的例子[sx]放在最相似的集群中:

在此输入图像描述

最相似的质心是第二个,所以我需要找到一个给我d(sx, s2) < d(sx, s1)和我的距离函数dd(sx, s2) < d(sx, s3)

编辑

这里的结果与指标[余弦,欧几里德,闵可夫斯基,动态类型翘曲] 在此输入图像描述] 3

编辑2

用户Pietro P建议在时间序列累积版本上应用距离 解决方案的工作原理,这里是图表和指标: 在此输入图像描述

distance hierarchical-clustering time-series dtw

8
推荐指数
1
解决办法
2826
查看次数

不同库的不同结果和性能

我正在比较用于 DTW 计算的库dtaidistancefastdtwcdtw。这是我的代码:

from fastdtw import fastdtw
from cdtw import pydtw
import fastdtw
import array
from timeit import default_timer as timer
from dtaidistance import dtw, dtw_visualisation as dtwvis

s1 = mySampleSequences[0] # first sample sequence consisting of 3000 samples
s2 = mySampleSequences[1] # second sample sequence consisting of 3000 samples

start = timer()
distance1 = dtw.distance(s1, s2)
end = timer()
start2 = timer()
distance2 = dtw.distance_fast(array.array('d',s1),array.array('d',s2))
end2 = timer()
start3 = timer()
distance3, path3 …
Run Code Online (Sandbox Code Playgroud)

python dtw

6
推荐指数
1
解决办法
1695
查看次数

比较 MFCC 特征向量与 DTW

我正在寻找有关动态时间扭曲 (DTW) 的一些建议。

我有一个 Python 脚本并从各种长度的 .WAV 文件中提取梅尔频率倒谱系数 (MFCC) 特征向量。特征向量是不同长度的数组,包含 12 个 MFCC 的数组。

例如,一个 .WAV 文件可以由包含 10 个 12 个特征向量的 10 组的数组表示,而另一个 .WAV 文件可以由包含 20 个 12 个特征向量的一组数组表示。

我打算使用 DTW 来比较两个数组数组,但我不确定如何。我理解 DTW 的概念,如果数组中包含的特征向量是单个数字,那么实现它就没有问题,我的困惑是因为它们是数组。

Tl; dr:如何使用 DTW 比较两个数组数组?

编辑:我已阅读问题但无济于事。

非常感谢,亚当

audio speech-recognition dynamic-programming mfcc dtw

5
推荐指数
1
解决办法
3659
查看次数

Tensorflow 中的动态时间扭曲实现

我已经将动态时间扭曲实现从普通 python 重写为 Tensorflow。但它确实很慢——比预先计算距离并将其作为数据加载到 Tensorflow 中慢得多。我不明白为什么它很慢或如何改进它。

我还尝试使用签名转换其他 DTW 实现,但没有成功。有什么建议么?

def tfDTW(s1, s2):
  r = tf.cast(tf.shape(s1)[0], tf.int32)
  c = tf.cast(tf.shape(s2)[0], tf.int32)
  window = tf.math.reduce_max([r,c])
  max_step = max_dist = 1e7
  penalty = psi = tf.constant(0, dtype=tf.float64)
  length =  tf.math.reduce_min([c + 1, tf.math.abs(r - c) + 2 * (window - 1) + 1 + 1 + 1])
  indices = [0,-1]
  dtw = tf.one_hot(indices, depth = length,
             on_value=0.0, off_value=1e7,
             axis=-1)  # output: [2,length]
  dtw=tf.cast(dtw, tf.float64)
  last_under_max_dist = tf.constant(0)
  skip = tf.constant(0)
  i0 …
Run Code Online (Sandbox Code Playgroud)

python tensorflow dtw

5
推荐指数
1
解决办法
2267
查看次数

聚类相似的时间序列?

我有10-20k个不同的时间序列(24维数据-一天中的每个小时的一列)之间的某个地方,我对聚类的时间序列表现出大致相同的活动模式感兴趣。

我最初开始实施动态时间规整(DTW),因为:

  1. 并非我所有的时间序列都完全对齐
  2. 就我而言,两个略有偏移的时间序列应视为相似
  3. 具有相同形状但比例不同的两个时间序列应被视为相似

我使用DTW遇到的唯一问题是,它似乎无法很好地扩展- fastdtw在500x500的距离矩阵上花费了大约30分钟。

还有哪些其他方法可以帮助我满足条件2和3?

python cluster-analysis machine-learning time-series dtw

5
推荐指数
1
解决办法
167
查看次数

如何使用 DTW - 动态时间扭曲在 python 中对齐多个时间序列(不仅仅是 2 个)?

我发现这两篇文章讨论使用动态时间扭曲或 DTW 来对齐多个“n”个时间序列。

如何在 python 中在 3 个或更多信号之间应用/实现动态时间规整 (DTW) 或快速动态时间规整 (FastDTW)? 使用 numpy 或 cython 进行高效的成对 DTW 计算

然而,他们未能描述为所有“n”个时间序列找到最小距离路径所涉及的所有步骤。

在上述链接的答案之一中,它指出计算所有成对路径的距离矩阵。但是,没有提到如何处理距离矩阵,以便创建一个具有“n”个时间序列的图,这些时间序列都最佳对齐。

您将如何获取距离矩阵(“n”个时间序列之间的成对距离)并对齐所有“n”个时间序列?

或者,是否有不同的方法来对齐所有“n”个时间序列?

python time-series dtw

5
推荐指数
0
解决办法
1264
查看次数

安装 dtaidistance -&gt; 异常:已编译的 dtaidistance C 库不可用

我尝试运行 dtaidistance 但根据示例运行以下代码时:

from dtaidistance import dtw
import numpy as np
timeseries = np.array([
     [0., 0, 1, 2, 1, 0, 1, 0, 0],
     [0., 1, 2, 0, 0, 0, 0, 0, 0],
     [1., 2, 0, 0, 0, 0, 0, 1, 1],
     [0., 0, 1, 2, 1, 0, 1, 0, 0],
     [0., 1, 2, 0, 0, 0, 0, 0, 0],
     [1., 2, 0, 0, 0, 0, 0, 1, 1]])
ds = dtw.distance_matrix_fast(timeseries, block=((1, 4), (3, 5)))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

The compiled …
Run Code Online (Sandbox Code Playgroud)

python numpy dtw

5
推荐指数
1
解决办法
2061
查看次数

如何使用动态时间扭曲获得距离矩阵?

我有 6 个时间序列值,如下所示。

import numpy as np
series = np.array([
     [0., 0, 1, 2, 1, 0, 1, 0, 0],
     [0., 1, 2, 0, 0, 0, 0, 0, 0],
     [1., 2, 0, 0, 0, 0, 0, 1, 1],
     [0., 0, 1, 2, 1, 0, 1, 0, 0],
     [0., 1, 2, 0, 0, 0, 0, 0, 0],
     [1., 2, 0, 0, 0, 0, 0, 1, 1]])
Run Code Online (Sandbox Code Playgroud)

假设,我想获取动态时间扭曲的距离矩阵来执行聚类。我dtaidistance为此使用了库,如下所示。

from dtaidistance import dtw
ds = dtw.distance_matrix_fast(series)
Run Code Online (Sandbox Code Playgroud)

我得到的输出如下。

array([[       inf, 1.41421356, 2.23606798, 0. …
Run Code Online (Sandbox Code Playgroud)

python time-series dtw

4
推荐指数
1
解决办法
2632
查看次数

通过dtw计算距离矩阵

我有两个标准化读取计数矩阵,用于时间序列第 1 天到第 26 天的控制和治疗。我想通过动态时间包裹计算距离矩阵,然后使用它进行聚类,但似乎太复杂了。我这样做了;谁可以帮忙提供更多说明?多谢

> head(control[,1:4])
               MAST2     WWC2  PHYHIPL   R3HDM2
Control_D1  6.591024 5.695156 3.388652 5.756384
Control_D1 8.043454 5.365221 6.859768 6.936970
Control_D3 7.731590 4.868267 6.919972 6.931073
Control_D4 8.129948 5.105528 6.627016 7.090268
Control_D5 7.690863 4.729501 6.824746 6.904610
Control_D6 8.101723 5.334501 6.868990 7.115883
> 

> head(lead[,1:4])
              MAST2     WWC2  PHYHIPL   R3HDM2
Lead30_D1  6.418423 5.610699 3.734425 5.778046
Lead30_D2 7.918360 4.295191 6.559294 6.780952
Lead30_D3 7.807142 4.294722 6.599187 6.716040
Lead30_D4 7.856720 4.432136 6.572337 6.848483
Lead30_D5 7.827311 4.204738 6.607107 6.784094
Lead30_D6 7.848760 4.458451 6.581216 6.943003
>
> …
Run Code Online (Sandbox Code Playgroud)

r dtw

1
推荐指数
1
解决办法
3453
查看次数