动态时间扭曲的替代距离

数据挖掘 机器学习 时间序列 距离
2021-10-12 21:18:08

我正在使用动态时间规整 (DTW) 对时间序列进行比较。然而,它不是一个真正的距离,而是一个类似距离的量,因为它不能保证三角不等式成立。

提醒:d:MxM->R如果对于 M 中的所有 x,y,则为距离:

1 - d(x,y) ≥ 0, and d(x,y) = 0 if and only if x = y
2 - It is symmetric: d(x,y) = d(y,x)
3 - Triangle inequality: d(x,z) ≤ d(x,y) + d(y,z)

是否有任何等效的措施可以确保数学意义上的距离条件?显然,我不是在寻找欧几里得距离,而是在寻找能够确保我的系列在未来聚类中正确分类的距离。如果是这样,R 或 Python 包中有任何可靠的实现吗?

2个回答

就像在这个 SO question的一个答案中所建议的那样,您可以使用弹性匹配Levenshtein 距离来完成您的任务。Levenshtein 距离服从三角不等式,因此是度量距离。

建议使用弹性匹配进行时间序列数据比较。Levenshtein 距离适用于字符数据。

Python中有一个弹性匹配Levenshtein距离计算的实现。

要将它们放在一起,您很可能需要构建自己的实现。

当您说“但是,它不是真正的距离,而是类似距离的量”时,您的真正意思是,它是一种度量,而不是度量。

为什么你认为你需要一个指标?

考虑以下常见的美国女孩名字:

[Lisabeth, Beth, Lisa, Maryanne, Anne, Mary]

如果要求将这些名字分成两组,我们肯定会期望 [{Lisabeth, Lisa, Beth}, {Maryanne, Mary, Anne}]。

然而,没有任何坚持三角不等式的距离度量将我们的“Beth”和“Lisa”在同一组中;因为他们彼此不共享一个字符。然而,两者都与“安妮”共享一个角色。

这里有一个关于 DTW 的教程http://www.cs.unm.edu/~mueen/DTW.pdf