本文系改编的,利用R语言来计算各种距离
MATLAB 版本的
http://blog.csdn.net/sinat_26917383/article/details/52101425PYTHON版本的
http://book.2cto.com/201511/58274.html
=================================================================================================================================================
在做分类时常常需要估算不同样本之间的相似性(Similarity Measurement),这时通常采用的方法就是计算样本间”距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。
本文的目的就是对常用的相似性度量做一个总结。
本文目录:
- 闵可夫斯基距离
- 欧氏距离
- 曼哈顿距离
- 切比雪夫距离
- 标准化欧式距离
- 马氏距离
- 夹角余弦
- 汉明距离
- 杰卡德距离&杰卡德相似系数
- 相关系数&相关距离
- 信息熵
- kl散度(Kullback-Leible散度)
- 兰式距离(Lance and Williams distance,或Canberra Distance)
================================================
1、欧式距离(Euclidean Distance)
欧式距离是最易于理解的一种距离计算方法,源自欧式空间中两点间的距离公式。
两个n维向量a与b间的欧式距离:
用R语言计算距离主要是dist函数。若X是一个M×N的矩阵,则dist(X)将X矩阵M行的每一行作为一个N维向量,然后计算这M个向量两两间的距离。
> aa=matrix(rnorm(15,0,1),c(3,5))
> aa
[,1] [,2] [,3] [,4] [,5]
[1,] -1.6486207 -0.2149357 -0.02125219 0.0211059 -2.4320995
[2,] -0.2600026 -1.0145245 -0.24380395 -1.4597659 -0.8684985
[3,] 0.3500116 1.0524999 0.67703932 4.0102187 0.5309405
> dist(aa,p=2)
1 2
2 2.693503
3 5.548077 6.113250
第一个行与第二行的距离为2.693503;第二行与第三行的距离为6.113250;第一行与第三行的距离为5.548077
2、曼哈顿距离(Manhattan Distance)
从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”。而这也是曼哈顿距离名称的来源, 曼哈顿距离也称为城市街区距离(City Block distance)。
两个n维向量a(a1;a2;…;an)与 b(b1;b2;…;bn)间的曼哈顿距离
R语言计算曼哈顿距离
> aa=matrix(rnorm(15,0,1),c(3,5))
>
>
> dist(aa,"manhattan")
1 2
2 7.888601
3 5.944147 5.029586
第一行与第二行的距离为7.888601,第二行与第三行的距离为5.029586。第一行与第二行的距离为5.944147。
3、切比雪夫距离(Chebyshev Distance)
国际象棋玩过么?国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max( | x2-x1 | , | y2-y1 | ) 步 。有一种类似的一种距离度量方法叫切比雪夫距离。
两个n维向量a(a1;a2;…;an)与 b(b1;b2;…;bn)间的曼哈顿距离
或
R语言代码:
> aa=matrix(rnorm(15,0,1),c(3,5))
> aa
[,1] [,2] [,3] [,4] [,5]
[1,] 0.3186289 0.8924295 -1.4619398 2.0500080 -0.9411515
[2,] 0.1582820 0.9655279 -0.9702412 -0.8561219 0.2322826
[3,] 0.7457046 -2.2780280 -0.7043906 -0.1458262 1.0166551
> dist(aa,"maximum")
1 2
2 2.906130
3 3.170458 3.243556
4、闵可夫斯基距离(Minkowski Distance)
闵可夫斯基距离不是一种距离,而是一组距离的定义
(1)闵可夫斯基距离的定义
两个n维变量 a(a1;a2;...;an) 与 b(b1;b2;...;bn) 间的闵可夫斯基距离的定义为: