1

作为动态时间规整 (DTW) 的新手,我发现它的 Python 实现mlpy.dtw没有在非常详细的扩展中记录。我的返回值有一些问题。

关于返回值dist?我有两个问题

  • 这里有错别字吗?对于标准 DTW,文件说

[Muller07] 中描述的标准 DTW,使用欧几里德距离(差的绝对值)或平方欧几里德距离(如 [Keogh01])作为本地成本度量。

对于子序列DTW,文件说

[Muller07] 中描述的子序列 DTW,假设 y 的长度远大于 x 的长度,并使用曼哈顿距离(差的绝对值)作为局部成本度量。

同一个所谓的“绝对差值”对应两个不同的距离度量?

  • 总距离?运行代码段后

    距离、成本、路径 = mlpy.dtw_std(x, y, dist_only=False)

dist是一个值。那么它是每个匹配对之间所有距离的总和吗?

4

2 回答 2

2

是的,该mlpy.dtw()功能没有很好的记录。

  • 第一个问题:这里没有错字。正如您在文档中看到的,欧几里得距离、平方欧几里得距离和曼哈顿距离都与本地成本度量有关。在这种情况下,成本度量被定义为两个实际值(一维)之间的距离,请参阅http://en.wikipedia.org/wiki/Dynamic_time_warping中伪代码中的成本。因此,在这种情况下,曼哈顿距离和欧几里得距离是相同的(http://en.wikipedia.org/wiki/Euclidean_distance#One_dimension)。无论如何,在标准 dtw 中,您可以通过参数squared选择欧式距离(差的绝对值)或平方欧式距离(平方差):
>>> import mlpy
>>> mlpy.dtw_std([1,2,3], [4,5,6], squared=False) # Euclidean distance
9.0
>>> mlpy.dtw_std([1,2,3], [4,5,6], squared=True) # Squared Euclidean distance
26.0

干杯,戴维德

于 2013-09-19T10:08:59.317 回答
2

这似乎是文档中的错误。欧几里得距离不是“差的绝对值”,它是曼哈顿度量的正确描述。可能作者正在考虑一维情况,因为在 R 中,欧几里得度量和曼哈顿度量是相同的(而欧几里得度量真正表达了差异的绝对值)。我对这个库不熟悉,如果它只对一维对象进行操作,那么没有错误,这两个距离度量是等价的

dist值是最佳时间扭曲的值(以匹配的汇总成本衡量,请参阅 wikipedia 上的算法定义)。所以它实际上是两个序列之间的最小编辑距离,其中特定编辑的成本以“匹配”对象之间的差异(距离)表示

于 2013-09-19T10:20:53.393 回答