【问题标题】:Hierarchical Clustering Large Sparse Distance Matrix R层次聚类大稀疏距离矩阵R
【发布时间】:2012-09-05 18:51:24
【问题描述】:

我正在尝试在非常大的距离上执行快速集群,但遇到了问题。

我有一个非常大的 csv 文件(大约 9100 万行,因此 R 中的 for 循环花费的时间太长)关键字(大约 50,000 个唯一关键字)之间的相似性,当我读入 data.frame 时看起来像:

> df   
kwd1 kwd2 similarity  
a  b  1  
b  a  1  
c  a  2  
a  c  2 

这是一个稀疏列表,我可以使用 sparseMatrix() 将其转换为稀疏矩阵:

> myMatrix 
  a b c  
a . . .
b 1 . .
c 2 . .

但是,当我尝试使用 as.dist() 将其转换为 dist 对象时,我从 R 中收到“问题太大”的错误。我已阅读此处的其他 dist 问题,但代码其他人建议不适用于我上面的示例数据集。

感谢您的帮助!

【问题讨论】:

    标签: r distance sparse-matrix bigdata hierarchical-clustering


    【解决方案1】:

    虽然首先使用稀疏矩阵似乎是个好主意,但我认为这种方法存在一些问题:您丢失的距离将被编码为0s,而不是NAs(见Creating (and Accessing) a Sparse Matrix with NA default entries)。如您所知,在聚类时,零差异与缺失差异具有完全不同的含义......

    因此,无论如何,您需要一个具有大量 NAs 的 dist 对象,以弥补您缺失的差异。不幸的是,您的问题太大以至于需要太多内存:

    d <- dist(x = rep(NA_integer_, 50000))
    # Error: cannot allocate vector of size 9.3 Gb
    

    这只是处理输入...即使是具有大量内存的 64 位机器,我也不确定聚类算法本身不会阻塞或无限期运行。

    你应该考虑把你的问题分解成更小的部分。

    【讨论】: