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

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

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

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

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

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

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?别闹,你的问题是啥来。

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

  1. 余弦相似度和欧氏距离_欧氏距离和余弦相似度

    余弦相似度和欧氏距离 Photo by Markus Winkler on Unsplash Markus Winkler在Unsplash上拍摄的照片 This is a quick and str ...

  2. 相似度度量:欧氏距离与余弦相似度(Similarity Measurement Euclidean Distance Cosine Similarity)...

    在<机器学习---文本特征提取之词袋模型(Machine Learning Text Feature Extraction Bag of Words)>一文中,我们通过计算文本特征向量之间 ...

  3. 对比欧氏距离与余弦相似度

    欧式距离 欧氏距离就是我们平常所说的距离,如果是平面上的两个点和  ,那么 A 与 B 的欧式距离就是:如果是三维空间中的两个点 和  ,那么 A 与 B 的欧式距离就是:如果推广到高维空间,公式可以 ...

  4. 欧氏距离、余弦相似度、Jaccard相似度、皮尔逊的Python代码与实例

    首先是一段计算4个相似度的Python代码. 需要注意的是,进行归一化操作后,4个函数取值范围都是0-1,而且都是数值越大表示相似性越高,数值为1代表完全相似. import numpy as npd ...

  5. [推荐系统]欧氏距离和余弦相似度

    两者相同的地方,就是在机器学习中都可以用来计算相似度,但是两者的含义有很大差别,以我的理解就是: 前者是看成坐标系中两个点,来计算两点之间的距离: 后者是看成坐标系中两个向量,来计算两向量之间的夹角. ...

  6. 【转】自然语言处理:文本相似度计算(欧氏距离、余弦相似度、编辑距离、杰卡德相似度)

    文本相似度,顾名思义是指两个文本(文章)之间的相似度,在搜索引擎.推荐系统.论文鉴定.机器翻译.自动应答.命名实体识别.拼写纠错等领域有广泛的应用. 与之相对应的,还有一个概念--文本距离--指的是两 ...

  7. 自然语言处理:文本相似度计算(欧氏距离、余弦相似度、编辑距离、杰卡德相似度)

    文本相似度,顾名思义是指两个文本(文章)之间的相似度,在搜索引擎.推荐系统.论文鉴定.机器翻译.自动应答.命名实体识别.拼写纠错等领域有广泛的应用. 与之相对应的,还有一个概念--文本距离--指的是两 ...

  8. 关于欧氏距离和余弦相似度的使用场景

    最近在做"判断两段文本的语义相似度"的事情,实验中用doc2vec做文本向量化,用余弦值衡量文本相似度. ## 那么为什么选用余弦呢? 如向量的维度是3,有三段文本a.b.c,文本 ...

  9. 相似度计算——欧氏距离、汉明距离、余弦相似度

    计算图像间的相似性可以使用欧氏距离.余弦相似度/作为度量,前者强调点的思想,后者注重线的思想. 欧氏距离 欧式距离/Euclidean Distance即n维空间中两个点之间的实际距离.已知两个点A= ...

最新文章

  1. java makerdd_Spark中parallelize函数和makeRDD函数的区别
  2. 记录:C#编程中的字符串
  3. 智商负250,我可能玩了一个假的大冒险
  4. oralce 异常处理 exception
  5. JavaScript高级day01-PM【对象、函数、回调函数、IIFE、this、关于语句分号问题、webstorm代码模板、复习】
  6. Spring使用注释
  7. 动态规划|最大k乘积问题(C语言)
  8. matplotlib  plt.scatter
  9. jquery点击非div区域隐藏div
  10. 优化Oracle网络设置的方案
  11. ROS笔记(12) Rviz
  12. xp计算机用户密码设置,XP怎么设置开机密码_XP系统设置开机密码教程-192路由网...
  13. ExtDeprecationWarning: Importing flask.ext.bootstrap is deprecated, use flask_bootstrap instead.
  14. 单词卡片被遗落的单词 その2
  15. const 使用方法具体解释
  16. scp创建远程目录_如何在 HPC 硬件上远程运行大型仿真?
  17. 基于Maven的S2SH(Struts2+Spring+Hibernate)框架搭建
  18. NMEA 0183语句经度、纬度 度分格式转度度格式计算方法
  19. python制作自动交易软件-Python语言之一位程序员写了一个自动化交易程序,躺着玩,两年就挣了两百万!...
  20. 前端大屏幕项目大厂解决兼容问题(react)

热门文章

  1. 在华为、美的、海尔、TCL等企业的成长轨迹背后,都有一个共同的秘密
  2. 超微服务器主板bios装系统,超微 bios设置,小编教你超微主板bios怎么设置U盘启动...
  3. MySQL语句中过滤条件放在哪?on、where还是having,他们区别和联系
  4. java中的final关键字和effectively final
  5. 怎么将千千静听的音频转换成mp3格式?
  6. 三个短视频APP开发的成功秘诀免费发放
  7. arduino 伸缩轨道_基于Arduino的多轨道Midi音序器的实现
  8. Python面向对象上
  9. html5画分形图形,HTML5/Canvas 可在线调整的朱丽叶分形图
  10. java读取rvt文件数据_在不打开Rvt文件情况下读取rvt 里的信息