2017-06-23 29 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) 

用逗號。