计算大数据的相异矩阵

Posted

技术标签:

【中文标题】计算大数据的相异矩阵【英文标题】:Compute dissimilarity matrix for large data 【发布时间】:2017-12-01 09:29:04 【问题描述】:

我正在尝试基于具有数值和分类特征的大数据框计算相异矩阵。当我从 cluster package 运行 daisy 函数时,我收到错误消息:

错误:无法分配大小为 X 的向量。

在我的例子中,X 大约是 800 GB。知道如何处理这个问题吗?此外,如果有人可以帮助我在并行内核中运行该功能,那也很棒。您可以在下面找到计算 iris 数据集上的相异矩阵的函数:

require(cluster)
d <- daisy(iris)

【问题讨论】:

你介意添加更多细节,为什么这不是欺骗?一眼看去,它确实像一个重复的帖子,但有额外的信息。 如果您没有足够的内存,我无法理解您期望并行化如何提供帮助。你估计得到的矩阵有多大吗? 我已经结束了你之前的问题。 不,它们是相互关联的问题。不要将它们分开。您通常可以以牺牲速度为代价来解决内存问题。 你需要一种比蛮力更聪明的方法。 【参考方案1】:

我之前也遇到过类似的问题。在我的数据集的 5k 行上运行 daisy() 需要很长时间。

我最终使用了h2o 包中的kmeans 算法,该算法对分类数据进行并行化和1-hot 编码。在将其插入h2o.kmeans 之前,我会确保将您的数据居中并缩放(平均为 0 w/stdev = 1)。这是为了使聚类算法不会优先考虑具有高名义差异的列(因为它试图最小化距离计算)。我使用了scale() 函数。

安装 h2o 后:

h2o.init(nthreads = 16, min_mem_size = '150G')
h2o.df <- as.h2o(df)
h2o_kmeans <- h2o.kmeans(training_frame = h2o.df, x = vars, k = 5, estimate_k = FALSE, seed = 1234)
summary(h2o_kmeans)

【讨论】:

以上是关于计算大数据的相异矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何计算大地理距离矩阵

超人学院大数据技术沙龙

大数据:Spark mlib KMeans聚类算法源码分析

python - 如何使用python中的haversine库计算大距离矩阵?

用 R 中的大马尔可夫转移矩阵计算从 s1:s400 到 sn 的概率需要永远

大矩阵和内存问题