向量距离度量中的几种计算方式

向量距离度量

衡量两条向量之间的距离,可以将某一张图片通过特征提取来转换为一个特征向量。衡量两张图片的相似度就可以通过衡量这两张图片对应的两个特征向量之间的距离来判断了。

1.欧式距离

欧式距离可以简单理解为两点之间的直线距离。对于两个n维空间点 <math xmlns="http://www.w3.org/1998/Math/MathML"> a = ( x 1 , x 2 , ... , x n ) a=(x_1, x_2, ..., x_n) </math>a=(x1,x2,...,xn)和 <math xmlns="http://www.w3.org/1998/Math/MathML"> b = ( y 1 , y 2 , ... , y n ) b=(y_1, y_2, ...,y_n) </math>b=(y1,y2,...,yn),它们之间的欧式距离定义如下:

三维空间中边长为1的立方体

在三维空间中的边长为1的一个立方体,它的对角线之间的距离为 <math xmlns="http://www.w3.org/1998/Math/MathML"> 3 \sqrt3 </math>3 ,如图2-1所示。这个距离值就是欧氏距离,也就是平时说得最多的"距离"。在图2-1中,若以A点为坐标原点建立空间直角坐标系,那么A点的位置为 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( 0 , 0 , 0 ) (0,0,0) </math>(0,0,0),B点的位置为 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( 1 , 1 , 1 ) (1,1,1) </math>(1,1,1),则A点与B点之间的距离也就是的模长:

2.曼哈顿距离

曼哈顿距离最初指的是区块建设的城市(如曼哈顿)中,两个路口间的最短行车距离,因此也被称为城市街区距离。对于两个n维空间 <math xmlns="http://www.w3.org/1998/Math/MathML"> a = ( x 1 , x 2 , ... , x n ) a=(x_1, x_2, ...,x_n) </math>a=(x1,x2,...,xn) 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> b = ( y 1 , y 2 , ... , y n ) b=(y_1, y_2, ..., y_n) </math>b=(y1,y2,...,yn),它们之间的曼哈顿距离定义如下:

曼哈顿距离公式还是比较容易理解的,例如a=[1,2,3],b=[2,3,4],那么两个向量之间的曼哈顿距离可以表示如下:

<math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ 1 − 2 ∣ + ∣ 2 − 3 ∣ + ∣ 3 − 4 ∣ = 3 |1-2| + |2-3| + |3-4| = 3 </math>∣1−2∣+∣2−3∣+∣3−4∣=3

求解曼哈顿距离的过程就是求两条向量中每个对应位置的元素之差的绝对值,然后将其求和的过程。

3.余弦距离

余弦距离指的是向量空间中两个向量间的夹角的余弦值,又称作余弦相似度 。对于两个n维空间 <math xmlns="http://www.w3.org/1998/Math/MathML"> a = ( x 1 , x 2 , ... , x n ) a=(x_1, x_2, ...,x_n) </math>a=(x1,x2,...,xn) 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> b = ( y 1 , y 2 , ... , y n ) b=(y_1, y_2, ..., y_n) </math>b=(y1,y2,...,yn),它们的余弦距离定义如下:

可以根据向量之间点乘的公式反推一下余弦距离的表达式, 对于两个向量 <math xmlns="http://www.w3.org/1998/Math/MathML"> a = [ 1 , 2 , 3 ] a=[1,2,3] </math>a=[1,2,3]与 <math xmlns="http://www.w3.org/1998/Math/MathML"> b = [ 4 , 5 , 6 ] b=[4,5,6] </math>b=[4,5,6],它们之间点积的计算过程如下:

<math xmlns="http://www.w3.org/1998/Math/MathML"> a ⋅ b = ∣ a ∣ ⋅ ∣ b ∣ ⋅ c o s θ a \cdot b = |a|\cdot|b|\cdot cosθ </math>a⋅b=∣a∣⋅∣b∣⋅cosθ

那么,这两个向量之间夹角θ的余弦值可以表示为:

这两个向量之间夹角的余弦值就是这两个向量之间的余弦相似度。将向量的计算过程带入式中,可以得到这两条向量之间的余弦相似度:

余弦相似度的数值范围也就是余弦值的范围,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> [ − 1 , 1 ] [-1, 1] </math>[−1,1],这个值越高也就说明相似度越大。可以看到,这两条向量之间的相似度非常接近1,可以说是非常相似的。也可以想象到,在三维空间中,这两条向量的差距其实并不是非常大,这也从侧面印证了余弦相似度的数值含义。

值得一提的是,有些时候希望这个数值的范围在 <math xmlns="http://www.w3.org/1998/Math/MathML"> [ 0 , 1 ] [0, 1] </math>[0,1]这个区间中,也就是对结果进行归一化处理。这个归一化过程可以利用余弦值的性质来完成:

<math xmlns="http://www.w3.org/1998/Math/MathML"> c o s θ ′ = 0.5 + 0.5 ∗ c o s θ cosθ' = 0.5 + 0.5 * cosθ </math>cosθ′=0.5+0.5∗cosθ

余弦相似度是一种非常常用的衡量向量之间距离的方式,常用在人脸识别等特征相似度度量的场景中。

4.汉明距离

汉明距离在信息论中更常用,表示的是两个等长度的字符串中位置相同但字符不同的位置个数,。如字符串"011001"与字符串"101100"之间的汉明距离为4,也就是这两个字符串之间存在4个位置的不同,分别出现在第1、第2、第4和第6个字符的位置上。

汉明距离也可以用在某些图像相似度识别场景,如有种图像相似性识别算法叫作感知哈希算法(Perceptual Hash Algorithm) ,该算法可以将图片映射为一个哈希字符串,比较两个图片之间的相似度就可以通过判断两个哈希字符串之间不一致的位置有多少来实现,也就是计算汉明距离的过程。

5.杰卡德距离

杰卡德Jaccard相似系数计算数据集之间的相似度,计算方式为:数据集交集的个数和并集个数的比值。计算

杰卡德距离是用来衡量两个数据集差异性的一种指标,被定义为 1 减去杰卡德相似系数。对于二值变量,杰卡德距离等价于谷本系数。

杰卡德距离适合字符串相似性度量。

6.谷本距离

谷本距离Tanimoto主要用于衡量二值变量,对于二值变量,谷本距离公式可表示为:

在 Milvus 中,谷本距离仅支持二值变量。

值域从 0 到正无穷。

对于二值变量,谷本系数等价于杰卡德距离:

对于二值变量,谷本系数值域为 0 到+1(+1 的相似度最高)

7.超结构

超结构superstructure主要用来计算某化学结构与其超结构的相似度,值越小则相似度越大。 超结构的公式可表示为:

其中

  • 分子式 B 是分子式 A 的超结构。
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> N A N_A </math>NA 表示分子式 A 的化学指纹中二进制位的数量。
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> N B N_B </math>NB 表示分子式 B 的化学指纹中二进制位的数量。
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> N A & B N_{A\&B} </math>NA&B 表示分子式 A 和 B 的化学指纹中共有的二进制位的数量。

8.子结构

子结构substructure主要用来计算某化学结构与其子结构的相似度,值越小则相似度越大 子结构的公式可表示为:

其中

  • 分子式 B 是分子式 A 的子结构。
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> N A N_A </math>NA 表示分子式 A 的化学指纹中二进制位的数量。
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> N B N_B </math>NB 表示分子式 B 的化学指纹中二进制位的数量。
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> N A & B N_{A\&B} </math>NA&B 表示分子式 A 和 B 的化学指纹中共有的二进制位的数量。
相关推荐
Rookie也要加油17 分钟前
01_SQLite
数据库·sqlite
liuxin3344556622 分钟前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。1 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec1 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa1 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke1 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D2 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录2 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.3 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构
程序猿小D3 小时前
第二百六十七节 JPA教程 - JPA查询AND条件示例
java·开发语言·前端·数据库·windows·python·jpa