Jaccard相似度和广义Jaccard相似度

1. 狭义Jaccard相似度,计算两个集合之间的相似程度,元素的“取值”为0或1

对集合A和B,Jaccard相似度计算如下:
Jaccard(A, B)= |A intersect B| / |A union B|
相似度数值在[0, 1]之间,当A==B的时候,为1. 优缺点,就是元素的取值只能是0或者1,无法利用更丰富的信息。

由相似度,可以转换成Jaccard距离:
Jaccard distance (A, B) = 1 - Jaccard(A, B)


2. 广义Jaccard相似度,元素的取值可以是实数。又称为Tanimoto系数,用EJ来表示,计算方式如下:

EJ(A,B)=(A*B)/(||A||^2+||B||^2-A*B)

其中A、B分别表示为两个向量,集合中每个元素表示为向量中的一个维度,在每个维度上,取值通常是[0, 1]之间的值,A*B表示向量乘积,||A||^2表示向量的模,即 ||A||^2 = sqrt (a1^2 + a2^2 + a3^2 + ......)。
广义Jaccard相似度计算公式中,如果把分母的A*B去掉,并将||A||^2+||B||^2替换为(||A||^2)*(||B||^2),就转成了余弦相似度(cosine similarity)。

EJ中每个分量的取值可以是实数,通常在[0, 1]之间。对于两篇文档,分词之后,形成两个“词语--词频向量”,词语可以做为EJ的维度,如何将词频转换为实数值。借鉴tf/idf的思路。对于每个词语,有两个频度:1.在当前文档中的频度;2. 在所有文档中的频度。其中1相当于tf,与权重正相关;2相当于df,与权重反相关。
对于2,计算权重为
idf (w) = log (TotalWC/C(w))
C(w)是词语w在所有文档中出现的次数,TotalWC是所有文档中所有词的总词频。
对于1,权重就可以取词频本身 tf(w) = D(w),D(w)表示在当前文档中w出现的次数。

具体计算的代码可以参考 “ http://www.cnblogs.com/TtTiCk/archive/2007/08/04/842819.html”的Documents.cs中的“SimilitudeValueToDocumentUsingGeneralizedJaccardCoefficient”函数。


3. 其他扩展方法
文章“ http://www.docin.com/p-461291267.html”给出了一种扩展方法,用最大最小值函数来代替乘积和模计算,如下:

EJ(A,B) = sum ( min(a1, b1) + min (a2, b2)... ) / sum ( max(a1, b1) + max (a2, b2).. )

即用向量中每个分量的的最小值和最大值来参与计算。

个人理解,这个可以做如下解释。当集合A中的元素a1出现C(a1)次的时候,我们可以认为集合中的元素是允许重复存在的,即集合A中有C(a1)个元素;集合B也是这样,有C(b1)个相同的元素,则A和B在这个元素上的交集就是min(a1, b1) ,并集就是max(a1, b1) ,这样上述公式就是利用狭义Jaccard相似度计算的结果。

文章来源:http://blog.csdn.net/july_2/article/details/18353741

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值