查找两个数组之间的余弦相似度

我想知道在R中是否有内置函数可以find两个数组之间的余弦相似度(或余弦距离)?

目前,我执行了自己的function,但是我不禁想到R应该已经有了一个。

这样的问题一直出现(对我来说,正如问题列表中的问题清单所certificate的那样):

有没有一个函数,无论是在R核心或在任何R包,那x? 如果是的话,

我在哪里可以findCRAN中的+2000 R软件包?

简短的回答:当这些问题出现时,给sos包一个尝试

其中一个较早的答案给出了余弦以及其帮助页面的链接。 这可能正是OP想要的。 当你看链接页面时,你会发现这个函数在lsa包中。

但是如果你不知道在哪个Package中find它,你将如何find这个函数呢?

您可以随时尝试标准的R帮助function(下面的“>”只是指R命令行):

 > ?<some_name> > ??<some_name> > *apropos*<some_name> 

如果这些失败,然后安装和加载sos软件包

 ***findFn*** 

findFn也是“???”的别名,虽然我不经常使用它,因为我不认为你可以传入函数名以外的参数

对于这里的问题,试试这个:

 > library(sos) > findFn("cosine", maxPages=2, sortby="MaxScore") 

通过(“maxPages = 2”和“sortby =”MaxScore“)传递的附加参数只是限制返回结果的数量,并且分别指定结果的排列方式 – 即”find一个名为“cosine”的函数,或者在函数描述中有“余弦”一词,只返回两页结果,并按降序相关性得分sorting“

上面的findFn调用返回一个数据框,其中有九列,结果是行 – 呈现为HTML。

扫描最后一列, 描述和链接 ,find项目(行)21:

余弦测量(matrix)

这个文本也是一个链接; 点击它就可以进入包含该function的Package中该function的帮助页面 – 换句话说

使用findFn ,你可以很快find你想要的function, 即使你不知道它在哪个包中

看起来有几个选项已经可用了,但我偶然发现了一个我喜欢的习惯解决scheme,所以我想我会把它添加到列表中。

 install.packages('proxy') # Let's be honest, you've never heard of this before. library('proxy') # Library of similarity/dissimilarity measures for 'dist()' dist(m, method="cosine") 

从Jonathan Chang的评论中,我写了这个函数来模拟dist。 没有额外的软件包加载。

 cosineDist <- function(x){ as.dist(1 - x%*%t(x)/(sqrt(rowSums(x^2) %*% t(rowSums(x^2))))) } 

检查这些函数lsa :: cosine() , clv :: dot_product()和arules :: dissimilarity()

你也可以检查纯素食包: http : //cran.r-project.org/web/packages/vegan//index.html

在这个包装中的functionvegdist有manhattankulczynskijaccardaltGowermorisitaaltGowermorisitaaltGowermorisitahornmountfordraupbinomialchaocao等各种不同的(距离)function。 请查看软件包中的.pdf以获得定义,或者查阅参考资料https://stats.stackexchange.com/a/33001/12733

如果你有一个点积matrix,你可以使用这个函数来计算余弦相似度matrix:

 get_cos = function(S){ doc_norm = apply(as.matrix(dt),1,function(x) norm(as.matrix(x),"f")) divide_one_norm = S/doc_norm cosine = t(divide_one_norm)/doc_norm return (cosine) } 

inputS是点积的matrix。 简而言之, S = dt %*% t(dt) ,其中dt是您的数据集。

这个函数基本上是用向量的规范来划分点积。

Interesting Posts