9

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

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

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

在此处输入图像描述

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

编辑

这里的结果与度量 [余弦、欧几里得、闵可夫斯基、动态类型翘曲] 在此处输入图像描述] 3

编辑 2

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

4

4 回答 4

8

好问题!在这些时间序列上使用 R^n 的任何标准距离(欧几里得、曼哈顿或一般 minkowski)都无法达到您想要的结果,因为这些指标与 R^n 坐标的排列无关(而时间是严格排序的,并且它是你想要捕捉的现象)。

一个简单的技巧,可以满足您的要求,即使用时间序列的累积版本(随着时间的增加,对时间求和),然后应用标准度量。使用曼哈顿度量,您将获得两个时间序列之间的距离,即它们累积版本之间的区域

于 2018-01-30T14:27:07.293 回答
2

另一种方法是利用DTW,这是一种计算两个时间序列之间相似性的算法。全面披露; 为此,我编写了一个名为 的 Python 包trendypy,您可以通过 pip( pip install trendypy) 下载。是有关如何使用该软件包的演示。您只是基本上计算不同组合的总最小距离来设置集群中心。

于 2020-06-24T03:47:19.343 回答
0

使用标准皮尔逊相关系数怎么样?然后您可以将新点分配给具有最高系数的集群。

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

于 2018-01-29T10:20:38.260 回答
0

Pietro P 的答案只是将卷积应用于您的时间序列的一个特例。

如果我给内核:

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

我会得到一个累积系列。

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

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

于 2020-07-31T15:00:04.137 回答