首页 > 其他分享 >最小哈希 minhash

最小哈希 minhash

时间:2023-06-02 22:02:50浏览次数:49  
标签:函数 hmin 元素 最小 minhash 哈希 集合

最小哈希

维基百科,自由的百科全书

 


计算机科学领域,最小哈希(或最小哈希式独立排列局部性敏感哈希)方法是一种快速判断两个集合是否相似的技术。这种方法是由Andrei Broder (1997),[1]发明的,最初在AltaVista搜索引擎中用于在搜索结果中检测并消除重复Web页面。[2]

它同样也应用于大规模聚类问题,比如通过文档间包含的词语相似性进行聚类。[1]

目录

雅可比相似度与最小哈希值

两个集合AB雅可比相似度系数定义如下:[3]

{\displaystyle J(A,B)={{|A\cap B|} \over {|A\cup B|}}.}

它是一个0到1之间的数值上,当其为0时表示两个集合不相交,当其为1时表示两个集合相等,其他的情况则在0和1之间。它广泛地用于两集合间相似性的判断:当雅可比系数趋向于1时,两个集合更相似;反之,当雅可比系数趋向于0时,两个集合更不相似。

假定h是一个将AB中的元素映射到一些不相交整数的哈希函数,而且针对给定的S,定义hmin(S)为S集合中具有最小h(x)函数值的元素x。这样,只有当最小哈希值的并集A ∪ B依赖于交集A ∩ B时,有hmin(A) = hmin(B)。 因此,

Pr[hmin(A) = hmin(B)] = J(A,B).

另一方面来说,如果r是一个当hmin(A) = hmin(B)时值为1,其它情况下值为0的随机变量,那么r可认为是J(A,B)的无偏估计。尽管此时方差过高,单独使用时没什么用处。最小哈希方法的思想是通过平均用同一方式构造的许多随机变量,从而减少方差。

算法

多哈希函数的变种

最简单的最小哈希方法是使用k个不同的哈希函数,其中k是固定的整数参数,使用这k个函数所对应的khmin(S)值来描述每个集合S。 使用这种最简单的版本来判断J(A,B),假定y是使得hmin(A) = hmin(B)的哈希函数个数,使用y/k作为估计。则此估计是k个不同的0-1随机变量的平均值,其中每个随机变量当hmin(A) = hmin(B)值为1,反之为0,并且是J(A,B)的无偏估计。因此,该平均值同样也是一个无偏估计,而且通过0-1随机变量之和的标准Chernoff上界可得知,其期望误差是O(1/√k)。所以,针对任意给定的常数ε > 0,存在另一常数k = O(1/ε2),其估计的期望误差不超过ε。例如,使用400个哈希函数值来估计J(A,B),其期望误差将小于或等于.05。

单一哈希函数的变种

计算多个哈希函数的代价是相当昂贵的,因此有关最小哈希方法的另一种实现方法是仅使用单一的哈希函数来避免这个问题。对于每个集合,使用这个单一的哈希函数选出其中的多个值,而不是每个哈希函数选择一个值。假定h是一个哈希函数,k是一个固定整数。如果Sh域上k或更多元素的集合,则定义h(k)(S)为S中具有最小h值的k个元素所组成的子集。该子集h(k)(S)可用作集合S的一个签名,任意两个集合间的相似度可通过比较它们的签名来计算。

特别地,假定A and B为任意两个集合,X = h(k)(h(k)(A) ∪ h(k)(B)) = h(k)(A ∪ B)是A ∪ Bk个元素的集合,如果h是随机变量并且k个元素的任意子集等可能地被选择。也就是说,XA ∪ B简单随机样本Y = X ∩ h(k)(A) ∩ h(k)(B)是集合X中属于A ∩ B交集的元素。因此,|Y|/kJ(A,B)的无偏估计。单一哈希函数的估计与多个哈希函数产生的估计的不同在于Y总是有k个元素,而多个哈希函数由于两个不同的哈希函数可能会产生相同的最小值,因此可能会产生更少的样本元素。然而,当k相对集合大小来说很小时,该区别可忽略不计。

通过不重复取样的标准Chernoff上界,该估计的期望误差为O(1/√k),其性能与多个哈希函数方法相匹配。

耗时分析

|Y|/k估计通过给定集合的两个签名能够在O(k)能够计算出来,因此,当ε and k为常数时,从签名中计算相似度估计的时间也为常数,这样当众多两两相似度需要计算时,该方法在运行时间上与每个集合中元素的完全比较相比,能够有实质性的优化。

最小哈希式独立排列

为了实现上述的最小哈希方法,哈希函数h需要定义n元素上的一个随机排列,这里的n是指待比较的所有集合并集中不相交元素的总数。 但是由于存在n!个不同的排列,仅仅指定一个真正随机的排列就需要Ω(n log n)位,即使n一般时,这个数值也很大。基于这样的事实,与全局哈希相类似的理论,有大量的研究工作寻找“最小哈希式独立的”一簇排列,意指针对域的任意子集,任何元素都与其最小值是等可能的。已经证明,最小哈希式独立的排列簇至少必须包含:{\displaystyle lcm(1,2,...,n)\geq e^{n-o(n)}}

个不同的排列,因此它需要Ω(n)位来指定一个排列,这个数值仍然很大。[2]

由于实践上不可行,引入了最小哈希式独立的两个变型概念:严格最小哈希式独立排列簇和近似最小哈希式独立排列簇。 严格的最小哈希式独立是指最小哈希式独立属性被限制在集合基数至多为k的一些集合中。[4] 近似最小哈希式独立最多有一个固定的概率ε变化为完全独立。[5]

应用

最小哈希的最初应用包括在Web文档中聚类并消除近似重复,这通过在那些文档中出现的词语集合来描述。[1][2] 相似的技术也应用于其他类型数据的聚类和近似重复消除,如图片:在图片数据中,一张图片可以通过分割用很多更小的子图片集合或更多复杂图片特征的描述集合来表示。[6]

Schleimer, Wilkerson & Aiken(2003)使用最小哈希技术作为数字文档剽窃检测方法的一部分,他们的方法将文档表示成给定长度的子串集合,将文档划分成更大固定长度的窗口,然后使用子串的最小哈希值作为每个窗口的描述值。如果文本的拷贝部分比两倍窗口尺寸还要长,则该描述值将肯定匹配保存在数据库中众多描述值中的一个,这样那个窗口就可以用来检查有多少内容是拷贝的。[7]

数据挖掘领域,Cohen et al.(2001)使用最小哈希技术作为关联规则学习的工具。给定一个数据库,其中每一项都有多个属性(可看作是每行为一个数据库项, 每列为一个属性的0-1矩阵),他们将最小哈希的近似度方法应用于Jaccard系数,用来辨别频繁共同出现的属性候选对,然后仅计算这些候选对的确切系数值,以确定哪些项目共同出现的频度低于一个给定的严格阈值。[8]

相关主题

最小哈希方法可看作是局部性敏感哈希的一个实例。局部性敏感哈希是使用哈希将大集合的数据对象映射到更小的哈希值的技术集合,通过这样的方法当两个对象距离相近时,它们的哈希值也可以相同。在最小哈希方法实例中,一个集合的签名可看作是它的哈希值。其它局部性敏感哈希技术还有针对集合间的海明距离,以及向量间的余弦距离等。另外,局部性敏感哈希还在最近邻搜索算法有着重要的应用。[9]

标签:函数,hmin,元素,最小,minhash,哈希,集合
From: https://blog.51cto.com/u_11908275/6405215

相关文章

  • leetcode2352哈希表的键可以是一个容器等类型
    map<vector<int>,int>cnt;//用于存储每个行向量出现的次数for(autorow:grid){//直接遍历行向量cnt[row]++;}for(inti=0;i<n;++i){vector<int>arr;for(intj=0;j<n;++j){//存储列向量arr.emplace_back(grid[j][i]);}if(cnt.find(arr)!=cnt.......
  • 07.类神经网络训练--局部最小值与鞍点
    局部最小值于鞍点训练模型的参数时,随着参数不断地更新,loss函数不会再继续下降,但是仍然对这个loss不满意,或者有时候发现一开始model就训练不起来,不论怎么更新参数loss函数都不会掉下去。我们认为在某个地方参数对loss的微分是0,于是梯度下降就失去了作用,这个时候训练就停止了,这个......
  • 谈谈一致性哈希算法
    一致性哈希算法是1997年由麻省理工的几位学者提出的用于解决分布式缓存中的热点问题。大家有没有发现,我们之前介绍的例如快排之类的算法是更早的六七十年代,此时分布式还没有发展起来,大家往往还在提高单机性能。但是九十年代开始,逐渐需要用分布式集群来解决大型问题,相应的算法研究......
  • python spark 求解最大 最小 平均
    rdd=sc.parallelizeDoubles(testData);Nowwe’llcalculatethemeanofourdataset. 1LOGGER.info("Mean:"+rdd.mean());Therearesimilarmethodsforotherstatisticsoperationsuchasmax,standarddeviation,…etc.Everytimeoneofthismethodisin......
  • LeetCode/叶值的最小代价生成树
    给你一个正整数数组 arr,考虑所有满足以下条件的二叉树:每个节点都有0个或是2个子节点。数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。每个非叶节点的值等于其左子树和右子树中叶节点的最大值的乘积。在所有这样的二叉树中,返回每个非叶节点的值的最小可能总......
  • 1130. 叶值的最小代价生成树
    题目链接:1130.叶值的最小代价生成树方法:dp解题思路状态表示集合:\(dp[i][j]\)表示子数组\([i,j]\)能构成的所有合法的二叉树集合;属性:\(dp[i][j]\)的值表示集合中,二叉树非叶节点值和的其中最小值。状态计算集合划分:将子数组\([i,j]\),划分为\([i,k]\)和\([k......
  • 无向图的最小环问题
    考试时候记错方法,然后还有其他一堆错误然后寄掉了。你TM学了个JB。所以写一篇无向图的最小环问题解法一,\(floyd\),\(O(n^3)\)for(intk=1;k<=n;++k){ for(inti=1;i<k;++i)if(k!=i) for(intj=i+1;j<k;++j)if(i!=j&&j!=k){ if(mp[i][k]......
  • PTA 组最小个数
       importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){ArrayList<Integer>list=newArrayList<>();Scannerinput=newScanner(Syste......
  • 最小距离和
    题目:在一个平面坐标系中给定()个点,坐标为范围的绝对值均在范围内,在轴上找一点    使得这点到所有点的距离之和最短。 分析:本题方法是三分,我们知道三分满足的条件是这个对象必须是单峰函数。题目要求找到最小值,那么也就是说   这个距离之和是一个下凸函数,现在来开始证明。......
  • 1439. 有序矩阵中的第 k 个最小数组和
    给你一个m *n的矩阵mat,以及一个整数k,矩阵中的每一行都以非递减的顺序排列。你可以从每一行中选出1个元素形成一个数组。返回所有可能数组中的第k个最小数组和。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/find-the-kth-smallest-sum-of-a-matrix-with-so......