我对基于时间的聚类不是很了解,想知道是否有任何算法非常适合我的用例。
我有一组运动数据(范围从 0-500),我想按时间间隔对它们进行聚类。
我的问题是我想找到在时间间隔上存在主要运动差异的时间点。我会确切地知道它们应该有多少组(例如 5 个独立的集群),但不知道一个结束的位置和下一个开始的位置。
是否有适用于这种情况的良好算法?我在看 K-Means,但它似乎非常擅长聚类,而不管时间如何,我更多的是在查看运动数据时寻找边界。
最佳答案
我认为您可以从动态程序中获得好的结果。对于每个区间 [i, j)
,让 C(i, j)
是一个损失函数,当区间值更可能是一个集群时,该损失函数较低。然后让 L(k, r)
成为最多 k
元素簇 [0, r)
的最小损失,我们有方程
L(1, r) = C(0, r)
L(k, r), k > 1 = min over s in [0, r) of L(k-1, s) + C(s, r).
如果需要 O(1)
个 k
值,使用内存计算这些方程需要 O(n^2)
时间,并且O(n)
空间,其中 n
是样本数。
C(i, j)
的一个合理的首选是该区间内样本的统计方差。天真地,这需要 Theta(n^3)
时间来计算每个间隔,但是 Welford's algorithm如果您将 s
从最大值迭代到最小值,则可用于在线计算方差,因此整体算法仍为 O(n^2)
。
关于algorithm - 基于时间的聚类推荐算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53253857/