几种相似性/距离(杰卡德距离和余弦距离)与其matlab实现

 

 1. 几种相似度

 1.1 Jaccard系数

杰卡德系数(Jaccard index) , 又称为Jaccard相似系数(Jaccard similarity coefficient),用于比较有限样本集之间的相似性与差异性。

 

1.2 余弦相似度

余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。

对于二维空间,根据向量点积公式,显然可以得知:

 

设向量 A = (A1,A2,...,An),B = (B1,B2,...,Bn) :

 2. 相似度与距离

2.1 杰卡德距离和余弦距离的对比

杰卡德距离Jaccard distance(‘jaccard’)
Jaccard距离常用来处理仅包含非对称的二元(0-1)属性的对象。很显然,Jaccard距离不关心0-0匹配[1]。

夹角余弦距离Cosine distance(‘cosine’)
与Jaccard距离相比,Cosine距离不仅忽略0-0匹配,而且能够处理非二元向量,即考虑到变量值的大小。

对这两者,距离与相似度和为一。

2.2 余弦距离和欧氏距离的对比

借助三维坐标系来看下欧氏距离和余弦距离的区别:

由图可知,相比欧氏距离,余弦距离更加注重两个向量在方向上的差异[2]。

 更多距离参照[1]

2.3 以一例讲杰卡德距离。

有二物品A, B[3]。调查7为用户是否购买了这两样物品,得以下向量:

向量A:(0,0,1,1,1,0,1)

向量B:(1,0,1,0,1,0,0)

A∩B = 2

A∪B = 5

 注意,因为忽略忽略0-0匹配。所以A∪B ≠ 7

3. 距离计算的MATLAB实现

matlab中自带的计算距离矩阵的函数有两个pdist和pdist2。

前者计算一个向量自身的距离矩阵,返回距离矩阵的下三角串联形式;后者计算两个向量之间的距离矩阵,返回是n*n的距离矩阵[4]。基本调用形式如下:

              D = pdist(X,distance)

              D = pdist2(X,Y,distance)

这两个函数都提供多种距离度量形式,非常方便,还可以调用自己编写的距离函数(distance可以用来表示其他距离,如果不写,默认的是欧式距离。)。

注意:计算的是行向量间的相互距离[5]

4. 两种距离的比较

对于行为相关性的度量,Jaccard一般效果更好;而对于文本相关性的度量,Cosine效果略好于Jaccard;但是Jaccard利于map/red计算。

更详细的介绍可以看文档[6]

[1] 使用Matlab计算各种距离Distance http://jacoxu.com/使用matlab计算各种距离distance/

[2] 余弦距离、欧氏距离和杰卡德相似性度量的对比分析 https://www.cnblogs.com/chaosimple/archive/2013/06/28/3160839.html

[3] 分别用matlab和python计算物品相似度矩阵(Jaccard系数) http://blog.csdn.net/appleyuchi/article/details/71758783

[4]paper 120:计算距离矩阵的函数的pdist和pdist2函数 https://www.cnblogs.com/molakejin/p/5867255.html

[5]求5个向量两两之间的欧式距离 http://www.ilovematlab.cn/thread-308220-1-1.html

[6]推荐算法之Jaccard相似度与Consine相似度  http://blog.csdn.net/u010700335/article/details/72626997?locationNum=3&fps=1

原文地址:https://www.cnblogs.com/jetskyyyy/p/12188375.html