首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中大量观测值和维度的距离矩阵计算和层次聚类

R中大量观测值和维度的距离矩阵计算和层次聚类
EN

Stack Overflow用户
提问于 2013-08-28 16:41:23
回答 4查看 4K关注 0票数 1

我正在尝试对R中的大型数据集进行分层聚类,例如> 30,000行(观察值)和> 30列(变量)。集群本身在fastcluster包中运行得非常快。然而,由于不同的计算,我遇到了内存和速度问题。这只适用于10,000-15,000个观察值。对于更高的数值,R通常会崩溃。即使计算了相异度矩阵,当我尝试之后进行聚类时,也会得到memory overflow错误。有没有办法克服这些问题?

我在一台内存为4 GB的64位计算机上使用Windows7专业版。

MWE:

代码语言:javascript
运行
复制
library('fastcluster')
df <- as.data.frame(matrix(rnorm(900000), nrow = 30000))
dissim <- dist(df)
hr <- hclust(dissim)
EN

回答 4

Stack Overflow用户

发布于 2015-01-30 06:48:19

如果您使用的是fastcluster,则可以使用hclust.vector函数,它比hclust占用的内存要少得多(有关详细信息,请参阅fastcluster paper )。

票数 2
EN

Stack Overflow用户

发布于 2013-08-28 23:32:20

可能值得研究GPU processing http://www.r-tutor.com/gpu-computing/clustering/distance-matrix

票数 1
EN

Stack Overflow用户

发布于 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倍。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18483172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档