编写一个 R 函数来查找余弦相似度
Writing an R function to find cosine similarity
我知道余弦函数可用于查找 R Studio 库之一中存在的余弦相似度。我正在尝试使用矢量化运算符制作我自己的,但我被难住了。我的函数看似将所有值加在一起,然后一次性对它们执行操作,而不是对每个点集执行每个余弦相似度,然后按应有的方式将它们加在一起。
cossim <- function(A,B) { (sum(A,B))/sqrt((sum(A^2))*(sum(B^2))) }
我传入两个向量(出于测试目的,我只是尝试传入同一个向量,看看它是否会 return 1,这就是当你对同一个向量的 2 做余弦时发生的情况)和它return 0.8571429 而不是 1.
vec1 <- c(1,2,3)
当我做数学运算时,函数以 12/14 而不是 14/14 结束,就像它最后应该如何得到 1。
我认为问题在于您应该在对分子求和之前先将 A 和 B 的元素相乘。
cossim <- function(A,B) { (sum(A*B))/sqrt((sum(A^2))*(sum(B^2))) }
我知道余弦函数可用于查找 R Studio 库之一中存在的余弦相似度。我正在尝试使用矢量化运算符制作我自己的,但我被难住了。我的函数看似将所有值加在一起,然后一次性对它们执行操作,而不是对每个点集执行每个余弦相似度,然后按应有的方式将它们加在一起。
cossim <- function(A,B) { (sum(A,B))/sqrt((sum(A^2))*(sum(B^2))) }
我传入两个向量(出于测试目的,我只是尝试传入同一个向量,看看它是否会 return 1,这就是当你对同一个向量的 2 做余弦时发生的情况)和它return 0.8571429 而不是 1.
vec1 <- c(1,2,3)
当我做数学运算时,函数以 12/14 而不是 14/14 结束,就像它最后应该如何得到 1。
我认为问题在于您应该在对分子求和之前先将 A 和 B 的元素相乘。
cossim <- function(A,B) { (sum(A*B))/sqrt((sum(A^2))*(sum(B^2))) }