2013-03-05 106 views
2

我試圖用R語言對相似的文檔進行聚類。 作爲第一步,我計算了我的文檔集的術語 - 文檔矩陣。然後,我爲先前創建的術語 - 文檔矩陣創建潛在語義空間。我決定在實驗中使用LSA,因爲只使用術語 - 文檔矩陣進行聚類的結果非常糟糕。 使用創建的LSA空間可以建立一個不相似矩陣(帶餘弦度量)嗎?我需要這樣做,因爲我使用的聚類算法需要一個不相似矩陣作爲輸入。使用R-lsa包計算文檔在語義空間中的餘弦相似度

這是我的代碼:

require(cluster); 
require (lsa); 

myMatrix = textmatrix("/home/user/DocmentsDirectory"); 
myLSAspace = lsa(myMatrix, dims=dimcalc_share()); 

我需要建立一個不相似矩陣(使用餘弦測量)從LSA空間,所以可以調用聚類算法如下:

clusters = pam(dissimilartiyMatrix,10,diss=TRUE); 

不限建議?

在此先感謝!

回答

2

您可以使用包arules,這裏一個例子:

library(arules) 
dissimilarity(x=matrix(seq(1,10),ncol=2),method='cosine') 
      1   2   3   4 
2 -4.543479        
3 -4.811989 -5.231234      
4 -5.080052 -5.563952 -6.024433   
5 -5.343350 -5.885304 -6.395740 -6.877264 
+0

我的主要問題是我需要使用創建的LSA空間來計算不相似矩陣。你知道怎麼做嗎? – lucasbls1 2013-03-05 17:21:49

5

要在LSA空間比較兩個文件,你可以把$sk$dk矩陣的交叉產品,lsa()返回到讓所有的文檔在較低維LSA空間中。下面是我所做的:

lsaSpace <- lsa(termDocMatrix) 

# lsaMatrix now is a k x (num doc) matrix, in k-dimensional LSA space 
lsaMatrix <- diag(lsaSpace$sk) %*% t(lsaSpace$dk) 

# Use the `cosine` function in `lsa` package to get cosine similarities matrix 
# (subtract from 1 to get dissimilarity matrix) 
distMatrix <- 1 - cosine(lsaMatrix) 

http://en.wikipedia.org/wiki/Latent_semantic_analysis,它說:你現在可以通過比較載體SK * D_J和SK * d_q使用LSA的結果「看到的文件是如何相關j和q是在低維空間(通常由余弦相似性)。「