2012-10-25 193 views
2

我是R新手。我试图在约50K项目上运行hclust()。我有10列进行比较和50K行数据。当我尝试分配距离矩阵时,我得到:“不能分配5GB的矢量”。hclust大小限制?

这是否有尺寸限制?如果是这样,我该如何做一些这么大的事情呢?

编辑

我结束了增加max.limit并增加了机器的内存到8GB,并似乎已经固定它。

+0

我想知道你是否试图对行进行聚类?如果是这样,那么你正在尝试制作一个50k * 50k的距离矩阵(矩阵中的2.5e9项)。这将比R允许的更大(任何一个矢量或矩阵中的最大2^31 - 1项)。 – bdemarest

+0

我被给了一个数据集来处理,并且需要知道它们之间的关系。我应该申请一些过滤器吗? – Judy

+1

分层聚类在天真地执行时,复杂度为“O(n^3)”。所以,即使不考虑将它用于大型数据集。 –

回答

1

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

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

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

请注意,有一些分层聚类的专业化,如SLINK和CLINK运行在O(n^2),根据实现可能也只需要O(n)内存。

你可能想看看更现代的聚类算法。任何运行于O(n log n)或更高版本的应该都适合您。 有很多很好的理由,但不是使用层次聚类:通常它对噪声非常敏感(即它不知道如何处理异常值),结果很难解释为大数据集(树状图很好,但仅限于小数据集)。

+0

与OP一样遇到类似的问题。现代聚类算法的任何建议? –

+1

很多人都明显地与DBSCAN取得了成功。 –