快速 k-means 算法 10101010 积分?

数据挖掘 聚类 k-均值
2021-09-18 02:19:18

我正在寻找对一组 10 维点进行 k 均值聚类。问题:1010

我正在寻找最大集群的中心和大小(比如说 10 到 100 个集群);我不关心每个点最终进入哪个集群。具体使用 k-means 并不重要;我只是在寻找类似的效果,任何近似的 k 均值或相关算法都会很棒(minibatch-SGD 均值,...)。由于 GMM 在某种意义上与 k-means 是相同的问题,因此对相同大小的数据进行 GMM 也很有趣。

在这种规模下,对数据进行二次抽样可能不会显着改变结果:使用 1/10000 的数据样本找到相同的前 10 个集群的几率非常高。但即便如此,这也是一个106位于/超出易处理边缘的点问题。

2个回答

k-means 基于平均值

它使用手段对集群进行建模,因此通过添加更多数据的改进是微不足道的。平均估计的误差随着 1/sqrt(n) 而减小;所以添加更多数据的回报越来越少......

此类大数据的策略始终围绕抽样:

如果你想要亚线性运行时,你必须做采样!

事实上,Mini-Batch-Kmeans 等正是这样做的:从数据集中重复采样。

但是,采样(特别是无偏采样)也不是完全免费的……通常,您必须线性读取数据以进行采样,因为您无法随机访问单个记录。

我会选择 MacQueen 的算法。它在线;默认情况下,它会对您的数据进行一次传递(尽管迭代它很流行)。分发并不容易,但是我想您可以负担得起从 SSD 线性读取数据 10 次的费用吗?

作为旁注,请注意,根据维度的诅咒,对 10D 数据使用 K-means可能最终会一事无成。当然,它会根据数据的性质而有所不同,但是一旦我试图确定 K-Means 开始在维度方面表现出奇怪的阈值,我就得到了类似于 7D 的东西。在 7 维之后,它开始丢失正确的集群(我的数据是根据 4 个分离良好的高斯分布手动生成的,我在我的小实验中使用了 MATLAB kmeans函数)。