【白话数据分析】距离度量的相似度计算

在数据分析和数据挖掘中,经常需要数值化样本个体间差异的大小,进而评价个体的相似度或者进行分类。比如统计分析中的相关性分析,数据挖掘中进行的KNN分类与K-means聚类,还有推荐系统算法中搜索引擎的物品推荐。

为了能由简及易的深刻阐述样本相似度的基本原理和应用,我们从一个基本的例子出发,并且结合程序计算,结合图像直观区分各个相似之间的差异。

  • 由距离引出的相似度
    • 欧几里得距离
    • 曼哈顿距离
    • 闵可夫斯基距离
  • 余弦相似度
  • 杰卡德相似度
  • 皮尔逊相关系数
样本 特征1 特征2 特征3 特征4
样本1 1 3 2 4
样本2 2 5 3 1

一、欧氏距离(Euclidean distance)

       欧氏距离是最常用的距离计算公式,衡量的是多维空间中各个点之间的绝对距离,因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别(标准化),比如:计算两个城市的经济状况,其中农业生产总值(元)、交通运输流量(吨)、商业出口进口比(%),如果用欧式距离计算,那么量级大的指标的影响就会覆盖数量级小的指标。所以在计算欧式距离时,需要先进行样本标准化。
n维空间的公式:
在这里插入图片描述
由欧式距离引出的相似度计算:
s i m = 1 1 + d ( x , y ) sim=\frac{1}{1+d(x,y)} sim=1+d(x,y)1

因为距离越远,则相似度越小。同时考虑到d(x,y)可能等于0,所以分母就写成1+d(x,y)然后取倒数。

# 欧式距离
def Eculidean(x,y):
    return sqrt(sum(pow(a-b,2) for a,b in zip(x,y)))
# 计算两个样本的欧式距离
dist = Eculidean([1,3,2,4],[2,5,3,1])
sim = 1/(1+dist)
print("样本的相似度:{}".format(sim))

样本的相似度:0.20521309615767264

二、曼哈顿距离(Manhattan Distance)

想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”。而这也是曼哈顿距离名称的来源, 曼哈顿距离也称为城市街区距离(City Block distance)
在这里插入图片描述
在这里插入图片描述
计算方法相比欧式距离更加简单,比如现在的两个向量X=[1,3,2,4],Y=[2,5,3,1],则d(a,b)=|1-2|+|3-5|+|2-3|+|4-1|=7,同样更加距离与相似度之间的关系:
s i m = 1 1 + d ( x , y ) sim=\frac{1}{1+d(x,y)} sim=1+d(x,y)1

# 曼哈顿距离
def Manhattan(x,y):
    return sum(abs(a-b) for a,b in zip(x,y))
# 计算两个样本的曼哈顿距离
dist = Manhattan([1,3,2,4],[2,5,3,1])
sim = 1/(1+dist)
print("样本的相似度:{}".format(sim))

样本的相似度:0.125
一图观欧式距离与曼哈顿距离的区别:
在这里插入图片描述

三、闵可夫斯基距离

闵可夫斯基距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述。
d i s t ( x i , x j ) = ( ∑ u = 1 n ∣ x i u − x j u ∣ p ) 1 p dist(x_i,x_j)=\big(\sum_{u=1}^n|x_{iu}-x_{ju}|^p\big)^\frac{1}{p}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值