欧氏距离和余弦相似度的前世今缘

前几天在一场报告中和同事聊到了高维向量的距离度量,大家讨论的点是:欧氏距离在高维下效果会非常差,那有没有其他更有效的方法?

当时第一时间想到了余弦相似度,印象中在文本相似度(文本匹配)度量中就是用的余弦相似度。而且在深度学习中,也经常通过计算两个向量的内积来表示相似程度。

然后同事说,余弦相似度只是欧距离的归一化表示,本质没有区别。当场懵逼:)

 

高维相似度量的讨论结果不重要了,最后再说,先说欧氏和余弦的问题。

闻道有先后,能发现问题令人兴奋;既然遇到了不懂的,慢慢搞懂就好了。

 

下面分享一下探索过程,来看看两者的“前世今缘”

part1: 前世

这部分是耳熟能详的

距离:

欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在N维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。

 

这个公式简单,很合理,很符合直觉,实践中被大量使用。

它还可以再推广一下,然后被称为闵可夫斯基距离

 

当p=2时,即为欧氏距离。(for fun,也许该叫毕氏距离,因为毕达哥拉斯定理

这个就不上图了,因为太简单了。

余弦相似度:

余弦相似度说着顺口,余弦距离只是做了个减法转化。

柿(式)子要从最简单的捏起。

 

余弦:

定义域是整个实数集,值域是[-1, 1]。它是周期函数,其最小正周期为 2π。在自变量为2kπ (k 为整数)时,该函数有极大值1;在自变量为(2k+1)π时,该函数有极小值-1。余弦函数是偶函数,其图像关于y轴对称。

余弦值:

两个向量间的余弦值可以通过使用欧几里得(是的,又有我)点积公式求出

余弦相似度:

OK,让我们假设向量a和向量b的长度均大于0,上面的式子请挪动一下

 

so,余弦相似度就是两个向量之间夹角的余弦值,取值范围自然是[-1,1]。

对于文本匹配,属性向量A和B通常是文档中的词频向量。余弦相似性,可以被看作是在比较过程中把文件长度正规化的方法。

由于一个词的频率(TF-IDF权)不能为负数(都在第一象限),所以这两个文档的余弦相似性范围是[0,1]。并且,两个词的频率向量之间的角度不能大于90°。

上个盗来的图:(from:  https://www.cnblogs.com/lzhu/p/10405091.html

 

余弦距离: dist(a, b) = 1 - similarity

如前面说的,只是减法的转换。为啥不直接取负,前面要用1减?

因为,这样的取值范围是[0,2],而直接取负,取值范围还是[-1,1],我距离和你相似度一样的取值范围,岂不是很没面子(距离非负性的要求)。

 

part2: 今缘

这部分是我之前不知道的

之前都没想过欧氏距离和余弦距离能有什么联系,因为物理意义上两者感觉毫无关系(一个是描述直线,一个是描述角度)。

这时候就是数学展现它美丽的时候了,一个复杂的问题,经过数学的洗礼,总是那么优美动人。(感动到出了双下巴:))

下面是大象装冰箱的三步:

1. 归一化:现在a,b的模长都经过了归一化处理(ok, 余弦距离的分母没了)

2. 一通推导:

过程改天补,先描述一下:

从左往右推到=》累计里的括号展开=》平方项放一块=》已归一化,所以平方部分累加值是1=》高等数学(1+1=2)=》交叉乘刚好可以写成内积(or余弦)=》提出系数=》OK

 

3. 关门:欧距离和余弦距离正相关

 

终于,这三生三世的缘分,单靠直觉是无法got到的了。我还以为两者是一个人呢,原来只是一对情侣:你虽然拥有了我的肉体,但灵魂上只是一半(1/2次方)

 

最后说高维向量距离度量的讨论结果:

没好办法

 

降维?embedding?别闹,你的问题是啥来。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值