2017-06-23 28 views
0

当我尝试使用text2vec包中的sim2()创建Jaccard相似度矩阵时,我对一个奇怪的性能问题感到困惑。 我有一个稀疏矩阵[210,000 x 500],为此我想获得Jaccard相似矩阵,如上所述。 当我直接尝试使用矩阵在SIM2的功能,它需要在30分钟内culminutes错误消息当我使用两个似乎相同的稀疏矩阵创建Jaccard相似度矩阵时,为什么会得到两个不同的表现

这是R脚本,我用:

library(text2vec) 
JaccSim <- sim2(my_sparse_mx, method = "jaccard", norm = "none") # doesn't work 

这是错误消息我得到运行该脚本的半小时后:

Cholmod错误“的问题太大”在文件../Core/cholmod_sparse.c, 线92

但是,当我从原始矩阵中对另一个稀疏矩阵进行子集化时,使用所有行并运行脚本,只需要3分钟,并且成功生成Jaccard相似度矩阵(这是一个稀疏矩阵本身)。

spmx_1 <- Matrix(my_sparse_mx[1:210000], sparse = TRUE) 
JaccSim <- sim2(spmx_1, method = "jaccard", norm = "none") #works! 

这一个成功运行。这里发生了什么?我所做的只是将我的sparse_matrix集成到另一个矩阵(使用原始矩阵的所有行)并使用第二个稀疏矩阵。

为了澄清,my_sparse_mx有21万行 (我创造了它具有使用下面的许多行:

my_sparse_mx <-Matrix(0,nrow = 210000,ncol = 500,sparse = TRUE)) 

,然后用1的相应贯穿其他一些工艺填补起来还有,当我做NROWS。 (my_sparse_mx)我仍然获得21万。

我想知道为什么会这样。

回答

1

sim2函数计算成对的jaccard相似性,这意味着结果矩阵为您的情况将是210000 * 210000。这种结果矩阵的稀疏性取决于数据,在某些情况下不会成为问题。我想你的情况是相当密集的,不能通过潜在的Matrix例程处理。

上面提到的你的子集是不正确的 - 你错过了逗号。所以你的子集只有210000个元素。

+0

完全错过了那一个,谢谢 – Ankhnesmerira

1
spmx_1 <- Matrix(my_sparse_mx[1:210000], sparse = TRUE) 

说,采取先210000 元素my_sparse_matrix并将它变成另一个矩阵。这样的结果将有210000行和1列。

你可能想

spmx_1 <- Matrix(my_sparse_mx[1:210000, ], sparse = TRUE) 

用逗号。