为什么两个向量之间的余弦相似性是负的?
发布时间:2020-12-14 05:15:02 所属栏目:大数据 来源:网络整理
导读:我有2个向量与11维. a - c(-0.012813841,-0.024518383,-0.002765056,0.079496744,0.063928973,0.476156960,0.122111977,0.322930189,0.400701256,0.454048860,0.525526219)b - c(0.64175768,0.54625694,0.40728261,0.24819750,0.09406221,0.16681692,-0.0421
我有2个向量与11维.
a <- c(-0.012813841,-0.024518383,-0.002765056,0.079496744,0.063928973,0.476156960,0.122111977,0.322930189,0.400701256,0.454048860,0.525526219) b <- c(0.64175768,0.54625694,0.40728261,0.24819750,0.09406221,0.16681692,-0.04211932,-0.07130129,-0.08182200,-0.08266852,-0.07215885) cosine_sim <- cosine(a,b) 返回: -0.05397935 我使用了lsa包中的cosine(). 对于某些值,我得到的负cosine_sim就像给定的一样.我不确定相似性如何是负面的.它应该在0和1之间. 任何人都可以解释这里发生了什么. 解决方法
关于R的好处是你可以经常深入研究各种功能,亲眼看看发生了什么.如果输入余弦(没有任何括号,参数等),则R打印出函数体.通过它(需要一些练习),您可以看到有一堆机器用于计算矩阵列的成对相似性(即,包裹在if(is.matrix(x)&&中的位) ; is.null(y))条件,但函数的关键行是
crossprod(x,y)/sqrt(crossprod(x) * crossprod(y)) 让我们把它拉出来并应用于你的例子: > crossprod(a,b)/sqrt(crossprod(a)*crossprod(b)) [,1] [1,] -0.05397935 > crossprod(a) [,] 1 > crossprod(b) [,] 1 所以,你正在使用已经规范化的向量,所以你只需要使用crossprod来查看.在你的情况下,这相当于 > sum(a*b) [1] -0.05397935 (对于实矩阵运算,crossprod比手工构造等效运算更有效). 正如@Jack Maney的回答所说,两个向量的点积(长度(a)*长度(b)* cos(a,b))可以是负数…… 对于它的价值,我怀疑lsa中的余弦函数可能更容易/有效地实现矩阵参数as.dist(crossprod(x))… 编辑:在对下面现在删除的答案的评论中,我建议如果想要在[0,1]上进行相似性度量,则余弦距离度量的平方可能是合适的 – 这类似于使用确定系数(r ^ 2)而不是相关系数(r) – 但它也可能值得回去并更仔细地思考要使用的相似性度量的目的/意义…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |