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