时间序列距离度量

Time series distance metric

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

ex: 假设我的聚类算法提取了这三个质心 [s1, s2, s3]:

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

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

编辑

这里是带有指标的结果 [余弦、欧几里德、明可夫斯基、动态类型扭曲] ]3

编辑 2

用户 Pietro P 建议将距离应用于 时间序列的累积版本 该解决方案有效,这里是图表和指标:

如果使用标准 Pearson correlation coefficient? 那么你可以将新点分配给系数最高的簇。

correlation = scipy.stats.pearsonr(<new time series>, <centroid>)

好问题!在这些时间序列上使用 R^n 的任何标准距离(欧几里德、曼哈顿或一般的明可夫斯基)无法获得您想要的结果,因为这些指标独立于 R^n 坐标的排列(虽然时间是严格排序的,并且它是你想要捕捉的现象)。

一个可以满足您要求的简单技巧是使用时间序列的累积版本(随着时间的增加对值求和),然后应用标准指标。 使用曼哈顿指标,你会得到两个时间序列之间的距离,即它们的累积版本.

之间的区域

另一种方法是利用 DTW which is an algorithm to compute the similarity between two temporal sequences. Full disclosure; I coded a Python package for this purpose called trendypy, you can download via pip (pip install trendypy). Here 是一个关于如何使用该包的演示。您只是基本上计算不同组合的总最小距离以设置聚类中心。

Pietro P 的回答只是对时间序列应用卷积的特例。

如果我给内核:

[1,1,...,1,1,1,0,0,0,0,...0,0]

我会得到一个累积系列。

添加卷积是有效的,因为您为每个数据点提供了关于它的邻居的信息 - 它现在依赖于顺序。

尝试使用高斯卷积或其他内核可能会很有趣。