码迷,mamicode.com
首页 > 编程语言 > 详细

MinHash算法

时间:2014-11-29 22:50:10      阅读:513      评论:0      收藏:0      [点我收藏+]

标签:http   io   ar   使用   sp   strong   on   div   art   

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

我们先介绍Jaccard相似度量。对于两个集合A与B,Jaccard相似性系数可以定义为:

bubuko.com,布布扣

容易知道,Jaccard系数是0-1之间的值。当两个集合越接近,那么该值越接近1;反之跟接近0。

假设h是一个hash function,将A与B的元素映射成一个整数,定义:bubuko.com,布布扣是集合S中具有最小哈希值的元素。假设该哈希值足够好,不会产生碰撞,那么,我们可以得到一个重要的结论:

仅当bubuko.com,布布扣中具有最小哈希值得元素位于bubuko.com,布布扣中时,bubuko.com,布布扣

所以有,bubuko.com,布布扣,即集合A、B经过hash后最小哈希值相等的概率。

若令bubuko.com,布布扣为一个随机变量,当bubuko.com,布布扣时取1,否则取0,那么bubuko.com,布布扣就是bubuko.com,布布扣的一个无偏估计。

有了上面的重要结论,我们可以根据minhash来计算两个集合的相似度了。

方法1:使用多个hash函数

取k个hash函数,对于每个hash函数,计算bubuko.com,布布扣bubuko.com,布布扣。用y表示bubuko.com,布布扣的次数,那么可以用bubuko.com,布布扣来估计bubuko.com,布布扣

方法2:使用单一的hash函数

上面讲到的方法1是比较耗时的,因为要计算集合中每个元素的k个哈希函数的值,计算复杂度比较高。为了达到一定的准确性,k通常取400或800。

为了减少计算量,我们定义bubuko.com,布布扣表示集合S中拥有最小hash值的k个元素组成的子集。我们可以把bubuko.com,布布扣当成集合S的一个签名。我们可以用两个集合的签名的相似度来估计这两个集合的相似度。

那么

bubuko.com,布布扣

是集合bubuko.com,布布扣的一个随机抽样。

 

 

bubuko.com,布布扣

是X和bubuko.com,布布扣的交集。

 

因此,bubuko.com,布布扣bubuko.com,布布扣的一个无偏估计。

根据标准切尔诺夫界限,对与非替换的抽样,期望的误差

注:无偏估计:

设A‘=g(X1,X2,...,Xn)是未知参数A的一个点估计量,若A‘满足
E(A‘)= A
则称A‘为A的无偏估计量,否则为有偏估计量
注:无偏估计就是系统误差为零的估计。

MinHash算法

标签:http   io   ar   使用   sp   strong   on   div   art   

原文地址:http://www.cnblogs.com/baiting/p/4132066.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!