在机器学习和数据挖掘中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如 K 最近邻(KNN)和 K 均值(K-Means)等等。
根据数据特性的不同,可以采用不同的度量方法。一般而言,定义一个距离函数 d(x,y), 需要满足下面几个准则:
- d(x,x) = 0 // 到自己的距离为0
- d(x,y) >= 0 // 距离非负
- d(x,y) = d(y,x) // 对称性:如果 A 到 B 距离是 a,那么 B 到 A 的距离也应该是 a
- d(x,k)+ d(k,y) >= d(x,y) // 三角形法则:两边之和大于第三边
1. 闵可夫斯基距离(欧式距离、曼哈顿距离、切比雪夫距离)
闵可夫斯基距离(Minkowski distance)是衡量数值点之间距离的一种非常常见的方法,假设数值点 P 和 Q 坐标如下:
那么,闵可夫斯基距离定义为:
该距离最常用的 p 是 2 和 1, 前者是欧几里得欧式距离(Euclidean distance),后者是曼哈顿距离(Manhattan distance)。假设在曼哈顿街区乘坐出租车从 P 点到 Q 点,白色表示高楼大厦,灰色表示街道:
- 欧几里得距离:绿色的斜线,在现实中无法实现。
- 曼哈顿距离:红色黄色和蓝色斜线,这三条折线的长度是相等的。
- 切比雪夫距离:当 p 趋近于无穷大时,闵可夫斯基距离转化成切比雪夫距离(Chebyshev Distance)
我们知道平面上到原点欧几里得距离(p = 2)为 1 的点所组成的形状是一个圆,当 p 取其他数值的时候呢?
注意,当 p < 1 时,闵可夫斯基距离不再符合三角形法则,举个例子:当 p < 1, (0,0) 到 (1,1) 的距离等于 (1+1)^{1/p} > 2, 而 (0,1) 到这两个点的距离都是 1。
闵可夫斯基距离比较直观,但是它与数据的分布无关,具有一定的局限性。如果 x 方向的幅值远远大于 y 方向的值,这个距离公式就会过度放大 x 维度的作用。所以,在计算距离之前