- 机器学习中,我们经常会对两个样本之间的相似度进行度量,此时会用到各种距离公式来反映某类事物在距离上接近或者远离的程度,K近邻算法,K-means聚类算法也涉及到距离公式的选择问题,今天我们就来总结一下常见的几种距离公式,以及这些公式的Python代码实现。
所有距离公式列表:
- 闵可夫斯基距离(Minkowski Distance)
- 欧式距离(Euclidean Distance)
- 马氏距离(Mahalanobis Distance)
- 曼哈顿距离(Manhattan Distance)
- 切比雪夫距离(Chebyshev Distance)
- 夹角余弦(Cosine)
- 汉明距离(Hamming Distance)
- 杰卡德相似系数(Jaccard Similarity Coefficient)
一.闵可夫斯基距离(Minkowski Distance)
严格意义上来看,闵可夫斯基距离不是一种距离,而是一组距离的定义。
两个n维向量A(x11,x12,...x1n)与B(x21,x22,...x2n)间的闵可夫斯基距离为:
其中P是一个变参数
- 当P=1时,就是曼哈顿距离
- 当P=2时,就是欧式距离
- 当P->∞时,就是切比雪夫距离。
因此我们根据P参数的不同,闵可夫斯基距离可以表示一类距离。
二.欧式距离(Euclidean Distance)
欧式距离即L2范数,是欧式空间两点间的距离公式,如图
- 平面上的两点a(x1,y1)和b(x2,y2)间的欧式距离:
- 三维空间的两点a(x1,y1,z1)和b(x2,y2,z2)间的欧式距离:
- 两个n维向量A(x11,x12,...x1n)与B(x21,x22,...x2n)间的欧式距离为:
向量表示形式:
三. 马氏距离(Mahalanobis Distance)
马氏距离是在欧式距离上发展而来,有M个样本向量X1 -Xm,协方差矩阵为S,均值为向量μ,向量X到μ的马氏距离为:
向量Xi与向量xj的马氏距离为:
若协方差矩阵是单位矩阵,则是欧式距离公式;若是对角矩阵,则为标准化欧式距离公式。
马氏距离的优点是:与量纲无关,排除变量之间的相关性的干扰。
四.曼哈顿距离(Manhattan Distance)
曼哈顿距离即L1范数,也称为城市街区距离。
- 二维平面两点a(x1,y1)和b(x2,y2)间的曼哈顿距离:
- 两个n维向量A(x11,x12,...x1n)与B(x21,x22,...x2n)间的曼哈顿距离为:
五.切比雪夫距离(Chebyshev Distance)
切比雪夫距离即范数。
- 二维平面两点a(x1,y1)和b(x2,y2)间的切比雪夫距离:
- 两个n维向量A(x11,x12,...x1n)与B(x21,x22,...x2n)间的切比雪夫距离为:
等价公式为:
六.夹角余弦(Cosine)
夹角余弦是用来衡量两个向量方向上的差异,我们可以用来表示样本向量间的差异。
- 二维空间两个向量A(x1,y1)和B(x2,y2)间的夹角余弦公式:
- 两个n维样本点A(x11,x12,...x1n)与B(x21,x22,...x2n)间的相似度:
或者:
夹角余弦的取值范围是【-1,1】。夹角余弦越大,表示两个向量的夹角越小。当两个向量重合时,同向,夹角余弦最大,为1,反向,夹角余弦最小,为-1.
七.汉明距离(Hamming Distance)
汉明距离是定义两个等长的字符串s1与s2,将其中一个变成另外一个所需要的最小替换次数。例如:1111与1001之间的汉明距离为2.
八.杰卡德相似系数(Jaccard Similarity Coefficient)
杰卡德相似系数定义两个集合A和B的交集元素在A,B集合的并集中所占的比例。是用来衡量两个集合相似度的一种指标。
杰卡德距离:用集合中不同元素占所有元素的比例来衡量两个集合的区分度。
参考书籍:机器学习算法原理与编程实现