大多数聚类算法都需要距离矩阵。如果数据具有较低的维度,则创建距离矩阵很容易。但是要考虑大约8000点的时间序列呢?
for i in range(total_series):
for j in range(total_series):
dis[i][j] = distance(series[i],series[j])
很明显,创建此矩阵所需的最短时间为O(n ^ 2)。现在,如果我们比较两个时间序列的所有8000点,时间复杂度将非常高。我只是在谈论对齐距离(欧几里得)而不是一些编辑距离。
由于我们有大约50,000个时间序列到集群,O(n ^ 2)对于那些for循环来说非常高。我需要通过一些索引或预处理技术在最短的时间内计算距离函数。请注意,距离函数将逐点比较。
有人可以提出一些技巧,以便我们可以通过一些预处理找到两个时间序列之间的距离小于O(时间序列的长度)吗?或者建议一些聚类方法,而不创建时间复杂度为O(n ^ 2)的距离矩阵?
答案 0 :(得分:0)
欧几里德距离的对称性质可以计算出具有O(n ^ 2/2)复杂度的三角矩阵