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

向量距离度量

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

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 的化学指纹中共有的二进制位的数量。
相关推荐
RestCloud6 小时前
4中常见的数据集成方式
数据库
Databend7 小时前
超 10 倍查询加速,N-Gram Index 设计与优化全解析
数据库
爱可生开源社区7 小时前
SCALE:一个面向专业级任务的大语言模型 SQL 能力开源评测框架
数据库
星环科技TDH社区版8 小时前
星环科技产品可存储的表格式功能介绍以及创建示例
大数据·数据库
Tapdata12 小时前
全球 DaaS 市场研究报告上线,聚焦数据服务化趋势与行业演进路径
数据库
李少兄13 小时前
MySQL 默认连接数
数据库·mysql
刘一说13 小时前
资深Java工程师的面试题目(六)数据存储
java·开发语言·数据库·面试·性能优化
江沉晚呤时13 小时前
EventSourcing.NetCore:基于事件溯源模式的 .NET Core 库
java·开发语言·数据库
珹洺14 小时前
数据库系统概论(十九)详细讲解关系查询处理与查询优化
数据库
liulun14 小时前
SQLite官方数据库加密方案
数据库·sqlite