前言
为什么要讨论这两个距离之间的区别?
因为,距离函数的选择对数据挖掘算法的效果具有很大的影响,使用错误的距离函数对挖掘过程非常有害。有时候,语义非常相似的对象被认为不相似,而语义不相似的对象却被认为是相似的,这都是因为距离函数选择不佳导致的。这篇文章就是想告诉大家欧式距离不是万能的,距离函数的选择应该随应用场景而定。
欧式距离
设有两个n维数据点X=(x1,x2,...,xn)X=(x_1,x_2,...,x_n)X=(x1,x2,...,xn)和Y=(y1,y2,...,yn)Y=(y_1,y_2,...,y_n)Y=(y1,y2,...,yn)之间的欧几里得距离为:
Dist(X,Y)=∑i=1n(xi−yi)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×mn×mn×m维数据集D,令S∈S\inS∈Rm×mR^{m×m}Rm×m为数据集D的协方差矩阵,X、YX、YX、Y是数据集D中的任意两行,两个m维行向量的马哈拉诺比斯距离为:
Dist(X,Y)=(X−Y)S−1(X−Y)T \begin{aligned} Dist(X,Y)=\sqrt{(X-Y)S^{-1} (X-Y)^T} \end{aligned} Dist(X,Y)=(<