常见的相似度度量算法




本文目录:

  1. 欧几里得距离相似度

  2. 曼哈顿距离

  3. 切比雪夫距离(Chebyshev Distance)

  4. 闵可夫斯基距离(Minkowski Distance)

  5. 标准化欧氏距离 (Standardized Euclidean distance )

  6. 马氏距离(Mahalanobis Distance)

  7. 余弦相似度

  8. 汉明距离(Hamming distance)

  9. 杰卡德相似系数(Jaccard similarity coefficient)

  10. 皮尔逊相关系数(Pearson product-moment correlation coefficient)




1 欧几里得距离相似度:

  定义在两个向量(两个点)上:点x和点y的欧式距离为:

欧几里得距离相似度

  常利用欧几里得距离描述相似度时,需要取倒数归一化,sim = 1.0/(1.0+distance),利用numpy实现如下:

python实现欧式距离

# 计算欧式距离
distance = np.linalg.norm(data_np[i]-data_np[j])
# 归一化
sim[i][j] = 1.0 / (1.0 + dis)

2 曼哈顿距离

  从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”。而这也是曼哈顿距离名称的来源, 曼哈顿距离也称为城市街区距离(City Block distance)。

  (1)二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离

image

  (2)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的曼哈顿距离

image

  python实现曼哈顿距离:

distance = np.sum(np.abs(data_np[i] - data_np[j]))  # 方法一,采用numpy直接计算

distance = np.linalg.norm(data_np[i] - data_np[j], ord = 1) # np.linalg.norm(x, ord=None, axis=None, keepdims=False), ord表示范数类型,axis表示处理维度,keepding:是否保持矩阵的二维特性;


3 切比雪夫距离(Chebyshev Distance)

  国际象棋玩过么?国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max( | x2-x1 | , | y2-y1 | ) 步 。有一种类似的一种距离度量方法叫切比雪夫距离。

  (1)二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离

image

  (2)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的切比雪夫距离

image

  python实现切比雪夫距离:

distance = np.abs(data_np[i] - data_np[j]).max()    #方法一,采用numpy直接计算
distance = np.linalgnorm(data_np[i]- data_np[j], ord = np.inf)  # 方法二,np.linalgnorm,np.inf指无穷大;


4 闵可夫斯基距离(Minkowski Distance)

  闵氏距离不是一种距离,而是一组距离的定义。

4.1 闵氏距离的定义

  两个n维变量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:

image

  其中p是一个变参数。

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

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

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

  根据变参数的不同,闵氏距离可以表示一类的距离。

4.2 闵氏距离的缺点

  闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离都存在明显的缺点。

  举个例子:二维样本(身高,体重),其中身高范围是150190,体重范围是5060,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。

  简单说来,闵氏距离的缺点主要有两个:

  (1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。

  (2)没有考虑各个分量的分布(期望,方差等)可能是不同的。

4.3 python实现闵氏距离:

distance = np.linalg.norm(np_data[i] - data_np[j], ord = p) # ord表示范数类型


5 标准化欧氏距离 (Standardized Euclidean distance )

  标准欧氏距离的定义

  标准化欧氏距离是针对简单欧氏距离的缺点而作的一种改进方案。标准欧氏距离的思路:既然数据各维分量的分布不一样,好吧!那我先将各个分量都“标准化”到均值、方差相等吧。均值和方差标准化到多少呢?这里先复习点统计学知识吧,假设样本集X的均值(mean)为m,标准差(standard deviation)为s,那么X的“标准化变量”表示为:

  而且标准化变量的数学期望为0,方差为1。因此样本集的标准化过程(standardization)用公式描述就是:

image

  标准化后的值 = ( 标准化前的值 - 分量的均值 ) /分量的标准差

  经过简单的推导就可以得到两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的标准化欧氏距离的公式:

image

  如果将方差的倒数看成是一个权重,这个公式可以看成是一种加权欧氏距离(Weighted Euclidean distance)。


6 马氏距离(Mahalanobis Distance)

6.1 马氏距离定义

  有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:

image

  而其中向量Xi与Xj之间的马氏距离定义为:

image

  若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成了:

image

  也就是欧氏距离了。

  若协方差矩阵是对角矩阵,公式变成了标准化欧氏距离。

6.2 马氏距离的优缺点

  马氏距离的优缺点:量纲无关,排除变量之间的相关性的干扰。


7 余弦相似度

  几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。

  在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

image

  两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦

  类似的,对于两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。

image

  即:

image

  夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。

python实现余弦相似度:

num = np.dot(data_np[i], data_np[j]) #若为行向量则 A * B 
denom = linalg.norm(A) * linalg.norm(B)  
cos = num / denom #余弦值  
sim = 0.5 + 0.5 * cos #归一化 


8 汉明距离(Hamming distance)

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

  应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。

python实现汉明距离:

smstr=np.nonzero(np_data[i] - np_data[j])
sim= np.shape(smstr[0])[0]


9 杰卡德相似系数(Jaccard similarity coefficient)

9.1 杰卡德相似系数

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

image

  杰卡德相似系数是衡量两个集合的相似度一种指标。

9.2 杰卡德距离

  与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。杰卡德距离可用如下公式表示:

image

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

9.3 杰卡德相似系数与杰卡德距离的应用

  可将杰卡德相似系数用在衡量样本的相似度上。

  样本A与样本B是两个n维向量,而且所有维度的取值都是0或1。例如:A(0111)和B(1011)。我们将样本看成是一个集合,1表示集合包含该元素,0表示集合不包含该元素。

  p :样本A与B都是1的维度的个数

  q :样本A是1,样本B是0的维度的个数

  r :样本A是0,样本B是1的维度的个数

  s :样本A与B都是0的维度的个数

  这里p+q+r可理解为A与B的并集的元素个数,而p是A与B的交集的元素个数。

  而样本A与B的杰卡德距离表示为:

image
import scipy.spatial.distance as dist

matv=np.array([data_np[i],data_np[j]])
dis=dist.pdist(matv,'jaccard')


10 皮尔逊相关系数(Pearson product-moment correlation coefficient)

  皮尔逊相关系数即为相关系数 ( Correlation coefficient )与相关距离(Correlation distance)

  相关系数的定义

image

  相关系数是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。

image








Reference:

1.机器学习中的相似性度量

2.推荐算法入门(1)相似度计算方法大全

3.Python Numpy计算各类距离

4.皮尔逊积矩相关系数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容