特征空间中两个实例点的距离是两个实例点相似程度的反映。
欧式空间下的距离度量
假设特征空间X是n维实数向量空间R^n, x_i, x_j ∈ X,
最常用的距离度量方法时“闵科夫斯基距离”(Minkowski distance),即为x_i - x_j的Lp范数 ||x_i - x_j||p 。x_i, x_j 的 闵科夫斯基距离定义:
,这里 p >= 1.
当p=2时,称为欧式距离(Euclidean distance):
def distance(p0, p1):
# Computes euclidean distance
return np.sqrt(np.sum((p0-p1)**2))
当p=1时,称为曼哈顿距离(Manhattan distance):
def distance(p0, p1):
# Computes manhattan distance
return np.sum(np.abs(p0-p1))
当p→∞
时,就是切比雪夫距离(Chebyshev distance),距离为所有维度上差值的最大值:
非欧式空间下的距离度量
Jaccard距离
通过计算交集的相对大小来获得集合之间的相似度,这种相似度称为Jaccard相似度。
集合S和T的Jaccard相似度SIM(S,T):
例:集合S和T的交集有3个元素,并集中有8个元素
与Jaccard相似度相反,集合的Jaccard距离用集合中不同元素占所有元素的比例来衡量,可以定义为
余弦距离(cosine distance)
在有维度的空间下余弦距离才有意义,空间中的点可以代表方向。
夹角余弦等于它们的内积x·y
除以两个向量的L2
范式乘积。
夹角余弦取值范围为[-1,1]。余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向完全相反余弦取最小值-1。
海明距离(Hamming distance)
给定一个向量空间,海明距离定义为两个向量中不同分量的个数。海明距离往往应用于布尔向量。
例:10101和11110的海明距离为3。第2、4、5位元素不同。
编辑距离
编辑距离只适用于字符串比较。两个字符串x=x1x2···xn
及y=y1y2···ym
的编辑距离等于将x转换为y所需要的单字符插入及删除操作的最小数目。
或者,另一种定义和计算编辑d(x,y)
的方法基于x和y的最长公共子序列(longest common subsequence, LCS)的计算。通过在x和y的某些位置上进行删除操作能够得到某个字符串,基于上述方法构造出x和y的最长公共字符串就是x和y的LCS。编辑距离等于x与y的长度之和减去它们呢的LCS的长度的两倍。
周志华 《机器学习》 9.3 P199
《统计学习方法》 3.2.2 P38
《Mining of Massive Datasets》 3.5 P59
https://en.wikipedia.org/wiki/Norm_%28mathematics%29#Euclidean_norm
https://en.wikipedia.org/wiki/Cosine_similarity
https://en.wikipedia.org/wiki/Kullback–Leibler_divergence#Symmetrised_divergence