我正在尝试对R中的大型数据集进行分层聚类,例如> 30,000行(观察值)和> 30列(变量)。集群本身在fastcluster包中运行得非常快。然而,由于不同的计算,我遇到了内存和速度问题。这只适用于10,000-15,000个观察值。对于更高的数值,R通常会崩溃。即使计算了相异度矩阵,当我尝试之后进行聚类时,也会得到memory overflow错误。有没有办法克服这些问题?
我在一台内存为4 GB的64位计算机上使用Windows7专业版。
MWE:
library('fastcluster')
df <- as.data.frame(matrix(rnorm(900000), nrow = 30000))
dissim <- dist(df)
hr <- hclust(dissim)发布于 2015-01-30 06:48:19
如果您使用的是fastcluster,则可以使用hclust.vector函数,它比hclust占用的内存要少得多(有关详细信息,请参阅fastcluster paper )。
发布于 2013-08-28 23:32:20
可能值得研究GPU processing http://www.r-tutor.com/gpu-computing/clustering/distance-matrix
发布于 2013-08-29 03:01:12
您应该考虑近似解决方案和更好的聚类算法。
很容易看出,任何基于距离矩阵的东西至少需要O(n^2)内存和运行时。事实上,有些连接标准只能在O(n^3)时间内计算。
100.000个具有双精度的实例需要大约80 GB的RAM,通过利用对称性,您可以将其一分为二;但很可能算法需要复制并添加一些临时空间……
有了4 GB,其中可能至少有1个已经用完了,看到这个限制下降到大约20000个字节,我并不感到惊讶。8字节* 20.000 * 20.000 *2份为6.4G
对于大型数据集的聚类,请寻找不需要距离矩阵的算法。为了获得良好的性能,请使用具有线性运行时间的东西(例如,k-means,而您也可以只使用数据样本,线性缩放)或使用索引结构来加速它。例如,在一个好的实现中(我知道R fpc实现不好),DBSCAN将能够利用索引结构,然后在O(n log n)时间内运行。有了一个好的实现,在这种大小的数据上,这将很容易地快100倍。
https://stackoverflow.com/questions/18483172
复制相似问题