繁体   English   中英

R 中 2 个 DTM 的余弦相似度

[英]Cosine similarity of 2 DTMs in R

我有 2 个文档术语矩阵:

  1. DTM 1 说 1000 个向量(1000 个文档)和
  2. DTM2 有 20 个向量(20 个文档)

所以基本上我想将 DTM1 的每个文档与 DTM2 进行比较,并希望使用余弦函数查看哪些 DTM1 文档与哪些 DTM2 文档最接近。 任何指针都会有所帮助!

我使用“slam”包创建了一个余弦矩阵。

Docs   –glyma –ie   –initi –stafford ‘bureaucratic’ ‘empti ‘holi ‘incontrovert
  1  0.000000   0 0.000000  0.000000       0.000000      0     0             0
  2  0.000000   0 0.000000  0.000000       0.000000      0     0             0
  3  0.000000   0 0.000000  0.000000       0.000000      0     0             0
  4  0.000000   0 0.000000  0.000000       0.000000      0     0             0
  5  0.000000   0 0.000000  0.000000       0.000000      0     0             0
  6  0.000000   0 0.000000  0.000000       4.906891      0     0             0
  7  0.000000   0 0.000000  4.906891       0.000000      0     0             0
  8  0.000000   0 0.000000  0.000000       0.000000      0     0             0
  9  0.000000   0 4.906891  0.000000       0.000000      0     0             0
  10 4.906891   0 0.000000  0.000000       0.000000      0     0             0

余弦函数结果为:

在此处输入图片说明

但是,此矩阵将 DTM1 的文档相互比较。 我希望将这些向量与 DTM2 的向量进行比较,然后为给定的 DTM1 文档找到最接近的 DTM2 文档。

这是一种计算两个矩阵之间的余弦距离的方法。 tm 的使用仅用于数据目的...

library(slam)
library(tm)
data("acq")
data("crude")

dtm <- DocumentTermMatrix(c(acq, crude))

index <- sample(1:70, size = 10)

dtm1 <- dtm[index, ]
dtm2 <- dtm[-index, ]

cosine_sim <- tcrossprod_simple_triplet_matrix(dtm1, dtm2)/sqrt(row_sums(dtm1^2) %*% t(row_sums(dtm2^2)))

余弦函数改编自这篇 SO 帖子: R:Calculate cosine distance from a term-document matrix with tm and proxy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM