MinHash (最小哈希)
原载:http://cool.sinaapp.com
作者:junGle
原文网址:http://1.cool.sinaapp.com/?p=893
minhash是判断文档相似的一种方法。这里结合一个具体的示例来简单过一下:
一、全集
{a,b,c,d,e},S1={a,d}, S2={c}, S3={b,d,e}, S4={a,c,d}。
具体含义:比如 S1,S2,S3,S4分别是4个文档,a,b,c,d,e可以是相应的文档特征(分词、singling切片等)。
二、特征矩阵
【原始行排列-abcde】
三、minhash
构建这样一个签名指纹,由大量计算结果组成,每次计算特征矩阵的最小哈希。
处理:
【行排列转换】 beadc
上述红圈表示是都是MinHash位置。 h(S1)=a, h(S2)=c, h(S3)=b, h(S4)=a.
取集合S1, S2(可以是现实中的那个文档)进行比较:
结论:经随机排列转换之后得到的两个最小哈希值相等的概率, 等于两个集合的Jaccard相似度
推导证明:
在特征矩阵中(稀疏矩阵),S1/S2之间的关系可以分三类:
- X: 两列值均为1
- Y:一列值为0,一列值为1
- Z:两列值为0
关系X的数目有x行,关系Y的数目有y行,关系Z的数据有z行。 大部分为Z类,可忽略。S1和S2相似的概率,通过jaccard相似可计算得:
SIM(S1,S2)=x/(x+y)
h(S1)=h(S2)这个事件的概率的计算又是如何? 对所有行进行随机排列转换,从上到下顺序处理,可知:
情况a.在碰到Y类型的行之前碰到X类型的行的概率:x/(x+y)
[换个方式理解,即:共有x+y行,第一次出现X的概率]
如果第一行属于x类,那么一定有 h(S1)=h(S2)
情况b.首先碰到Y类型的行,值为1的集合(S1/S2其中之一)的那个集合的最小哈希为当前行。值为0的那个集合(另一个)接着扫描下去,如果首先碰到Y类型,那么此时h(S1) ≠h(S2)
因而可知: h(S1)=h(S2)这个事件的概率,就等于x/(x+y), 也就是Jaccard相似度。
四、minhash签名矩阵
上面分析的,只是minhash的一个基本概念。要真正拿来使用,需要进行随机n个排列,
对于单个集合S,每个排列最小哈希函数h1,h2,…hn.
S的最小哈希签名向量: [h1(S), h2(S), ..., hn(S)] (用列向量表示)
对于一系列集合(多个,假设m个),它的特征矩阵为M。基于M构建一个签名矩阵 (每列对应一个集合的最小哈希签名向量) nxm阶。
————————————————————————————–
【问题1.行号随机排列的实现?】
随机哈希函数实现。要进行n次重排列,即随机选择n个哈希函数h1,h2, … ,hn. SIG(i,c)为签名矩阵中第i个哈希函数在第c列上的元素。
对行r进行处理:
- 1.计算 h1(r), h2(r), …, hn(r)
- 2.对每列c进行如下操作:
- 2.a) 如果c在第r行为0, 什么都不做
- 2.b) 如果c在第r行为1,对于每个i=1, 2, …, n,将SIG(i,c)置为原来的(SIG(i,c)和hi(r)中的较小值,即 MIN(SIG(i,c), hi(r))
例如:
得到签名相量之后, 我们可以基于集合(列向量)之间Jacard相似度(即认为minhash相等)去判断集合是否相似。
SIM(S1,S4)=1.0
而根据原始上图,可知两者真实的Jaccard相似度为2/3.
注意:签名矩阵之间的一致程度只是真实jaccard相似度的一个估计值。
在大规模数据情况下,估计值和真实值相似(本例规模太小)
MinHash (最小哈希)相关推荐
- minHash最小哈希原理
minHash最小哈希原理 收藏 初雪之音 发表于 9个月前 阅读 208 收藏 9 点赞 1 评论 0 摘要: 在数据挖掘中,一个最基本的问题就是比较两个集合的相似度.通常通过遍历这两个集合中的所有 ...
- minHash最小哈希
LSH算法简介 在介绍min-hash算法之前,我们必须先简单介绍一下LSH(局部敏感哈希 Locality Sensitive Hashing)的概念. LSH(局部敏感哈希 Locality Se ...
- minHash(最小哈希)和LSH(局部敏感哈希)
在数据挖掘中,有一个比较基本的问题,就是比较两个集合的相似度.关于这个问题,最笨的方法就是用一个两重循环来遍历这两个集合中的所有元素,进而统计这两个集合中相同元素的个数.但是,当这两个集合里的元素数量 ...
- 最小哈希 minhash
最小哈希 维基百科,自由的百科全书 跳到导航跳到搜索 在计算机科学领域,最小哈希(或最小哈希式独立排列局部性敏感哈希)方法是一种快速判断两个集合是否相似的技术.这种方法是由Andrei Broder ...
- python文件查重_文件查重 我使用的是面向局部敏感的最小哈希签名的方法进行文档查重 联合开发网 - pudn.com...
文件查重 所属分类:其他 开发工具:Python 文件大小:39KB 下载次数:7 上传日期:2017-12-20 16:45:32 上 传 者:lala_ 说明: 我使用的是面向局部敏感的最小哈希 ...
- 最小哈希Min-hashing理解
最小哈希Min-hashing理解 1. Jaccard 自然文本可以表示成集合,而集合又可以表示成高维的数据,集合除了表示文本,还可以表示图中的顶点.对于集合来说,应用较为广泛的距离或者相似度度 ...
- [转]文本相似性算法:simhash/minhash/余弦算法
数据挖掘之lsh(局部敏感hash) minhash.simhash 在项目中碰到这样的问题: 互联网用户每天会访问很多的网页,假设两个用户访问过相同的网页,说明两个用户相似,相同的网页越多,用户相似 ...
- 海量数据相似度搜索,如相似的网页、图像、文章、query 等相似性搜索
参考资料: https://blog.csdn.net/icvpr/article/details/12342159 局部敏感哈希(Locality-Sensitive Hashing, LSH)方法 ...
- minhash算法检索相似文本_文本去重算法:Minhash/Simhash/Klongsent
日前接到一个对名言警句这种短文本进行去重的小任务,下图是几个重复文本的示例: 很直观的结论就是重复度越高的文本,具有更多重复的词汇.一个最直接的去重思路可以描述为:将文本进行分词处理,统计各文本词汇的 ...
最新文章
- C#----DataGridView控件60招(一) [转]
- mac 安装swoole
- Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析
- 标 题: 腾讯面试题目(PHP程序员)
- 第八次课作业(采购管理、信息与配置管理)
- 打jar时包含所有依赖(maven-assembly-plugin)
- 日记 [2007年01月24日]服务器加强安全
- 智慧赋能黔货出山 丰收节交易会·李喜贵:贵州农业数字化
- java web环境_java web
- 光伏补贴新政出台 投资机会解析
- Android音乐播放器demo
- Redis 下载安装教程 及 客户端可视化工具
- html中加入点击事件,html中的点击事件
- 工单、工艺路线及工作中心的表结构
- 公有云、私有云及混合云应用场景辨析
- HTML制作虾米音乐,最新虾米音乐电台调用代码
- 数据可视化④:大学生就业可视化呈现
- 无线蓝牙耳机哪个价位性价比最高?500以内最好的蓝牙耳机推荐
- vim下区块的复制与黏贴
- 新一代智能视频云发展现状分析:五大要素成关键
热门文章
- 希尔伯特空间(Hilbert space)
- Spring 项目启动错误提示 LoggingApplicationListener
- 图像的读取 matlab,Matlab编程环境下图像的读取
- Matlab p文件 转换为m文件MATLAB matlab pcode,matlab p
- 嵌入式(十四)——Makefile编写及多级目录
- 2、虚拟机的快照与克隆
- Linux系统e1000e网络驱动源码(最深入)分析过程
- Ubuntu Linux 锐捷 ruijie 认证成功 校园网 西电 老校区 新校区
- exchange 服务器设置自动答复,如何让EXCHANGE 2010用户邮箱自动回复每一封邮件。...
- C++数据库编程 MySQL Connecttor C++增删改查