术语表  / 向量距离
向量距离

什么是向量距离?一文详解向量距离

向量距离在数学、物理学、工程学和计算机科学等多个领域都至关重要。它们用于测量物理量、分析数据、识别相似性以及确定向量之间的关系。 本文将提供向量距离及其在数据科学中应用的概述。

什么是向量距离?

向量距离,也称为距离度量或相似度度量,是一个数学函数,用于量化两个向量之间的相似性或不同。 这些向量可以代表各种数据集。向量距离有助于理解向量在特征空间中是接近还是远离。 考虑到这一点,在各种机器学习算法中,向量距离至关重要,使这些算法能够基于向量之间的关系做出决策。

机器学习中向量距离的应用场景有哪些?

千万不要低估向量距离的力量。以下是向量距离在机器学习领域中的一些应用场景:

  • 聚类 - 向量距离在将相似向量分组成簇时很有帮助。诸如 k-均值、层次聚类和 DBSCAN 等算法依赖于向量距离来确定哪些向量属于同一簇。
  • 分类 - 在 kNN 分类等算法中,通过计算某向量与其的 k 个最近邻向量的距离来确定其所在的聚类。因此,一个向量将被分配到其近邻最多的聚类中。
  • 自然语言处理(NLP) - 在文本挖掘和 NLP 中,向量距离可以计算文档相似度、执行情感分析和对文本文档进行聚类。
  • 数据预处理 - 在数据预处理步骤中,如特征缩放、归一化(Normalization)和去除异常值。向量距离对于专为机器学习算法准备的数据至关重要。
  • 神经网络 - 在神经网络训练中,向量距离作为损失函数或正则化项(Regularization term)至关重要,以鼓励输出向量和目标向量之间的某些关系。
  • 异常检测 - 通过测量向量与中心簇或其他向量的距离,可以检测异常或离群值。远离大多数向量的向量被视为异常。
  • 降维 - 诸如 UMAP(均匀流形近似与投影)和 t-SNE(t 分布随机邻域嵌入)等技术使用向量距离在高维数据中创建低维表示,尽可能保持成对距离。

总之,向量距离是许多机器学习任务和应用的基石。因此,选择合适的向量距离通常对算法能力及能否捕捉向量数据之间关系至关重要。

有哪些向量相似度类型?

在机器学习领域,有多种相似度类型可用于评估两个向量之间的差异或相似性。请记住,您需要根据数据类型和您的应用场景选择合适的相似度类型。以下是一些常见的相似度类型。

  • 欧氏距离(Euclidean Distance):用于计算向量之间的距离,也可以用于相似度计算。欧氏距离是两个向量之间的直线距离,可以表示为它们各个维度差值的平方和的平方根。欧氏距离越小,表示两个向量越相似。
  • 曼哈顿距离(Manhattan Distance):也称为城市街区距离,用于计算向量之间的距离。曼哈顿距离是两个向量各个维度差值的绝对值之和。与欧氏距离不同,曼哈顿距离更关注各个维度的差异,而不是方向。
  • 余弦相似度(Cosine Similarity):用于计算向量之间的相似度,常用于文本数据的相似度计算。它通过计算两个向量之间的夹角余弦值来衡量它们的相似程度,取值范围为[-1, 1],值越接近1表示越相似。
  • 皮尔逊相关系数(Pearson Correlation Coefficient):用于计算两个变量之间的相关性,常用于评估用户之间的相似度。皮尔逊相关系数衡量了两个变量之间的线性相关程度,取值范围为[-1, 1],值越接近1表示越相关。
  • 余弦距离(Cosine Distance):与余弦相似度相对应,是通过计算两个向量之间的夹角余弦值的补值来表示距离。余弦距离越大,表示两个向量越不相似。
  • Jaccard相似系数(Jaccard Similarity Coefficient):用于计算集合之间的相似度。Jaccard相似系数是两个集合交集大小与并集大小的比值,取值范围为[0, 1],值越接近1表示越相似。
  • 汉明距离,又称编辑距离,是一种衡量两个等长字符串之间的不同之处的度量方法。

总之,不同的相似度类型计算相似度的方法不同。因此,选择不同的相似度类型会影响机器学习算法的性能。

使用向量距离的主流软件库

接着,让我们来看看一些提供各种功能和能力以处理向量距离的流行软件库。

这些向量数据库和库处理相似性搜索、聚类以及其他涉及高维数据的任务。

Milvus

Milvus 是 Zilliz 的一个开源软件库,旨在为相似性搜索和 AI 驱动的应用提供一个高性能的向量数据库。它提供了高维向量的高效存储、索引和查询。

Milvus 在图像搜索、推荐系统和自然语言处理任务中表现良好。它提供 L2(欧几里得)、内积(IP)和余弦相似度类型。

要使用 Milvus,安装数据库并插入向量。然后,创建索引并使用其 API 或 SDK 执行相似性搜索查询。

FAISS

FAISS 是由 Meta 的 AI 研究团队构建的高性能库,用于高效的相似性搜索和大型数据集的聚类。它处理常见于图像识别、自然语言处理和其他机器学习应用中的高维向量。因此,大多数组织和研究机构正在逐渐采用 [FAISS](https://zilliz.com.cn/blog/faiss-milvus-setting up) 进行大规模数据分析和机器学习任务。

Annoy

Annoy 是一个 C++ 库,用于近似最近邻搜索。它使用随机邻居有效地构建索引结构,以在高维空间中快速进行相似性搜索。

ScaNN

ScaNN 是一个基于 TensorFlow 的近似最近邻居搜索库。它提供 GPU 加速,并支持不同的索引方法。ScaNN 也可作为 Milvus 中的索引选项。

NMSLIB

NMSLIB 是一个集合了高效、高质量的非度量和度量空间搜索算法的库。它支持各种索引方法和搜索以及用于相似性搜索的距离度量。

PQ-Tree

PQ-Tree 是一个利用乘积量化进行高效相似性搜索的库。它加速了高维空间中的距离计算。

PANNs (Product ANN Search)

PANNs 是一个高效的库,专为近似最近邻搜索设计,特别适用于推荐系统和电子商务应用。总之,这些软件库拥有许多用于处理向量数据库和相似搜索的特性和功能。根据您的具体需求、数据集特性和硬件资源,选择适合您需求的库。

向量距离常见问题

如何计算向量长度?

向量距离公式用于计算欧几里得空间中向量的长度。对于向量V = (v₁, v₂, ..., vₙ),您可以按下面的方式计算距离公式:距离 Distance (V) = √(v₁² + v₂² + ... + vₙ²)

换句话说,向量长度代表向量内每个元素的平方和的平方根。

如何计算向量 V 和 U 之间的距离?

要计算两个向量 V 和 U 之间的距离,您可以使用以下所示的欧氏距离公式:

距离 (V, U) = √((v₁ - u₁)² + (v₂ - u₂)² + ... + (vₙ - uₙ)²)

其中,(v₁, v₂, ..., vₙ) 代表向量 V 的元素,而 (u₁, u₂, ..., uₙ) 表示向量 U 的元素。

如何计算两个向量见的 L2 距离?

L2 距离 (V, U) = √((v₁ - u₁)² + (v₂ - u₂)² + ... + (vₙ - uₙ)²)

如何计算两个位置向量间距离?

使用上述问题中的 L2 距离公式来计算两个位置向量 P 和 Q 之间的距离。如果向量 P = (x₁, y₁, z₁) 而向量 Q = (x₂, y₂, z₂),那么距离 (P, Q) = √((x₁ - x₂)² + (y₁ - y₂)² + (z₁ - z₂)²)。这个公式计算了 P 和 Q 在 3D 空间中所代表的向量之间的距离。