对巨大“距离”矩阵的行进行聚类的技巧

数据挖掘 聚类 记忆
2022-03-01 00:49:34

我被分配了以下任务:

我得到了 1,000,000 个数据点,并被要求创建一种距离矩阵并对行进行聚类。所以这个矩阵是 1,000,000 x 1,000,000,这对于我可怜的 8GB RAM 来说显然是太大了。

我想请教一些有关如何处理此类数据的提示。

我想随机选择大约 100,000 个数据点并将它们的距离聚类,而不是希望它们代表整个数据。即使这样,这似乎也是一项艰巨的任务。

那么什么样的聚类方法可以在这里工作呢?如果我不能一次将所有数据提供给通常可以处理大量数据的算法,例如层次聚类或 DBscan,我还有哪些选择?

1个回答

从一个小的随机样本开始总是一个好主意,否则会有太多的处理而没有好的结果。

它还取决于项目的目标项目:如果目标是对数据进行概览,则 5%-10% 的随机抽样就足够了。您可以对随机样本进行多次测试,以确保百分比具有足够的代表性。如果目标是全面了解所有数据,则应从小样本开始,逐步增加数量,直至达到 100%。

如果你有太多的处理时间,你会想要使用多处理、快速计算库、使用 ROM 或高效编码。

在这两种情况下,您都可以从 2000 个元素的小随机样本开始,以快速比较不同的聚类算法,这要归功于它们的数量少(= 处理时间短)。

然后,如果您的数据有很多特征,我建议使用 t-SNE ( https://www.youtube.com/watch?v=wvsE8jm1GzE ) 或 UMAP ( https://www.youtube.com/ watch?v=6BPl81wGGP8 ) 来制作有意义的集群。例如,可以使用 Kmeans 自动识别这些集群。