我是 R 新手。我正在尝试在大约 50K 项上运行 hclust()。我有 10 列要比较和 50K 行数据。当我尝试分配距离矩阵时,我得到:“无法分配 5GB 的向量”。
这个有大小限制吗?如果是这样,我该如何去做这么大的事情?
编辑
我最终增加了 max.limit 并将机器的内存增加到 8GB,这似乎已经修复了它。
我是 R 新手。我正在尝试在大约 50K 项上运行 hclust()。我有 10 列要比较和 50K 行数据。当我尝试分配距离矩阵时,我得到:“无法分配 5GB 的向量”。
这个有大小限制吗?如果是这样,我该如何去做这么大的事情?
编辑
我最终增加了 max.limit 并将机器的内存增加到 8GB,这似乎已经修复了它。
经典的层次聚类方法具有O(n^3)
运行时和O(n^2)
内存复杂性。所以是的,它们对大型数据集的扩展性非常糟糕。显然,任何需要实现距离矩阵的东西都在O(n^2)
或更糟。
请注意,有一些层次聚类的特殊化,例如在 中运行的 SLINK 和 CLINK O(n^2)
,并且根据实现也可能只需要O(n)
内存。
您可能想研究更现代的聚类算法。任何运行O(n log n)
或更好的东西都应该适合你。不使用层次聚类有很多充分的理由:通常它对噪声相当敏感(即它并不真正知道如何处理异常值)并且对于大型数据集很难解释结果(树状图很好,但是仅适用于小型数据集)。
大小限制是由你的硬件和软件设置的,你没有给出足够的细节来说明更多。在具有足够资源的机器上,您不会收到此错误。为什么不在潜入泳池深处之前尝试 10% 的样本呢?也许从以下开始:
reduced <- full[ sample(1:nrow(full), nrow(full)/10 ) , ]