def*_*foo 25 arrays trigonometry r distance similarity
我想知道R中是否有内置函数可以找到两个数组之间的余弦相似度(或余弦距离)?
目前,我实现了自己的功能,但我不禁认为R应该已经配备了一个.
dou*_*oug 67
这些问题一直存在(对我而言 - 正如r标签的SO问题清单所证明的那样 - 其他问题也是如此):
有没有一个函数,无论是在R核心还是在任何R包中,都有x?如果是这样,
哪里可以在CRAN的+2000 R包中找到它?
简短的回答:当出现这些问题时,试试sos包
之前的答案之一给出了余弦以及其帮助页面的链接.这可能正是OP想要的.当您查看链接到页面时,您会看到此函数位于lsa包中.
但是,如果您还不知道要查找哪个包,您会如何找到此功能?
你可以随时尝试标准的R帮助功能(下面的">"只是指R命令行):
> ?<some_name>
> ??<some_name>
> *apropos*<some_name>
Run Code Online (Sandbox Code Playgroud)
如果这些失败,那么安装并加载sos包,然后
***findFn***
Run Code Online (Sandbox Code Playgroud)
findFn也别名为"???",虽然我不经常使用它,因为我认为你不能传递函数名以外的参数
对于这里的问题,试试这个:
> library(sos)
> findFn("cosine", maxPages=2, sortby="MaxScore")
Run Code Online (Sandbox Code Playgroud)
传入的附加参数("maxPages = 2"和"sortby ="MaxScore")仅限制返回的结果数量,并分别指定结果的排名方式 - 即"找到名为'余弦'的函数或者在函数描述中使用术语"余弦",只返回两页结果,并通过降低相关性得分对它们进行排序"
上面的findFn调用返回一个包含九列的数据框,结果为行 - 呈现为HTML.
扫描最后一列,描述和链接,项目(行)21您会发现:
余弦测量(矩阵)
这个文字也是一个链接; 单击它会转到包含该功能的包中该功能的帮助页面 - 换句话说
使用findFn,你可以很快找到你想要的功能,即使你不知道它在哪个包中
Dav*_*arx 22
看起来已经有一些选项已经可用,但我偶然发现了一个我喜欢的惯用解决方案,所以我想我会把它添加到列表中.
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")
Run Code Online (Sandbox Code Playgroud)
pbi*_*ble 16
接受Jonathan Chang的评论,我写了这个函数来模仿dist.没有额外的包加载.
cosineDist <- function(x){
as.dist(1 - x%*%t(x)/(sqrt(rowSums(x^2) %*% t(rowSums(x^2)))))
}
Run Code Online (Sandbox Code Playgroud)
您还可以查看纯素包:http://cran.r-project.org/web/packages/vegan//index.html
此包中的功能vegdist具有多种相异(距离)的功能,例如manhattan,euclidean,canberra,bray,kulczynski,jaccard,gower,altGower,morisita,horn,mountford,raup,binomial,chao或cao.请查看包中的.pdf以获取定义或参考参考https://stats.stackexchange.com/a/33001/12733.