首先,MinHash 是用于快速检测两个集合的相似性的方法。该方法由 Andrei Broder (1997) 发明,并最初用于AltaVista搜索引擎中来检测重复的网页。它同样可以用于大规模文档聚类中。
MinHash基于Jaccard相似性度量。对于两个集合A与B,Jaccard相似性系数可以定义为:
J(A,B) = |A ∩ B|/| A ∪ B|
容易知道,该系数是0-1之间的值。当两个集合越接近,那么该值越接近1;反之,更接近0。
假设h是一个哈希函数,将A与B的元素个数映射为一个整数。定义: hmin(S) 是集合S集合中具有最小哈希值的元素。那么,一个重要的结论是:仅当 A ∪ B中具有最小哈希值的元素位于A ∩ B中时,hmin(A) = hmin(B) 。而将哈希函数看成一个随机变量,那么任何 A ∪ B 中的元素都有可能具有最小哈希值。因此,就有:
Pr[hmin(A) = hmin(B)] = J(A,B).
若令r 为一个随机变量(或者随机变量h的函数),当hmin(A) = hmin(B) 时取1,否则取0。那么r 就是J(A,B)的一个无偏估计。
于是,自然而然地,计算两个集合的相似度J(A,B),我们便可以取n个哈希函数(n = 80或400等),计算对每个哈希函数,r 的取值。然后求平均即可。