p-稳定E2LSH

来源:互联网 发布:启航考研网络视频 编辑:程序博客网 时间:2024/06/06 05:33


LSH算法的基本思想就是用随机的哈希函数值保证相似的数据点以很高的概率发生冲突而能够被检测到。最初的LSH应用在haming空间,后来将其扩展到欧氏空间。欧氏局部敏感哈希(E2LSH,Exact Euclidean locality sensitive Hashing)是位置LSH在欧氏空间的一种随机化实现方法,其基本原理是:利用基于p-稳定分布的位置敏感函数对高维数据进行降维映射,使原始空间中距离很近的两个点经映射操作后依然很近。E2LSH继承了原始LSH的两个特性:第一是它很适合于维数高但稀疏的数据点,如图像特征;第二是如果数据满足一定的有界增长特性,它就可以很快地找到精确的近邻。如下图所示,三维空间中很近的点(绿颜色圆球)投影到某个平面上它们的距离仍然很近,三维空间中距离很远的红色正方体投影到平面上距离仍然很远。




E2LSH是基于p-稳定分布的,它使用哈希函数将数据点投影到随机的方向矢量 a上,a的每个元素均服从p-稳定分布。具有如下性质:若两个变量都服从p-稳定分布,则其线性组合也服从p-稳定分布

 

p=1时是柯西分布, 概率密度函数为:



 

p=2时是高斯分布,概率密度函数为:

 


 

利用p-稳定分布的特性可以设计有效的哈希函数族来处理高维特征向量,并能在保证数据间的距离相对不变的情况下,对高维数据进行降维。其主要方法是,产生一个d维的随机向量 a,随机变量a中的每一维都是随机的,独立的从p-稳定分布中产生,对于一个d维的特征向量v,根据稳定分布性质,随机变量a.v具有和(∑i|vi|p)1/p.X 一样的分布(其中X是一个满足p-稳定分布的随机变量),因此可以用 a.v 对向量 v 来进行降维,并可以用它来估算||v||p ,很容易看出这个过程是可以线性组合的,也就是说,a(v1 -v2) = a.v1–a.v2


基于p-稳定分布的局部敏感哈希算法中,并不直接利用a.v代表v去估算||v||p,而是使用它对每一个特征向量v赋予一个哈希值。对于两个向量v1和v2,如果它们之间的距离很近(||v1 -v2||较小),它们将以很高的概率发生碰撞(哈希值相同),如果它们之间的距离很远,则冲突的概率将会很小。a.v将每一个高维向量映射到一条实数线上。根据p-稳定分布,两个向量v1 和v2 的映射距离a.v1 -a.v2 与||v1 -v2||p.X(其中随机变量X满足p-稳定分布)是同分布的,a.v将高维向量v映射到实数集R,如果将实轴以宽度r进行等分,并对每一段区域从左到右进行分段标号,如果a.v落在哪个区域,就将此区域标号作为哈希值赋给它,很明显,使用这种方法构造的局部敏感哈希函数在降维的同时能有效的保持两个高维数据之间的距离。


每个局部敏感哈希函数形式化定义为如下格式,ha,b (v): Rd → N,映射一个高维数据到一个整数集,其中a为一个d维特征向量,每一维都是独立的,随机的从p-稳定分布中选取的一个变量,b为从[0,r]范围内随机选取的一个变量,对于给定的a, b,设置哈希函数:

 


 

其中上面的结果是向下取整操作,哈希函数 ha,b (v): Rd → N 可以把 d 维的向量 v 映射到整数集上。


接下来计算两个向量v1 ,v2在从局部敏感哈希函数族中随机选择的一个函数下的冲突的概率,使用fp(t)来定义p-稳定分布的绝对值的概率密度函数,对于两个向量v1 ,v2,设c=||v1-v2||p,对于一个随机从p-稳定分布中独立选择的向量a,,a.v1-a.v2 与cX的分布相同(其中X是服从p-稳定分布的一个随机变量),b是一个独立从[0,r]中选择的随机变量,可以很容易的看出:



 

对于一个固定的参数r,冲突的可能性随着c=||v1-v2||p的减小而增大。因此,该哈希函数族使(r1 ,r2 ,p1 ,p2)-敏感的,p1=p(1),p2 =p(c),r2 /r1 =c。因此,该局部敏感哈希函数族可以用来解决近似最近邻问题。




为拉大距离近的点与距离远的点经映射后碰撞概率之间的差距,E2LSH 常将k个位置敏感函数联合使用,定义函数族

 

G = { g : S → Uk }

 

上式表示k个位置敏感函数的联合,其中g(v) = (h1 (v), ··· , hk(v)),那么每个数据点v ∈Rd ,经函数g(v) ∈ G 降维映射后可以得到一个k维向量a = (a1 , a2 , ··· , ak )。然后,E2LSH 利用主哈希函数H1和次哈希函数H2对降维后向量进行哈希,建立哈希表存储数据点,H1和H2的具体形式如下:



 

其中,ai,bi为随机选取的整数,T为哈希表长度,一般设置为数据点的总数n,C为一个大素数,在 32 位机器上可以设置为232-5。主哈希值H1和次哈希值H2都相同的点将被存储在哈希表的同一个桶中,从而实现了数据点的聚类。


对于查询点q,首先使用局部敏感哈希函数获得一组哈希值,然后使用H1获得哈希表的位置,再计算H2值,通过查询该位置的链表,获得与点q的H2值相同值的点。最后,通过查询L个表,获得一组回收的点,通过对距离排序,获得K(或者少于K)个近邻点。

 

参考文献

Locality-Sensitive Hashing Scheme Based on  p-Stable Distributions

Optimal Parameters for Locality-Sensitive Hashing




0 0
原创粉丝点击