如何在没有内存错误的情况下使用Python或R对大数据进行集群?

2024-06-26 13:43:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一个包含大约1100000个观测值的数据集进行聚类,每个观测值有三个值。你知道吗

代码在R中非常简单:

df11.dist <-dist(df11cl),其中df11cl是一个具有三列和1100000行的数据帧,并且该数据帧中的所有值都是标准化的。你知道吗

我得到的错误是: Error: cannot allocate vector of size 4439.0 Gb

关于类似问题的建议包括增加RAM或分块数据。我已经有64GB的RAM,我的虚拟内存是171GB,所以我不认为增加RAM是一个可行的解决方案。另外,据我所知,分层数据分析中的分块数据会产生不同的结果。因此,使用数据样本似乎是不可能的。你知道吗

我也发现了this solution,但答案实际上改变了问题。从技术上讲,他们建议k-means。如果事先知道簇的数目,K-均值就可以起作用。我不知道集群的数量。也就是说,我使用不同数量的集群运行k-means,但是现在我不知道如何证明选择一个集群和另一个集群的合理性。有什么测试可以帮助你吗?你知道吗

你能推荐Rpython中的任何内容吗?你知道吗


Tags: 数据代码数量dist错误集群聚类error
1条回答
网友
1楼 · 发布于 2024-06-26 13:43:49

出于琐碎的原因,函数dist需要二次内存。你知道吗

如果你有一百万(10^6)个点,一个二次矩阵需要10^12个条目。对于双精度,每个条目需要8个字节。使用对称性,您只需要存储一半的条目,仍然是4*10^12字节,也就是说,仅存储这个矩阵就需要4 TB。即使您将其存储在SSD上或将系统升级到4tb的RAM,计算所有这些距离也需要花费大量的时间。你知道吗

100万还是很小的,不是吗?你知道吗

在大数据上使用dist是不可能的。故事结束了。你知道吗

对于较大的数据集,您需要

  • 使用不使用成对距离的方法,例如k-均值
  • 使用诸如DBSCAN之类的方法,这些方法不需要距离矩阵,在某些情况下,索引可以将工作减少到O(n logn)
  • 子样本将数据缩小

尤其是最后一件事是一个好主意,如果你还没有一个有效的解决方案。对于一个不起作用的方法来说,与可伸缩性作斗争是没有用的。你知道吗

相关问题 更多 >