3

我试图在非常大的距离上执行 fastclust,但遇到了问题。

我有一个非常大的 csv 文件(大约 9100 万行,所以 for 循环在 R 中花费的时间太长)关键字(大约 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 问题,但其他人建议的代码不适用于我上面的示例数据集。

谢谢你的帮助!

4

1 回答 1

3

虽然首先使用稀疏矩阵似乎是个好主意,但我认为这种方法存在一些问题:您丢失的距离将被编码为0s,而不是NAs(请参阅创建(和访问)稀疏矩阵带有 NA 默认条目)。如您所知,在聚类时,零差异与缺失差异具有完全不同的含义......

所以无论如何,你需要的是一个 dist 对象,其中有很多NAs 来表示你缺少的差异。不幸的是,您的问题太大以至于需要太多内存:

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

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

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

于 2012-09-13T02:47:25.513 回答