我正在尝试使用R语言对类似文档进行聚类。 作为第一步,我为我的文档集计算术语 - 文档矩阵。 然后我为先前创建的术语 - 文档矩阵创建潜在的语义空间。我决定在我的实验中使用LSA,因为使用term-document矩阵进行聚类的结果非常糟糕。 是否可以使用创建的LSA空间构建相异矩阵(使用余弦度量)?我需要这样做,因为我使用的聚类算法需要一个相异矩阵作为输入。
这是我的代码:
require(cluster);
require (lsa);
myMatrix = textmatrix("/home/user/DocmentsDirectory");
myLSAspace = lsa(myMatrix, dims=dimcalc_share());
我需要从LSA空间构建一个相异矩阵(使用余弦测量),所以我可以按如下方式调用聚类算法:
clusters = pam(dissimilartiyMatrix,10,diss=TRUE);
有什么建议吗?
提前致谢!
答案 0 :(得分: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,其中它表示您现在可以使用LSA结果“通过比较矢量sk * d_j和sk * d_q(通常通过余弦相似度)来查看相关文档j和q在低维空间中的情况)“。
答案 1 :(得分: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