CS521 Advanced Algorithm Design 学习笔记(四)Hashing with real numbers and their big-data applications

文章介绍了将哈希用于大数据算法中的新方法,特别是将哈希函数视为实数映射,如将IP地址映射到[0,1]区间。这种方法被用来估计大集合的元素个数,通过选择多个随机哈希函数并维护寄存器,可以有效估算不同IP地址的数量。此外,哈希也被应用于估计文件的相似度,通过计算Jaccard相似度,确定文件的重复或相似性。文章强调了正确选择哈希函数和数量以达到所需精度的重要性。

Lecture 4 Hashing with real numbers and their big-data applications

在第一讲中,我们对Hash的印象是通过计算若干bit进行的快速访存方式。不过,在过去的几年里,大数据算法以有趣的方法使用着Hashing,即把Hash看做实数。例如,我们可能会把IP地址映射到[0,1]区间上。准确的来说,是[0,1]区间上的有理数。

估计一个大集合的元素个数

假设router想要记录上个小时内不同的IP地址的访问次数。但是为了知道哪些访问是不同的,似乎就得把所有见过的IP都存下来,这个开销太大了。

想法:选择k个随机哈希函数h1,...,hkh_1,...,h_kh1,...,hk将128bit映射到[0,1]上的随机实数。维护k个寄存器,初始为0;当IP地址x到来时,计算hi(x)h_i(x)hi(x),如果hi(x)h_i(x)hi(x)比当前存储在第i个寄存器的值小,则将其更新为hi(x)h_i(x)hi(x).

YiY_iYi为结束时第i个寄存器的内容,其为一个随机变量,因为哈希函数是随机的。假设不同的IP地址数量为N,我们希望用YiY_iYi来估算N.

定理:EYi=1N+1,VarYi=1(N+1)2EY_i =\frac{1}{N+1}, Var Y_i =\frac{1}{(N+1)^2}EYi=N+11,VarYi=(N+1)21.

直觉上,N个随机[0,1]的最小值应该在1/N左右

注意到Pr[Yi≤z]=(1−z)NPr[Y_i\leq z]=(1-z)^NPr[Yiz]=(1z)N,因此使用尾分布,E[Yi]=∫01(1−z)Ndz=1N+1E[Y_i]=\int_0^1 (1-z)^N dz=\frac{1}{N+1}E[Yi]=01(1z)Ndz=N+11

由于我们随机选择了k个随机哈希函数,因此YiY_iYi独立同分布。求其平均Y‾\overline{Y}Y即为对1/N+1一个比较好的估计(方差缩小到1(N+1)2k\frac{1}{(N+1)^2k}(N+1)2k1)。考虑切比雪夫不等式,Pr(∣X−EX∣≥cσ)≤1c2Pr(|X-EX|\geq c\sigma)\leq \frac{1}{ c^2}Pr(XEXcσ)c21,因此取1/k=ϵ21/k=\epsilon^21/k=ϵ2时标准差是ϵ/N+1\epsilon/N+1ϵ/N+1,从而估计的近似比在ϵ\epsilonϵ的概率是常数。

当然,我们现在都假设哈希函数是完全随机的。下面我们证明将其改为之前定义的逐对独立族,我们的估计也至多改变常数倍。

引理:容斥bound

∑iPr[Ai]−∑i,jPr[Ai∧Aj]≤Pr[A1∨A2...∨An]≤∑iPr[Ai]\sum_i Pr[A_i]-\sum_{i,j} Pr[A_i\wedge A_j]\leq Pr[A_1\vee A_2...\vee A_n]\leq \sum_i Pr[A_i]iPr[Ai]i,jPr[AiAj]Pr[A1A2...An]iPr[Ai]

由于相互独立性,我们有:
1≥Pr[∃x:h(x)≤1N]≥N×1N−(N2)1N2≥12 1\geq Pr[\exists x: h(x)\leq \frac{1}{N}]\geq N\times \frac{1}{N}-\binom{N}{2} \frac{1}{N^2}\geq \frac{1}{2} 1Pr[x:h(x)N1]N×N1(2N)N2121
使用一些其他技巧,我们可以证明对于2-pairwise id family,至少有1/2的概率让N个Hash的min落在区间[13N,3N][\frac{1}{3N},\frac{3}{N}][3N1,N3]中,这也是一个不错的估计。利用这个bound,我们可以计算使得k个min落在界[13x,3x][\frac{1}{3x},\frac{3}{x}][3x1,x3]中的最大似然x。

估计文件相似度

在网络上如何检测两个文件是否相似?考虑similarity hashing的方法,可以为两个文件做画像,但同时保留一些语法成分。

把文件看成出现在其中的单词集合,Jaccard 相似度定义为∣A∩B∣∣A∪B∣\frac{|A\cap B|}{|A\cup B|}ABAB,因此越接近1越相似。

Idea:选择一个随机哈希函数,把单词集合映射到[0,1]中。定义集合A的hash是min⁡h(x),x∈A\min h(x), x\in Aminh(x),xA. 我们注意到Pr[hash(A)=hash(B)]Pr[hash(A)=hash(B)]Pr[hash(A)=hash(B)]恰好就是Jaccard相似度:注意到如果元素x≠yx\neq yx=y,那么当哈希函数实值时,Pr[h(x)=h(y)]=0Pr[h(x)=h(y)]=0Pr[h(x)=h(y)]=0. 因此,hash相等当且仅当恰好是A∩BA\cap BAB中的元素达到了最小值,而一共是对A∪BA\cup BAB个元素求了hash值,因此Pr[hash(A)=hash(B)]=∣A∩B∣∣A∪B∣Pr[hash(A)=hash(B)]=\frac{|A\cap B|}{|A\cup B|}Pr[hash(A)=hash(B)]=ABAB.

由于我们关注的是重复文件,我们定义文件重复,如果其距离≥0.9\geq 0.90.9. 那么,我们只要计算k对hash,并且标记这对文件,如果有0.9−ϵ0.9-\epsilon0.9ϵ比例的hash碰撞了。根据Chernoff bound,当k=Ω(1/ϵ2)k=\Omega(1/\epsilon^2)k=Ω(1/ϵ2)时,这将所有≥0.9\geq 0.90.9相似度的文件都标记了,而且不标记<0.9−3ϵ<0.9-3\epsilon<0.93ϵ的文件。

当然,回到现实情况,我们要考虑k-pairwise Hash. Indyk证明了只需要使用Ω(log⁡(1/ϵ))\Omega(\log (1/\epsilon))Ω(log(1/ϵ))-wise Hash即可以精度ϵ\epsilonϵ分辨Jaccard近似度。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值