快速的k均值算法,例如10 ^ 10分?


14

我正在寻找在一组10维点上进行k均值聚类的方法。问题有10 ^ 10分

我只是在寻找最大群集的中心和大小(假设10到100个群集);我不在乎每个点最终会聚在什么簇上。专门使用k均值并不重要;我只是在寻找类似的效果,任何近似的k均值或相关算法都很好(minibatch-SGD表示,...)。由于GMM在某种意义上与k均值存在相同的问题,因此在相同大小的数据上执行GMM也很有趣。

在这种规模下,对数据进行二次采样可能不会显着改变结果:使用第1/10000个数据样本查找相同的前10个聚类的几率非常高。但是即使那样,这仍然是一个10 ^ 6的问题,超出了易处理的范围。


1
《大量数据集的挖掘》一书中介绍了几种算法,您可以在此处免费下载。阅读第7章“群集”。
2015年

Answers:


12

k均值基于平均值

它使用均值对集群建模,因此通过添加更多数据进行的改进是微不足道的。平均估计误差减少1 / sqrt(n);因此添加更多数据的收益越来越少...

如此大数据的策略始终围绕采样:

如果需要亚线性运行时间,则必须进行采样!

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

但是,采样(尤其是无偏采样)也不是完全免费的...通常,您必须线性读取数据才能进行采样,因为您无法随机访问各个记录。

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


我不知道MacQueen的在线算法!通常可以获得与“经典” K均值相同的结果吗?改为使用储层采样呢?这样,OP可以在需要测试多个K值的情况下重新运行K-means的样本。
马云

6

附带说明一下,根据维数的诅咒,对10D数据使用K-means 可能最终无济于事。当然,它会根据数据的性质而有所不同,但是一旦我尝试确定K均值开始对维数表现出奇怪的阈值,我就会得到类似7D的图像。经过7个维度后,它开始错过正确的聚类(我的数据是根据4个分隔良好的高斯分布手动生成的,我在小实验中使用了MATLAB kmeans函数)。


这是可能的,并且当然始终取决于数据。但是,考虑到海报有10 ^ 10个(大概是独立的)样本,看来10个维度在这里并不是什么大问题。
瑞安·史密斯

2
感谢您的评论@ RyanJ.Smith。您的评论与我完全相同。我只是在帖子中没有看到关于此问题的任何信息。关于样品的数量;但是,他有许多样本点,他仍然可能会陷入维度问题。我认为您是在争论“ 样本量不足问题”的另一面,我认为这是无效的。如果他具有高维数据,则样本量较小将是一个问题,但我认为大量数据并不一定意味着任何事情。
卡斯拉·曼莎(Kasra Manshaei)

10个尺寸还不是很多。
已退出–Anony-Mousse 2015年

1
您如何确定我的朋友?我说的是设计用于回答此类问题的实验的结果,但是通常无法回答!您评论中的“很多”到底是什么?正如我在回答中提到的,这取决于许多情况。在某些情况下10D可能会出现问题。
Kasra Manshaei 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.