K-近邻(K-Nearest Neighbors,KNN)算法中,选择合适的距离度量是非常重要的,因为它决定了如何计算数据点之间的“相似性”。不同的距离度量可能会导致不同的KNN模型性能。选择哪种距离度量取决于数据的类型和问题的性质。可以通过交叉验证来比较不同距离度量对模型性能的影响,以选择最合适的一种。
1、欧几里得距离(Euclidean Distance)
距离的度量最常用的距离度量方法,适用于连续型数据。它是在多维空间中两点间的“直线”距离。它表示两个点在n
维空间中的实际距离。
Python中,可以使用多种方法来计算两个点之间的欧几里得距离。代码如下,
1)使用math模块
import math
def euclidean_distance(point1, point2):
return math.sqrt(sum((p1 - p2) ** 2 for p1, p2 in zip(point1, point2)))
# 测试
point1 = (1, 2, 3)
point2 = (4, 5, 6)
print(euclidean_distance(point1, point2))
2)使用NumPy
import numpy as np
def euclidean_distance_np(point1, point2):
return np.sqrt(np.sum((np.array(point1) - np.array(point2)) ** 2))
# 测试
point1 = (1, 2, 3)
point2 = (4, 5, 6)
print(euclidean_distance_np(point1, point2))
2、曼哈顿距离(Manhattan Distance)
KNN算法的关键之一是距离度量,它决定了如何计算特征空间中两点之间的距离。曼哈顿距离(Manhattan Distance)是KNN中常用的距离度量之一。曼哈顿距离,也称为城市街区距离,是通过计算两个点在标准坐标系上的绝对轴距总和来衡量的。
1)使用math模块
import math
def manhattan_distance(point1, point2):
return sum(abs(p1 - p2) for p1, p2 in zip(point1, point2))
# 示例点
point1 = (1, 2, 3)
point2 = (4, 5, 6)
# 计算曼哈顿距离
dis