我对基于时间的集群不是很了解,我想知道是否有算法非常适合我的用例。
我有一组劳累数据(范围从0到500),我想沿时间间隔对它们进行聚类。
在这种情况下,有好的算法可以应用吗?我看的是K-Means,但它似乎非常擅长于不考虑时间的聚类,我更多的是寻找使用数据的边界。
我认为你可以从动态程序中得到好的结果。每次间隔 [i, j) C(i, j) 当间隔值更可能是一个簇时,是一个更低的损失函数。然后让 L(k, r) 是最大损失 k [0, r) ,我们有方程
[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) 价值观 需要,用记忆法计算这些方程 O(n^2) 时间和 O(n) 空间 n 是样本数。
O(1)
O(n^2)
O(n)
n
一个合理的第一选择 C(i,j) 将是该区间内样本的统计方差。天真地说,这需要 Theta(n^3) 计算每个间隔的时间,但是 Welford's algorithm 可用于在迭代时在线计算方差 s O(n^2) .
C(i,j)
Theta(n^3)
s