加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么两个向量之间的余弦相似性是负的?

发布时间: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) – 但它也可能值得回去并更仔细地思考要使用的相似性度量的目的/意义……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读