【问题标题】:hclust size limit?hclust 大小限制?
【发布时间】:2012-10-16 03:52:15
【问题描述】:

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

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

编辑

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

【问题讨论】:

  • 我想知道您是否正在尝试对行进行聚类?如果是这样,那么您正在尝试制作一个 50k * 50k 距离矩阵(矩阵中的 2.5e9 个项目)。这将大于 R 所允许的(任何一个向量或矩阵中最多 2^31 - 1 个项目)。
  • 我得到了一个可以使用的数据集,我需要知道它们之间的关系。我应该应用一些过滤器吗?
  • 分层聚类,当幼稚地实现时,复杂度为O(n^3)。因此,甚至不要考虑将其用于大型数据集。

标签: r cluster-analysis data-mining hclust


【解决方案1】:

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

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

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

【讨论】:

  • 遇到与 OP 类似的问题。对现代聚类算法有什么建议吗?
  • 显然很多人都在 DBSCAN 上取得了成功。
【解决方案2】:

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

reduced <- full[ sample(1:nrow(full), nrow(full)/10 ) , ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 2010-12-29
    • 2011-03-27
    • 2011-03-09
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多