杰卡德相似度倒排索引 杰拉德相似度计算_相似度


题目:

计算(1,1,0)、(1,-1,0)、(-1,1,0)两两之间的Jaccard相似度。


特地写下本文是因为大数据课程的作业。

了解一下Jaccard相似系数

Jaccard相似系数Jaccard similarity coefficient)又称 Jaccard系数( Jaccar Index)。

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


杰卡德相似度倒排索引 杰拉德相似度计算_ci_02


Jaccard相似系数是衡量两个集合的相似度一种指标

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

所谓的Jaccard相似度就是Jaccard相似系数。

Jaccard相似度=Jaccard相似系数

Jaccard主要应用场景:

  1. 推荐系统
  2. 过滤相似度很高的新闻,或者网页去重
  3. 考试防作弊系统
  4. 论文查重系统

Jaccard距离 Jaccard Distance

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


杰卡德相似度倒排索引 杰拉德相似度计算_标题相似度算法_03


Jaccard相似系数与Jaccard距离之间的关系:

Jaccard距离是Jaccard相似系数的补集,被定义为

Jaccard距离=1-Jaccard相似系数

*对Jaccard相似系数的介绍,这里有一篇很详细的博客。

推荐算法之Jaccard相似度与Consine相似度 - 程序园www.voidcn.com

但我们遇到的是向量,显然不能用上面的办法。

不多BB,开始吟唱!


我参考了StackExchange上的一个回答


杰卡德相似度倒排索引 杰拉德相似度计算_标题相似度算法_04

StackExcahnge上的一篇回答

什么是binary vectors?

二元向量,又称二进制向量。想想,二进制是由什么组成?0和1(二元)。

所以狭义Jaccard相似系数应该是只能计算由0和1组成的二元向量。

什么是real-valued vectors?

实值向量,即向量的元素为实数。

那不妨再了解一下实数的定义:

实数,是有理数和无理数的总称。


杰卡德相似度倒排索引 杰拉德相似度计算_MATLAB_05

实数的分类

所以,负整数是实数

我们再看看题目:

计算(1,1,0)、(1,-1,0)、(-1,1,0)两两之间的Jaccard相似度。

向量中出现了-1,属于实值向量,显然不是二元向量。

也即,不能使用狭义的Jaccard相似系数。

所以我们需要解决实值向量的情况。

于是乎。

我选择了广义Jaccard相似系数。



这个公式就是

分子取小者,分母取大者,求和。

这种方法用最大最小值函数来代替乘积和模计算,

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

所以依样画葫芦,我的计算过程如下:





所以





直到我用Matlab计算的Jaccard距离之前,我都一直坚信我的计算方式是毫无破绽的,尽管计算结果-1让我一度怀疑。


MATLAB让我瞬间打脸


>> X= [1 1 0; 1 -1 0; -1 1 0]
D= pdist( X , 'jaccard')


运算结果:


杰卡德相似度倒排索引 杰拉德相似度计算_MATLAB_06

Jaccard距离

讲道理。

说实话。

这个结果让我有点难受。

有点迷。

MATLAB都实锤了,我也不好反驳了。

但我仍然存疑。

......


所以答案应该是:





由MATLAB计算出Jaccard距离。

因为,

Jaccard距离=1-Jaccard相似系数

所以,