为了对一组时间序列进行聚类,我正在寻找一个智能距离度量。我尝试了一些众所周知的指标,但没有一个适合我的情况。
例如:假设我的聚类算法提取了这三个质心 [s1, s2, s3]:
我想将这个新示例 [sx] 放在最相似的集群中:
最相似的质心是第二个,所以我需要找到一个距离函数 d 给我d(sx, s2) < d(sx, s1)
和d(sx, s2) < d(sx, s3)
编辑
这里的结果与度量 [余弦、欧几里得、闵可夫斯基、动态类型翘曲] ] 3
编辑 2
为了对一组时间序列进行聚类,我正在寻找一个智能距离度量。我尝试了一些众所周知的指标,但没有一个适合我的情况。
例如:假设我的聚类算法提取了这三个质心 [s1, s2, s3]:
我想将这个新示例 [sx] 放在最相似的集群中:
最相似的质心是第二个,所以我需要找到一个距离函数 d 给我d(sx, s2) < d(sx, s1)
和d(sx, s2) < d(sx, s3)
编辑
这里的结果与度量 [余弦、欧几里得、闵可夫斯基、动态类型翘曲] ] 3
编辑 2
好问题!在这些时间序列上使用 R^n 的任何标准距离(欧几里得、曼哈顿或一般 minkowski)都无法达到您想要的结果,因为这些指标与 R^n 坐标的排列无关(而时间是严格排序的,并且它是你想要捕捉的现象)。
一个简单的技巧,可以满足您的要求,即使用时间序列的累积版本(随着时间的增加,对时间求和),然后应用标准度量。使用曼哈顿度量,您将获得两个时间序列之间的距离,即它们累积版本之间的区域。
使用标准皮尔逊相关系数怎么样?然后您可以将新点分配给具有最高系数的集群。
correlation = scipy.stats.pearsonr(<new time series>, <centroid>)
Pietro P 的答案只是将卷积应用于您的时间序列的一个特例。
如果我给内核:
[1,1,...,1,1,1,0,0,0,0,...0,0]
我会得到一个累积系列。
添加卷积是有效的,因为您要为每个数据点提供有关其邻居的信息 - 它现在取决于顺序。
尝试使用高斯卷积或其他内核可能会很有趣。