Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中大量观测值和维数的距离矩阵计算和层次聚类_R_Performance_Cluster Analysis_Hierarchical Clustering - Fatal编程技术网

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

R中大量观测值和维数的距离矩阵计算和层次聚类,r,performance,cluster-analysis,hierarchical-clustering,R,Performance,Cluster Analysis,Hierarchical Clustering,我正在尝试对R中的大型数据集进行分层聚类,例如>30000行(观察值)和>30列(变量)。使用fastcluster包,集群本身运行得非常快。然而,由于计算的不同,我遇到了内存和速度问题。这只适用于10000-15000次观测。对于较高的数字,R通常会崩溃。即使计算了相异矩阵,当我尝试之后进行聚类时,也会出现内存溢出错误。有没有办法克服这些问题 我在64位机器上使用Windows7 Professional,内存为4GB MWE: library('fastcluster') df可能值得研究G

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

我在64位机器上使用Windows7 Professional,内存为4GB

MWE:

library('fastcluster')

df可能值得研究GPU处理
值得研究GPU处理

你应该考虑近似解和更好的聚类算法。

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

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

对于4GB,其中可能至少有1个已经用完了,我并不惊讶地看到这一限制下降到大约20000个单位。8字节*20.000*20.000*2份拷贝为6.4 GB


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

你应该考虑近似解和更好的聚类算法。 很容易看出,基于距离矩阵的任何东西至少需要

O(n^2)
内存和运行时。事实上,某些连接准则只能在
O(n^3)
时间内计算

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

对于4GB,其中可能至少有1个已经用完了,我并不惊讶地看到这一限制下降到大约20000个单位。8字节*20.000*20.000*2份拷贝为6.4 GB


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

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

如果您使用的是
fastcluster
,则可以使用
hclust.vector
功能,该功能的内存占用量远小于
hclust
(有关详细信息,请参阅
fastcluster

30000个元素的相异矩阵将为30000×30000,双精度浮点占8字节,约为8 Gig。在这种规模下,您无法使用这些库来存储4 Gig的RAM。

30000个元素的相异矩阵将为30000×30000,双精度浮点占用8个字节,约为8 Gig。您不能以这种规模使用这些库和4 GB的RAM。

我的系统上的最大RAM使用量是10 GB,但尝试绘制结果终止了R会话。我的系统上的最大RAM使用量是10 GB,但尝试绘制结果终止了R会话。我尝试了不同的
k-means
实现,但结果并不令人满意。我正在寻找一个无监督的算法,所以我不想预先设置集群的数量。在
Bioconductor
flowMeans
中有一个快速实现,但我对结果不满意。你能推荐另一个吗?此外,我不知道如何用非分层算法绘制出一张像样的热图。顺便说一句,采样数据也会导致不同的热图。DBSCAN是一个很好的观点,谢谢。然而,我没有在
R
中找到任何其他DBSCAN实现,而不是
fpc
。就这一点而言,R的可扩展性和速度都不是很快。如果您确实需要大数据,请尝试查看其他应用程序。我在ELKI中使用了100k元素,总运行时间不到一分钟。我尝试了不同的
k-means
实现,但结果并不令人满意。我正在寻找一个无监督的算法,所以我不想预先设置集群的数量。在
Bioconductor
flowMeans
中有一个快速实现,但我对结果不满意。你能推荐另一个吗?此外,我不知道如何用非分层算法绘制出一张像样的热图。顺便说一句,采样数据也会导致不同的热图。DBSCAN是一个很好的观点,谢谢。然而,我还没有在
R
中找到任何其他DBSCAN实现,而不是
fpc
。R的可扩展性不强
library('fastcluster')
df <- as.data.frame(matrix(rnorm(900000), nrow = 30000))
dissim <- dist(df)
hr <- hclust(dissim)