minhash是一种基于jaccard index 相似度的算法。属于LSH(Location Sensitive Hash)家族中的一员。

  jaccard index :有两个集合A={a , b , c , d , e } ,B={a , e , f , g},根据jaccard index 来计算两个集合的相似度Jaccard(A,B)=|A∩B| / |AUB|=2/7≈0.2857

  当集合较大或者集合数量过多时,直接计算集合交集与并集过于耗时,因此提出了minhash方法。

  minhash:

A∩B={a , e}   AUB = {a , b , c , d , e , f , g} , 这里,我们假如要从AUB中随机挑选一个元素,毫无疑问这个元素属于A∩B的概率也为2/7,即与A,B的jaccard相似度相等,这里,我们假设自己有A , B集合中有很多数据,我们不方便直接计算A∩B , 但是我们可以从A中随机抽取部分(可以按比例)数据记作AA,从B中也随机抽取部分(可以按比例)数据 记作BB,则从AAUBB中随机抽取一个元素,这个元素落在AA∩BB中的概率 等 AA∩BB / AAUBB = A∩B / AUB,而这就是minhash降维的基本原理。(minhash算法中,不是随机抽取的)

在minhash算法中我们是采用hash函数来随机抽取原A、B集合的子集的。(这里说的随机不是真正意义上的随机,hash函数实际上是对全集U中的元素进行了映射,U中的每个元素在同一个hash函数下被映射成不同的数字,其实是对U集元素的一个排列),下面具体讲下minhash算法

算法:

  1. 使用多个hash functions 时

    最简单的minhash方案就是使用k个hash函数,这里k为正整数。依次取每个hash函数对集合中的所有函数进行hash运算,取每个hash函数对应的最小值。这样我们对每  个集合都取到了k个值,这k个值就的集合就是原集合的minhash , 相似度估计为两个集合的minhash的交集除以k。

  2. 使用单个hash function

    a)      使用单个hash functions 时,只是使用一个hash function 对集合进行hash,取前k个最小的值组成minhash,其余与使用多个hash functions 一样。

  3. 在处理大数据中的方法

    a)      矩阵:其实当我们使用一个hash function 对集合进行hash时,其时就是对集合进行排列,而取最小的一个值,我们可以理解为排列为升序,而我们取的是列顶元  素。根据这个原理我们可以简化处理大数据中的一些运算,具体方法这里不做细解。

    b)     分布式:mahout中集成了minhash算法,算法采用了多个hash functions,但不同的是mahout minhash中引入了一个group的方法,这个group方法通过指定  的int型整数,把生成的minhash截成若干个字符串,这样就可以把这些个字符串当成原始集合的hash指纹,这里group的值越大(小于等于k),相似度阈值越高。具体细节  这里也不赘述。

    c)      合并相同指纹时的算法:在使用分布式时,由于算法通过group算法生成的是一系列的短指纹(把原来的minhash信息指纹截取了),判定是只有两个短指纹完全相  等,两个集合才相等。这是个两两比较的问题,直接计算时间复杂度过高,可以用并查集算法解决。至于并查集算法 ,这里也不做赘述。

注:本文只是对minhash的简单使用笔记,以防以后忘记,写的很水,如有写错的地方,欢迎指点。

minhash的更多相关文章

  1. minHash最小哈希原理

    minHash最小哈希原理 收藏 初雪之音 发表于 9个月前 阅读 208 收藏 9 点赞 1 评论 0 摘要: 在数据挖掘中,一个最基本的问题就是比较两个集合的相似度.通常通过遍历这两个集合中的所有 ...

  2. MinHash算法

    MinHash是用于快速检测两个集合的相似性的方法.改方法由Andrei Broder(1997)发明,并最初用于搜索引擎AltaVista中来检测重复的网页的算法.它同样可以用于推荐系统和大规模文档 ...

  3. 文本去重之MinHash算法

    1.概述     跟SimHash一样,MinHash也是LSH的一种,可以用来快速估算两个集合的相似度.MinHash由Andrei Broder提出,最初用于在搜索引擎中检测重复网页.它也可以应用 ...

  4. MinHash算法-复杂度待整理

    1MinHash简介 传统的hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法.传统hash算法产生的两个签名,如果相等,说明原始内容在一定概率下是相等的:如果不 ...

  5. 海量数据集利用Minhash寻找相似的集合【推荐优化】

    MinHash 首先它是一种基于 Jaccard Index 相似度的算法,也是一种 LSH 的降维的方法,应用于大数据集的相似度检索.推荐系统.下边按我的理解介绍下MinHash 问题背景 给出N个 ...

  6. MinHash 原理

    最小哈希原理介绍 MinHash是基于Jaccard Index相似度(海量数据不可行)的算法,一种降维的方法A,B 两个集合:A = {s1, s3, s6, s8, s9}  B = {s3, s ...

  7. mahout系列----minhash聚类

    Map: Vector featureVector = features.get(); if (featureVector.size() < minVectorSize) {       ret ...

  8. 局部敏感哈希(LSH)之simhash和minhash

    minhash 1. 把文档A分词形成分词向量L 2. 使用K个hash函数,然后每个hash将L里面的分词分别进行hash,然后得到K个被hash过的集合 3. 分别得到K个集合中的最小hash,然 ...

  9. 利用Minhash和LSH寻找相似的集合(转)

    问题背景 给出N个集合,找到相似的集合对,如何实现呢?直观的方法是比较任意两个集合.那么可以十分精确的找到每一对相似的集合,但是时间复杂度是O(n2).当N比较小时,比如K级,此算法可以在接受的时间范 ...

随机推荐

  1. 关于BaseAdapter的使用及优化心得(一)

    对于Android程序员来说,BaseAdapter肯定不会陌生,灵活而优雅是BaseAdapter最大的特点.开发者可以通过构造BaseAdapter并搭载到ListView或者GridView这类 ...

  2. 通过手机Web实现手机摇一摇的功能

    经常我们玩微信都会用到查到附近的人,都是在app上实现手机摇一摇的功能.现在,我们将此技术搬移到手机web上,供大家学习,主要是用到HTML5的重要特性就是DeviceOrientation:官方文档 ...

  3. mysql 存储过程 -- 游标的使用(备忘)

    BEGIN ; DECLARE f_ratio FLOAT DEFAULT 0.8; ); ); DECLARE i_statDate DATE; DECLARE i_accumulateCount ...

  4. 02.Apache FtpServer使用数据库管理用户

    1.创建数据库及表 使用\apache-ftpserver-1.0.6\res\ftp-db.sql建表,内容如下: CREATE TABLE FTP_USER ( userid VARCHAR(64 ...

  5. C++ Template之非类型模板参数

    非类型模板参数是通过基本变量类型引入,例如int,在使用时必须显式自定值,不能通过推断. 非类型模板参数的限制:不能是浮点数(在vc6.0上测试可以为浮点型),对象以及指向内部链接对象的指针. #in ...

  6. IE8下jQuery改变png图片透明度时出现的黑边问题

    png24格式的图片在用jQuery添加显示隐藏动画时发现,图片的半透明区域出现黑边? 在网上搜了搜主要有以下几种办法: 1.把图片保存成PNG-8格式. 2.把背景色一起切入并保存为JPG格式. 以 ...

  7. 寒假222_codeforces 290 div 2 D

    序号5: 想了很久的DP ,应该很简单,但是.. 题目直接转化为求n个数中选一些数GCD=1且花费最小 数比较大 map  HASH 还有一点 我们知道 GCD(X,X*Y)==X; 所以我的代码里不 ...

  8. LCA 笔记

    简述这几天的LCA 心得: LCA有两种做法:离线 or 在线 先学的离线: 原理博客很多. 我写得两道题,已经模板. HDU:http://acm.hdu.edu.cn/showproblem.ph ...

  9. 关于c语言中的字符数组和字符串指针

    先看代码: #include <stdio.h> int main(void) { ] = "; char * strTmp = "abcdefg"; int ...

  10. Javascript scrollTop 20大洋

    花了20大洋,买了一个视频,这是读书笔记 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"&g ...