欧氏距离与余弦距离的关系

本文围绕人脸识别中欧式距离和余弦距离展开。指出归一化后的向量,其余弦距离和欧氏距离等价。还探讨了将余弦距离转换为欧式距离的原因,转换后可借助KDTree等数据结构减少搜索空间,但KDTree对高维向量不友好,此时可用BallTree。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在做人脸识别,有的方法使用的是L2距离,有的是使用的cos相似度,并且看到有的论文说,欧式距离和余弦距离是等价的。到底是怎么等价的呢。这里我就来和小伙伴们一探究竟。

推倒

首先给出结论,归一化后的向量的余弦距离和欧氏距离是等价的。
公式敲起来很麻烦,这里我就不敲了,引用一位知乎答友的图。链接在这了欧氏距离和余弦相似度的区别是什么?
在这里插入图片描述
上面的公式可以再推一步:
e u c = 2 ( 1 − c o s ( A , B ) ) euc=\sqrt{2(1-cos(A,B))} euc=2(1cos(A,B))
我们将 c o s ( A , B ) cos(A,B) cos(A,B)称为余弦相似度, 1 − c o s ( A , B ) 1-cos(A,B) 1cos(A,B)称为余弦距离,可以看到余弦距离和cos距离是等价的。推广到高纬空间可以得到一样的结论。
现在的人脸识别方法中,会对特征做归一化,归一化后特征的余弦距离和cos距离是等价的,所以使用哪个距离都是OK的。

为什么将余弦距离转换为欧式距离

下面的内容还是转自知乎答友,但是我不是很理解,先做一下记录,以后再去理解。毕竟不是一个方向的,我在人脸识别领域只是将欧式距离转换为余弦距离,并没有将余弦距离转换为欧式距离。

但是话说回来,为什么把余弦相似度转换为求欧式距离,这么转换有什么好处呢?根据上述例子,如果我根据余弦相似度计算相似doc时,需要两两比较,也就是 的操作。通常这种比较不能全量比较,可以借助于simhash 的思想,减少搜索空间。但是缺点是存在误差。但是转为求欧式距离呢,就可以上一个非常屌的数据结构,叫KDTree,至于复杂度降低多少,自己感受。另外多说一句,KDTree查询过程中涉及回溯操作,所以对高维度向量并不友好,通常word2vec生成200维向量,用kdtree的效率不会高,这时候应该用BallTree。

上面提到的KDTree和BallTree我都没有听说过,还得进行补充。

原文链接:欧氏距离和余弦相似度的区别是什么?

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值