在 R 中集群大数据和采样是否相关?

机器算法验证 r 聚类 采样 大数据
2022-03-07 09:51:47

我是数据科学的新手,在 R 中有 200,000 行和 50 列的数据集中查找集群时遇到问题。

由于数据同时具有数值变量和名义变量,因此使用欧几里德距离测量的 K-means 等方法似乎不是一个合适的选择。所以我求助于接受距离矩阵作为输入的 PAM、agnes 和 hclust。

daisy 方法可以处理混合类型的数据,但是距离矩阵太大了:200,000 乘以 200,000 远大于 2^31-1(R 3.0.0 之前的向量长度限制。)

昨天发布的新 R 3.0.0 支持长度超过 2^31-1 的长向量。但是 200,000 x 200,000 的双矩阵需要大于 16Gb 的连续 RAM,这在我的机器上是不可能的。

我阅读了有关并行计算和 bigmemory 包的信息,但不确定它们是否会有所帮助:如果我使用的是 daisy,它将生成一个无论如何都无法放入内存的大矩阵。

我还阅读了有关采样的帖子: 采样在“大数据”时代是否相关?

那么在我的情况下,对数据集使用抽样,对样本进行聚类然后推断整个数据集的结构是否相关?

你能给我一些建议吗?谢谢!

关于我的机器:

R 版本 3.0.0 (2013-04-03)

平台:x86_64-w64-mingw32/x64(64位)

操作系统:Windows 7 64 位

内存:16.0GB

3个回答

正如您所注意到的,任何需要全距离矩阵的方法都行不通。内存是一回事,另一回事是运行时。层次聚类的典型实现在中(我知道ELKI有 SLINK,这是一个的单链路聚类算法)。这只是不能扩展到大型数据集。O(n3)O(n2)

PAM 本身不应该需要一个完整的距离矩阵,但众所周知,该算法的扩展性很差,因为它需要在每次迭代中(重新)计算每个集群内的所有成对距离,以找到最中心的元素。如果您有大量集群,这会少得多,但仍然非常昂贵!

相反,您应该研究可以使用索引结构进行加速的方法。有了好的索引,这样的聚类算法可以在中运行,这对于大型数据集来说要好得多。O(nlogn)

然而,对于这些算法中的大多数,你首先需要确保你的距离函数真的很好;那么您需要考虑通过使用适当的索引来加速查询的方法。

另请注意,在许多情况下 - 这可能适用于 PAM - 您可以先在样本上运行算法,然后仅在完整数据集上对其进行优化。如果您的样本具有代表性,那么 k-means 和 PAM 等算法应该会给您提供与完整数据集基本相同的结果。

尝试 R 中 cluster 包中的 CLARA 函数。它通过对数据进行二次采样来实现类似 pam 的算法(确保提供对数据有意义的子样本大小,因为默认值故意太小)。如果您的数据中的媒介可以由总数据的一小部分样本表示(即 - 数据集中的集群相对较少),则它的效果特别好。通过这种方式,您可以使用少量随机样本有效地进行聚类,并将点添加到预先计算的聚类解决方案中。

http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/CLARA

您还可以对定性变量应用多重对应分析,并将其转换为数值变量。