我正在尝试将一个包含约1,100,000个观测值的数据集聚类,每个观测值具有三个值。
R
中的代码非常简单:
df11.dist <-dist(df11cl)
,其中df11cl是具有三列和1,100,000行的数据帧,并且该数据帧中的所有值均已标准化。
我得到的错误是:Error: cannot allocate vector of size 4439.0 Gb
关于类似问题的建议包括增加RAM或分块数据。我已经有64GB的RAM,我的虚拟内存为171GB,所以我认为增加RAM不是可行的解决方案。而且,据我所知,分层数据分析中的分块数据会产生不同的结果。因此,似乎毫无疑问使用数据样本。
我也发现了this solution,但是答案实际上改变了问题。他们从技术上建议k-均值。如果事先知道簇数,则K均值可以工作。我不知道集群的数量。就是说,我使用不同数量的群集运行k均值,但是现在我不知道如何证明选择一个群集的合理性。有什么测试可以帮助您吗?
您能推荐R
或python
中的任何内容吗?
出于琐碎的原因,函数dist
需要二次存储。
因此,如果您有100万(10 ^ 6)点,则二次矩阵需要10 ^ 12项。以双精度,每个条目需要8个字节。具有对称性,您只需要存储一半的条目,仍然是4 * 10 ^ 12 bytea。,即4 TB仅用于存储此矩阵。即使您将其存储在SSD上或将系统升级到4 TB RAM,计算所有这些距离也将花费大量的时间。
还有100万还很小,不是吗?
在大数据上使用dist
是不可能的。故事的结尾。
对于更大的数据集,您需要
特别是如果您还没有可行的解决方案,那么最后一件事是个好主意。努力解决不可行的方法的可伸缩性没有用。