1

我正在尝试对 中的大型数据集进行层次聚类R,例如 > 30,000 行(观察)和 > 30 列(变量)。fastcluster集群本身与包一起很快。但是,由于差异计算,我遇到了内存和速度问题。这只适用于最多 10,000-15,000 个观测值。对于更高的数字,R通常会崩溃。即使计算了相异矩阵,memory overflow之后尝试聚类时也会出现错误。有没有办法克服这些问题?

我在具有 4 GB RAM 的 64 位计算机上使用 Windows 7 Professional。

MWE:

library('fastcluster')
df <- as.data.frame(matrix(rnorm(900000), nrow = 30000))
dissim <- dist(df)
hr <- hclust(dissim)
4

4 回答 4

2

如果您正在使用fastcluster,则可以使用hclust.vector比内存密集型要少得多的功能hclust(有关详细信息,请参阅fastcluster 论文)。

于 2015-01-29T22:48:18.817 回答
1

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

于 2013-08-28T15:32:20.183 回答
1

您应该考虑近似解决方案和更好的聚类算法。

很容易看出任何基于距离矩阵的东西至少需要O(n^2)内存和运行时间。事实上,一些链接准则只能及时计算O(n^3)

100.000 个双精度实例需要约 80 GB RAM,通过利用对称性,您可以将其减半;但可能算法需要复制并添加一些暂存空间......

有了 4 GB,其中可能至少有 1 个已经用完,看到这个限制下降到大约 20000 个实体,我并不感到惊讶。8 字节 * 20.000 * 20.000 * 2 个副本为 6.4 GB

对于大型数据集的聚类,寻找不需要距离矩阵的算法。为了获得良好的性能,请使用具有线性运行时的东西(例如,k-means,而您也可以只使用数据样本,线性缩放)或使用索引结构来加速它。例如,DBSCAN 将在一个好的实现中(fpc我知道的 R 实现不好)能够利用索引结构然后 O(n log n)及时运行。通过良好的实现,在这种大小的数据上,这将很容易快 100 倍。

于 2013-08-28T19:01:11.527 回答
0

30000 个元素的相异矩阵将是 30000×30000,双精度浮点占用 8 个字节,大约 8 gigs。在这种规模的情况下,您不能使用 4 gigs 的 RAM 来使用这些库。

于 2015-01-29T22:56:16.113 回答