R语言:计算各种距离

本文系改编的,利用R语言来计算各种距离

=================================================================================================================================================

在做分类时常常需要估算不同样本之间的相似性(Similarity Measurement),这时通常采用的方法就是计算样本间”距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。

本文的目的就是对常用的相似性度量做一个总结。

本文目录:

  • 闵可夫斯基距离
  • 欧氏距离
  • 曼哈顿距离
  • 切比雪夫距离
  • 标准化欧式距离
  • 马氏距离
  • 夹角余弦
  • 汉明距离
  • 杰卡德距离&杰卡德相似系数
  • 相关系数&相关距离
  • 信息熵
  • kl散度(Kullback-Leible散度)
  • 兰式距离(Lance and Williams distance,或Canberra Distance)

================================================
1、欧式距离(Euclidean Distance)
欧式距离是最易于理解的一种距离计算方法,源自欧式空间中两点间的距离公式。
两个n维向量a与b间的欧式距离:

d=(ab)T(ab)2

用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)间的曼哈顿距离

d=k=1n|akbk|

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)间的曼哈顿距离

d=maxk|akbk|


d=limp(k=1n|akbk|p)1/p

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) 间的闵可夫斯基距离的定义为:

d=k=1n|akbk|p
  • 31
    点赞
  • 202
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值