Python求高维向量距离

在机器学习和数据分析领域,我们经常需要度量向量之间的相似性或距离。对于低维向量,我们可以使用欧氏距离或曼哈顿距离等常见度量方法。但是当我们的数据变得高维时,传统的距离度量方法可能不再适用。在本文中,我们将介绍一些常用的高维向量距离度量方法,并使用Python代码进行实例演示。

欧氏距离

欧氏距离是最常见的向量距离度量方法之一,它是指在 n 维空间中两个点之间的直线距离。对于二维向量 (x1, y1) 和 (x2, y2),欧氏距离计算公式如下:

d = sqrt((x2 - x1)^2 + (y2 - y1)^2)

在Python中,我们可以使用NumPy库来计算欧氏距离。

import numpy as np

def euclidean_distance(a, b):
    return np.sqrt(np.sum((a - b) ** 2))

曼哈顿距离

曼哈顿距离是另一种常见的向量距离度量方法,它是指在 n 维空间中的两个点之间沿坐标轴的距离总和。对于二维向量 (x1, y1) 和 (x2, y2),曼哈顿距离计算公式如下:

d = |x2 - x1| + |y2 - y1|

同样地,我们可以使用NumPy库来计算曼哈顿距离。

import numpy as np

def manhattan_distance(a, b):
    return np.sum(np.abs(a - b))

余弦相似度

除了距离度量方法,我们还可以使用余弦相似度来度量向量之间的相似性。余弦相似度是指两个向量之间的夹角余弦值,取值范围从 -1 到 1,值越接近 1 表示向量越相似。对于二维向量 (x1, y1) 和 (x2, y2),余弦相似度计算公式如下:

similarity = dot(a, b) / (norm(a) * norm(b))

其中,dot(a, b) 表示向量 a 和向量 b 的点积,norm(a) 表示向量 a 的范数。同样地,我们可以使用NumPy库来计算余弦相似度。

import numpy as np

def cosine_similarity(a, b):
    dot_product = np.dot(a, b)
    norm_a = np.linalg.norm(a)
    norm_b = np.linalg.norm(b)
    return dot_product / (norm_a * norm_b)

示例演示

为了更好地理解上述距离度量方法的使用,我们将通过一个示例演示它们的计算过程。假设我们有两个三维向量 a = [1, 2, 3] 和 b = [4, 5, 6],我们可以使用上述的函数来计算它们之间的距离或相似度。

import numpy as np

def euclidean_distance(a, b):
    return np.sqrt(np.sum((a - b) ** 2))

def manhattan_distance(a, b):
    return np.sum(np.abs(a - b))

def cosine_similarity(a, b):
    dot_product = np.dot(a, b)
    norm_a = np.linalg.norm(a)
    norm_b = np.linalg.norm(b)
    return dot_product / (norm_a * norm_b)

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

print("Euclidean distance:", euclidean_distance(a, b))
print("Manhattan distance:", manhattan_distance(a, b))
print("Cosine similarity:", cosine_similarity(a, b))

运行以上代码,我们可以得到以下输出结果:

Euclidean distance: 5.196152422706632
Manhattan distance: 9
Cosine similarity: 0.9746318461970762