algorithm - 基于时间的聚类推荐算法

标签 algorithm k-means data-science hierarchical-clustering

我对基于时间的聚类不是很了解,想知道是否有任何算法非常适合我的用例。

我有一组运动数据(范围从 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/

相关文章:

r - 根据列数据类型对 Spark 数据框(在 Sparklyr 中)进行子集化的最佳方法是什么

algorithm - 什么是最好的矩阵乘法算法?

algorithm - 如何找到通过一组集合的最短路径?

python - k-means 集群中的项数

python - 在 python/pyspark 中获取 k-means 质心和异常值

apache-spark - KMeans 的不平衡因子?

python - LSTM 实现/过拟合

r - 有没有办法合并 dplyr::filter_at 结果? (一次过滤多个变量)

algorithm - 0-1 背包重访

java - 将列表划分为组的算法