相似度计算之杰卡德相似度

Jaccard index, 又称为Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。

杰卡德相似系数

两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的杰卡德系数,用符号 J(A,B) 表示。杰卡德相似系数是衡量两个集合相似度的一种指标(余弦距离也可以用来衡量两个集合的相似度)。

Python实现:

1

2

3

4

5

6

7

8

def jaccard_sim(a, b):

unions = len(set(a).union(set(b)))

intersections = len(set(a).intersection(set(b)))

return intersections / unions

a = ['x', 'y']

b = ['x', 'z', 'v']

另外sklearn中也有相关实现,但是要求数据进行过encode处理,而且两个数组的长度也必须一样。

杰卡德距离

杰卡德距离(Jaccard Distance) 是用来衡量两个集合差异性的一种指标,它是杰卡德相似系数的补集,被定义为1减去Jaccard相似系数。

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

杰卡德系数扩展:Tanimoto系数

Tanimoto系数由Jaccard系数扩展而来,又称为广义Jaccard相似系数,计算方式如下:

其中A、B分别表示为两个向量,集合中每个元素表示为向量中的一个维度,在每个维度上,取值通常是[0, 1]之间的值(如果取值是二值向量0或1,那么Tanimoto系数就等同Jaccard距离),表示向量乘积,表示向量的模,即 

Tanimoto系数容易与余弦相似度混淆在Tanimoto系数计算公式中,如果把分母的去掉,并将替换为,就转成了余弦相似度(cosine similarity)。

Tanimoto系数Python实现:

1

2

3

4

5

6

7

8

9

10

11

12

import numpy as np

def tanimoto_coefficient(p_vec, q_vec):

"""

This method implements the cosine tanimoto coefficient metric

:param p_vec: vector one

:param q_vec: vector two

:return: the tanimoto coefficient between vector one and two

"""

pq = np.dot(p_vec, q_vec)

p_square = np.linalg.norm(p_vec)

q_square = np.linalg.norm(q_vec)

return pq / (p_square + q_square - pq)

参考资料:

  • https://en.wikipedia.org/wiki/Jaccard_index

备注 : 这里的分母,作者写错多了平方。

Jaccard index, 又称为Jaccard相似系数 (错误处已备注)相关推荐

  1. C#爬网页时“远程服务器返回错误: (403) 已禁止”解决方法

    C#爬网页时"远程服务器返回错误: (403) 已禁止"解决方法 参考文章: (1)C#爬网页时"远程服务器返回错误: (403) 已禁止"解决方法 (2)ht ...

  2. 记录一下http发起请求XHR状态显示(错误:已阻止)的原因

    360浏览器添加的广告拦截插件,网站访问地址为带端口号的地址(http://127.0.0.1:5500/),post传输参数带base64超长的情况下,请求会显示如下图,状态栏提示(错误:已阻止) ...

  3. 终端服务器安全层在协议流中检测到错误,并已取消客户端连接。客户端IP:x.x.x.解决方法

    终端服务器安全层在协议流中检测到错误,并已取消客户端连接.客户端IP:x.x.x.解决方法 事件类型: 错误 事件来源: TermDD 描述: RDP 的 "DATA ENCRYPTION& ...

  4. c语言 段错误 核心已转移,c语言使用DES_ncbc_encrypt以及段错误 (核心已转储) 解决...

    1.首先安装ssl库文件 sudo apt-get install libssl-dev 引入头文件 #include 2.定义调用方法 void call_cbc(){ DES_cblock key ...

  5. Ubuntu20.04出现段错误核心已转储问题解决方案

    作为一个半路出家的linuc用户,coredump这个问题太让人抓狂了,网上找了好多都是不全面,不适应或者看不懂:现在终于解决了,记录一下防止以后出现还是无解,同时也分享给大家,希望大家能少踩一些坑. ...

  6. c++如何解决段错误 (核心已转储)

    在后端优化中遇到了段错误 (核心已转储)问题,寻求解决方法. 首先通过不断的注释部分代码,运行,注释,运行,找到一个大概的范围是错在哪一块. 这类问题只能说根本原因是内存的非法操作.建议生成内存段错误 ...

  7. [ELK]使用脚本写入带scripted field的index pattern时发生的错误

    学习ELK的童鞋们肯定知道要在kibana上面进行查询时,至少要创建一个index pattern.我们可以直接在页面上面创建,当然也可以使用Elasticsearch提供的RESTful API直接 ...

  8. Go笔记-错误处理和defer

    为什么80%的码农都做不了架构师?>>> error error类型的声明可在builtin包中查看: type error interface {Error() string } ...

  9. PowerDesigner 提示 Existence of index、key、reference错误

    一.建立一个表后,为何检测出现Existence of index的警告 A table should contain at least one column, one index, one key, ...

最新文章

  1. linux中用gtk编写的聊天室能运行的,CHAT_ROOM
  2. 模式识别 - 处理多演示样例学习(MIL)特征(matlab)
  3. oracle获取父级,如何通过sql获取oracle connect中的最终父id列
  4. 第3周实践项目3 求集合并集
  5. shutil常用语法
  6. mysql for CodeSmith
  7. Apizza在线接口工具动态绑定API参数依赖
  8. linux查看网口位置命令,Linux下查看网卡信息及确定网卡位置
  9. Java实现鉴权失败达到一定次数锁定IP并释放到期IP
  10. Guava的Splitter和Joiner
  11. 题目 2260: 求arccos值
  12. 植物大战僵尸:逆向分析阳光
  13. Android做加入购物车,Android实现购物车添加商品动画
  14. rainyday.js 下雨效果插件使用方法
  15. GameCenter
  16. 猫哥教你写爬虫 041--模拟登录-cookie
  17. HTML之表格与表单
  18. 美元对全球汇率 免费 api
  19. MySQL高级:索引优化之防止索引失效
  20. 使用winsw发布接口服务

热门文章

  1. 兜转数年,老跳成了卖过软件开过店写过APP的电脑老师
  2. MySQL使用ssl连接,java通过ssl连接数据库
  3. ArgoCD(四)--Application管理
  4. 完美实现了单次坐标转换同时绘制轨迹
  5. java 方法中final_Java中final的使用方法
  6. Java中super关键字的使用
  7. PHP7 升级指南(Windows)
  8. 无线网络设置隐藏网络以及mac地址绑定
  9. 品读国学经典之一——管仲《牧民》
  10. CentOS7内置Realtek网卡驱动r8169降级r8168