1机器学习中的距离

MachingLearning中的距离和相似性计算以及python实现


img

图像的画法:距离原点的距离都是一样的

p=1时:所有点到原点的距离均为1

p=2时:所有点到原点的距离均为1

p=无穷时:所有点到原点的距离均为1

欧氏距离

也称欧几里得距离,是指在m维空间中两个点之间的真实距离。欧式距离在ML中使用的范围比较广,也比较通用,就比如说利用k-Means对二维平面内的数据点进行聚类,对魔都房价的聚类分析(price/m^2 与平均房价)等。

两个n维向量 a ( x 11 , x 12 . . . . . x 1 n ) a(x_{11},x_{12}.....x_{1n}) a(x11,x12.....x1n) b ( x 21 , x 22 . . . . . x 2 n ) b(x_{21},x_{22}.....x_{2n}) b(x21,x22.....x2n)间的欧氏距离

python 实现为:

def distance(a,b):
    sum = 0
    for i in range(len(a)):
        sum += (a[i]-b[i])**2
    return sqrt(sum)

print 'a,b 多维距离为:',distance((1,1,2,2),(2,2,4,4))

这里传入的参数可以是任意维的,该公式也适应上边的二维和三维

曼哈顿距离

D 12 = ∑ k = 1 n ∣ x 1 k − x 2 k ∣ D_{12}=\sum_{k=1}^{n}|x_{1k}-x_{2k}| D12=k=1nx1kx2k

python 实现为:

def threeMHDdis(a,b):
    return abs(a[0]-b[0])+abs(a[1]-b[1]) + abs(a[2]-b[2])

print 'a,b 三维曼哈顿距离为:', threeMHDdis((1,1,1),(2,2,2))

切比雪夫距离

切比雪夫距离(Chebyshev Distance)的定义为:$max( | x_2-y_2 | , |x_1-y_1 | , … ), 其 中 其中 x,y$均为向量

python 实现为:

def moreQBXFdis(a,b):
    maxnum = 0
    for i in range(len(a)):
        if abs(a[i]-b[i]) > maxnum:
            maxnum = abs(a[i]-b[i])
    return maxnum

print 'a,b多维切比雪夫距离:' , moreQBXFdis((1,1,1,1),(3,4,3,4))

马氏距离

有M个样本向量 X 1 , . . . , X m X_1,...,X_m X1,...,Xm,协方差矩阵记为 S S S,均值记为向量 μ μ μ,则其中样本向量 X X X μ μ μ的马氏距离表示为
D ( x ) = ( X − μ ) T S − 1 ( X − μ ) D(x)=\sqrt {(X-μ)^TS^{-1}(X-μ)} D(x)=(Xμ)TS1(Xμ)
马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为 Σ Σ Σ的随机变量之间的差异程度。

img

如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也可称为正规化的欧氏距离。

夹角余弦

c o s θ = a ∗ b ∣ a ∣ ∣ b ∣ c o s θ = ∑ k = 1 n x 1 k x 2 k ∑ k = 1 n x 1 k 2 ∑ k = 1 n x 2 k 2 cos \theta = \frac {a*b} {|a||b|} \\cos \theta = \frac {\sum_{k=1}^{n}x_{1k}x_{2k}} {\sqrt {\sum_{k=1}^{n}x_{1k}^2}\sqrt {\sum_{k=1}^{n}x_{2k}^2}} cosθ=ababcosθ=k=1nx1k2 k=1nx2k2 k=1nx1kx2k

def moreCos(a,b):
    sum_fenzi = 0.0
    sum_fenmu_1,sum_fenmu_2 = 0,0
    for i in range(len(a)):
        sum_fenzi += a[i]*b[i]
        sum_fenmu_1 += a[i]**2 
        sum_fenmu_2 += b[i]**2 

    return sum_fenzi/( sqrt(sum_fenmu_1) * sqrt(sum_fenmu_2) )
print 'a,b 多维夹角余弦距离:',moreCos((1,1,1,1),(2,2,2,2))

闵可夫斯基距离

p ∑ k = 1 n ∣ x 1 k − x 2 k ∣ p p\sqrt{\sum_{k=1}^{n}|x_{1k}-x_{2k}|^p} pk=1nx1kx2kp

当p=1时,就是曼哈顿距离

当p=2时,就是欧氏距离

当p→∞时,就是切比雪夫距离

汉明距离

两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数

def hanmingDis(a,b):
    sumnum = 0
    for i in range(len(a)):
        if a[i]!=b[i]:
            sumnum += 1
    return sumnum

print 'a,b 汉明距离:',hanmingDis((1,1,2,3),(2,2,1,3))

杰卡德距离 & 杰卡德相似系数

杰卡德距离,杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。

img

def jiekadeDis(a,b):
    set_a = set(a)
    set_b = set(b)
    dis = float(len( (set_a | set_b) - (set_a & set_b) ) )/ len(set_a | set_b)
    return dis

print 'a,b 杰卡德距离:', jiekadeDis((1,2,3),(2,3,4))

杰卡德相似系数

两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。

img

def jiekadeXSDis(a,b):
    set_a = set(a)
    set_b = set(b)
    dis = float(len(set_a & set_b)  )/ len(set_a | set_b)
    return dis

print 'a,b 杰卡德相似系数:', jiekadeXSDis((1,2,3),(2,3,4))

相关系数 & 相关距离

相关 系数

img

信息熵

衡量分布的混乱程度或分散程度的一种度量.

img

测地距离(Geodesic Distance)

“geodesic”(测地线) 一词来源于 geodesy(测地学), 是一门测量地球大小和形状 的学科。 就从 geodesic的本意来说, 就是地球表面两点之间的最短路径。 Geodesic Distance 就是图中两节点的最短路径。几何空间通常用到的 Euclidean Distance(欧氏距离) , 即两点之间的最短距离, 两者有所区别。

img

img

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值