欧式距离的向量推导形式
它通过向量的模长和点积来表示两个向量之间的欧式距离,核心是利用向量运算的余弦定理展开:

这种推导方式把欧式距离和向量的几何属性(模长、夹角)关联起来,更清晰地体现了它的几何意义 ——两个向量在空间中的直线距离,是欧式距离定义在向量运算场景下的严谨表达。
欧式距离的非向量推导形式

这种非向量推导形式更直观地体现了欧式距离的 “坐标差累积” 本质,无需依赖向量的模长和点积概念,直接通过坐标数值的运算即可计算两点在空间中的直线距离。
欧式距离的向量推导形式和非向量推导形式的应用场景

向量点积

余弦距离


文本相似度:在 NLP 中,用向量表示文本(如词袋模型、TF-IDF),通过余弦距离衡量文本主题的差异
推荐系统:用向量表示用户 / 物品偏好,余弦距离越小,用户兴趣或物品属性越相似
聚类/分类:在关注 “方向相似性” 而非 “数值大小” 的场景(如判断两个文档的主题是否一致),余弦距离比欧式距离更有效

余弦距离在图像识别领域的应用场景
特征匹配、分类、检索和跟踪
人脸识别
余弦距离用于衡量人脸特征向量的相似度。例如,通过 FaceNet 等模型提取人脸的高维特征向量后,计算待识别人脸与数据库中人脸特征向量的余弦距离,距离越小则相似度越高,从而实现身份识别
这种方法对人脸的姿态、表情变化具有较好的鲁棒性,能有效区分不同个体
图像分类
余弦距离可用于衡量图像特征向量与各类别中心特征向量的相似度。例如,提取图像的 ORB、SIFT 等局部特征并转换为向量后,通过计算待分类图像特征向量与各预设类别特征向量的余弦距离,将其归类到距离最小的类别中。
此外,还可结合支持向量机(SVM)等分类器,以余弦距离作为特征空间的度量,提升分类准确性。
图像检索
余弦距离用于计算查询图像与数据库中图像特征向量的相似度,从而返回相似图像。例如,当用户输入一张汽车图片时,系统提取其特征向量,与数据库中所有汽车图像的特征向量计算余弦距离,按距离从小到大排序后返回最相似的图像。
这种方法能有效捕捉图像的语义相似性
即使图像在像素层面差异较大,只要特征方向一致(如同一类别的不同车型),也能被检索出来
多目标跟踪(如 DeepSort)
在 DeepSort 等多目标跟踪算法中,余弦距离用于衡量目标外观特征的相似度。通过卷积神经网络提取目标的外观特征向量后,计算当前帧检测框与已有轨迹特征向量的余弦距离,结合匈牙利算法实现目标的跨帧匹配,有效解决了遮挡、重叠等场景下的跟踪难题。
欧氏距离代码
import numpy as np
x = np.random.random(10)
y = np.random.random(10)
# solution1
dist1 = np.linalg.norm(x-y)
# solution2
dist2 = np.sqrt(np.sum(np.square(x-y)))
print('x',x)
print('y',y)
print('dist1',dist1)
print('dist2',dist2)
余弦距离代码
import numpy as np
from scipy.spatial.distance import pdist
x=np.random.random(10)
y=np.random.random(10)
# solution1
dist1 = 1 - np.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y))
# solution2
dist2 = pdist(np.vstack([x,y]),'cosine')
print('x',x)
print('y',y)
print('dist1',dist1)
print('dist2',dist2)
证明对特征向量进行L2范数归一化后,欧式距离和余弦距离可以等价



对特征向量进行 L2 范数归一化后,欧式距离与余弦距离存在单调的等价关系(可通过对方直接推导得到)
因此在这种情况下两者可以等价衡量向量间的相似度(差异程度)
9048

被折叠的 条评论
为什么被折叠?



