前言
为什么要讨论这两个距离之间的区别?
因为,距离函数的选择对数据挖掘算法的效果具有很大的影响,使用错误的距离函数对挖掘过程非常有害。有时候,语义非常相似的对象被认为不相似,而语义不相似的对象却被认为是相似的,这都是因为距离函数选择不佳导致的。这篇文章就是想告诉大家欧式距离不是万能的,距离函数的选择应该随应用场景而定。
欧式距离
设有两个n维数据点 X = ( x 1 , x 2 , . . . , x n ) X=(x_1,x_2,...,x_n) X=(x1,x2,...,xn)和 Y = ( y 1 , y 2 , . . . , y n ) Y=(y_1,y_2,...,y_n) Y=(y1,y2,...,yn)之间的欧几里得距离为:
D i s t ( X , Y ) = ∑ i = 1 n ( x i − y i ) 2 = ( X − Y ) ( X − Y ) T \begin{aligned} Dist(X,Y)=\sqrt{\sum\limits_{i=1}^n(x_i-y_i)^2}=\sqrt{(X-Y)(X-Y)^T} \end{aligned} Dist(X,Y)=i=1∑n(xi−yi)2=(X−Y)(X−Y)T
欧式距离表示的是两点之间的直线距离,它有个很好的性质就是旋转不变性,即两点之间的距离不会因为坐标轴的改变而改变。然而,欧式距离受到数据分布、噪声、高维度和特征度量标准的影响,效果并不太好。
马氏距离
设有 n × m n×m n×m维数据集D,令 S ∈ S\in S∈ R m × m R^{m×m} Rm×m为数据集D的协方差矩阵, X 、 Y X、Y X、Y是数据集D中的任意两行,两个m维行向量的马哈拉诺比斯距离为:
D i s t ( X , Y ) = ( X − Y ) S − 1 ( X − Y ) T \begin{aligned} Dist(X,Y)=\sqrt{(X-Y)S^{-1} (X-Y)^T} \end{aligned}