2

我是 R 新手。我正在尝试在大约 50K 项上运行 hclust()。我有 10 列要比较和 50K 行数据。当我尝试分配距离矩阵时,我得到:“无法分配 5GB 的向量”。

这个有大小限制吗?如果是这样,我该如何去做这么大的事情?

编辑

我最终增加了 max.limit 并将机器的内存增加到 8GB,这似乎已经修复了它。

4

2 回答 2

5

经典的层次聚类方法具有O(n^3)运行时和O(n^2)内存复杂性。所以是的,它们对大型数据集的扩展性非常糟糕。显然,任何需要实现距离矩阵的东西都在O(n^2)或更糟。

请注意,有一些层次聚类的特殊化,例如在 中运行的 SLINK 和 CLINK O(n^2),并且根据实现也可能只需要O(n)内存。

您可能想研究更现代的聚类算法。任何运行O(n log n)或更好的东西都应该适合你。使用层次聚类有很多充分的理由:通常它对噪声相当敏感(即它并不真正知道如何处理异常值)并且对于大型数据集很难解释结果(树状图很好,但是仅适用于小型数据集)。

于 2012-10-26T06:41:10.087 回答
3

大小限制是由你的硬件和软件设置的,你没有给出足够的细节来说明更多。在具有足够资源的机器上,您不会收到此错误。为什么不在潜入泳池深处之前尝试 10% 的样本呢?也许从以下开始:

reduced <- full[ sample(1:nrow(full), nrow(full)/10 ) , ]
于 2012-10-25T22:03:31.210 回答