📅  最后修改于: 2023-12-03 14:52:49.327000             🧑  作者: Mango
在机器学习和数据挖掘中,距离函数(Distance Function)是十分常见的概念,它可以用于衡量样本之间的相似度或者不相似度。在Python中,可以通过一些常用的库来计算距离。同时,我们也可以通过手动实现距离函数来扩展使用的范围。
SciPy是Python中的一个科学计算库,其中包含了许多距离计算的函数。其中最常用的是 scipy.spatial.distance.pdist
和 scipy.spatial.distance.cdist
函数。
pdist
可以计算一系列向量之间的距离,输出一个距离矩阵。而 cdist
可以计算两个集合中向量的距离,输出一个距离矩阵。
下面是一个使用 SciPy 计算欧氏距离和曼哈顿距离的例子:
import numpy as np
from scipy.spatial.distance import pdist, cdist
# 计算一系列向量之间的欧氏距离
X = np.array([[0,1],[1,0]])
D_Euclidean = pdist(X, 'euclidean')
print(D_Euclidean) # 输出 [1.41421356]
# 计算两个集合中向量之间的曼哈顿距离
X = np.array([[0,1],[1,0]])
Y = np.array([[1,1],[2,2]])
D_Manhattan = cdist(X, Y, 'cityblock')
print(D_Manhattan) # 输出 [[2. 3.][1. 2.]]
NumPy是Python中用于科学计算的一个扩展库,其中也包含了距离计算的函数。其中最常用的是 numpy.linalg.norm
函数。
norm
函数可以计算给定向量的范数,也就是给定向量与原点的欧氏距离。
下面是一个使用 NumPy 计算欧氏距离的例子:
import numpy as np
# 计算两个向量之间的欧氏距离
v1 = np.array([1,2,3])
v2 = np.array([4,5,6])
D_Euclidean = np.linalg.norm(v1 - v2)
print(D_Euclidean) # 输出 5.196152422706632
除了使用现有的库之外,我们也可以手动实现距离函数来扩展使用的范围。
以下是一个手动实现欧氏距离的例子:
import math
def euclidean_distance(x1, x2):
# x1, x2 是两个向量
return math.sqrt(sum([(a - b) ** 2 for a, b in zip(x1, x2)]))
# 计算两个向量之间的欧氏距离
v1 = [1,2,3]
v2 = [4,5,6]
D_Euclidean = euclidean_distance(v1, v2)
print(D_Euclidean) # 输出 5.196152422706632
Python中有许多可以用于计算距离的库,包括SciPy和NumPy等。如果需要扩展使用的范围,也可以手动实现距离函数。在使用距离函数的过程中,需要注意每个库或者自定义函数的输入与输出格式,以便正确的使用。