【原创】LSH和p-stable LSH
来源:互联网 发布:贪心算法汽车加油问题 编辑:程序博客网 时间:2024/06/05 22:43
原文地址:LSH">【原创】LSH和p-stable LSH 作者:咖啡猫
一、原始LSH
LSH主要用来解决高维空间中点的近似最近邻搜索问题,即Approximate NearestNeighbor。LSH将原始空间中的点嵌入到Hamming空间中,即原始空间中点的表达形式转换成Hamming空间中点的表达形式,原始空间中的距离度量转换成Hamming空间中的距离度量。这样,原始空间的e-NNS(定义见下文)问题就转变成Hamming空间中的e-KNN问题了。LSH方法提高了空间使用率,其搜索时间与维度线性相关的,与空间规模次指数相关,大大缩短了搜索时间。适用于解决不需要精确解,只需要得到近似解的问题。
1)若空间中两点p和q之间的距离D(p,q)<r1,则Pr(h(p)=h(q))>p1 2)若空间中两点p和q之间的距离D(p,q)>r2,则Pr(h(p)=h(q))<p2 条件在r1 <r2,p1 > p2的条件下有意义。 通俗来讲,就是距离较近的点映射到同一个位置的概率大,距离较远的点映射到同一个位置的概率小。这对下面将点集映射得到候选结果集的操作很重要,能保证得到的候选结果集是可用的。
定义一系列Hash函数h1,h2,…,hn,随机选取其中的k个函数组成函数g(x),不妨设选的是h1到hk,则g(x)=(h1(x),h2(x),…,hk(x)),像这样选取L个的g函数:g1(x),g2(x),…,gl(x),每个函数对应一个哈希表。对于原始空间中的每一个点p,通过每个g函数分别映射到L个哈希桶中。这样,每个点都会在L个哈希表的某个哈希桶中出现。查询时,给定了查询子q,利用L个g函数同样对q进行映射,将与q落在同一个哈希桶中的点作为候选结果集,计算q与候选结果集中的点之间的距离,并从中选出1个或K个距离最近的点。 简单的讲,就是讲原始的点集按距离分成不同的类,查询与q距离较近的点集时,只需比较和q在同一类中的点集,而不需要比较全部点集。从而节省了搜索时间。
因为许多符号不好打,并且内容较多,如果有需要详细步骤的,请参考: http://wenku.baidu.com/view/c616e7c008a1284ac85043cd.html 里面包括算法步骤和算法分析。
LSH是用局部敏感的方法解决近似最近邻搜索的问题。在原始的LSH方法中,通过将原始空间嵌入到Hamming空间中,将d维空间转换成d'=Cd维的Hamming空间(C是指原始空间中点的坐标的最大值,具体情况参见上一部分中的第4节-算法步骤),使用(r,(1+e)r,1-r/d',1-(1+e)r/d')-敏感哈希函数来解决(r,e)-Neighbor问题。而后来提出的p-stableLSH算法中,不需要将原始空间嵌入到Hamming空间中,可以直接在欧几里得空间下进行局部敏感哈希运算。 p-stableLSH应用在d维lp-norm下的欧几里得空间中,0<p<=2。p-stableLSH是LSH的进化版本,要解决的问题相同,而使用的方法和应用环境不同。因此,下面重点介绍p-stableLSH的应用环境,对于LSH的细节参见第一部分。 p-stableLSH使用的(R,cR,p1,p2)-敏感哈希中,c=1+e,并且不失一般性,设R=1。下面的工作主要是确定在1(即R)和c(即cR)下的p1与p2。 p-stableLSH之所以会叫这个名字,是因为该算法应用到p-stabledistribution(p-稳定分布)的概念。下面给出的就是p-稳定分布的概念: Def 1 :一个分布D称为p-稳定分布,如果对于任意n个实数v1,v2,…,vn和符合D分布的n个独立同分布随机变量X1,X2,…,Xn,都存在一个p>=0,使得变量和具有相同的分布,此处X是一个符合D分布的随机变量。 p-稳定分布不是具体的分布,而是满足某条件的分布族。当p=1时,代表是标准柯西分布,密度函数为 ;当p=2时,代表是标准正态分布(高斯分布),密度函数为 。 p-stable分布有一个重要的应用,就是可以估计给定向量v在欧几里得空间p-norm下长度,记为||v||p。方法是对于取定的d维向量v,从p-稳定分布中抽取d个随机变量组成d维向量a,计算a与v的点积a.v(点积的概念是将向量对应位置的元素相乘后所有乘积之和),根据p-stable的定义,由于a.v= ,因此a.v与||v||pX是同分布的(X是p-stable分布的一个随机变量)。选取若干个向量a,计算多个a.v的值,称为向量v的“概略(sketch)”,利用v的“sketch”可以用来估算||v||p的值。
在p-stableLSH中,a与v的点积a.v不用来估计||v||p的值,而是用来生成哈希函数族,且该哈希函数族是局部敏感的(即空间中距离较近的点映射后发生冲突的概率高,空间中距离较远的点映射后发生冲突的概率低)。大体方法是将一条直线分成等长且长度为r的若干段,给映射到同一段的点赋予相同的hash值,映射到不同段的点赋予不同的hash值。(a.v1-a.v2)是映射后的距离,而其值与||v1-v2||pX同分布,因此,原始距离(||v1-v2||p)较小时,映射后的距离也小,因此使用点积来生成哈希函数族可以保持局部敏感性。 哈希函数族的形式为:,其中b是(0,r)里的随机数,r为直线上分段的段长。哈希族中的函数根据a和b的不同建立函数索引。 从哈希函数族中随机选取一个哈希函数,现在估计两个向量v1和v2在该哈希函数下映射后发生冲突的概率。定义符合p-stable分布的随机变量绝对值的概率密度函数为fp(t),设c=||v1-v2||p,则a.v1-a.v2与cX同分布,X为p-stable分布下的随机变量。给出概率的计算公式如下,之后会有详细分析。 因为|a.v1-a.v2|=||v1-v2||p|X|=c|X|,X为p-stable分布下的随机变量,|X|的概率密度函数为fp(t)。若要向量v1和v2映射后发生冲突,需要满足如下条件:v1和v2通过与a进行点积运算分别映射到一段长度为r线段后,再通过加b运算,能使映射后的点在同一条线段上。 以下是对该概率公式正确性的证明: 设点a.v1在点M处,点a.v2在点N处,此处设N点在靠近Q的位置。 在加b后,因为b>0,因此加b后点会后移。不失一般性,设r=1,则有以下两种情况: (1)若映射到同一条线段上,不妨设为线段PQ(P为前端点,Q为后端点),设|MN|=t,|NQ|=m,则若要保证加b后点M和点N仍在同一条线段中,则要满足0<b<=m(此时加b后M,N仍在线段PQ中),或者t+m<=b<r(此时加b后点M,N落入下一条线段中)。 (2)若映射到不同线段上,但|MN|<r(此时必在相邻线段中),不妨设相邻两条线段为PQ和QR,设|MQ|=m,则|QN|=t-m,则若要保证加b后点M和点N仍在同一条线段中,则要满足m<b<r-(t-m)。
1、概述
2、相关概念
(1)哈希桶(HashBucket):哈希表中同一个位置可能存有多个元素,以应对哈希冲突问题。这样,哈希表中的每个位置表示一个哈希桶。
(2)e-NNS问题:对于一个查询子q,返回空间中的一个点p,使得d(q,p) <=(1+e)d(q,P),d(q,p)表示查询子与空间中点p的距离,d(q,P)表示查询子距空间点集P中最近点之间的距离。
(3)局部敏感:称一个函数族H={h:S->U}是(r1,r2,p1,p2)局部敏感的,如果满足下面两个条件(D为空间距离度量,Pr表示概率):
3、算法思想
4、算法步骤(L1准则下的欧几里得空间嵌入Hamming空间中)
二、p-stable LSH
1、背景介绍
2、概念解释
3、局部敏感哈希函数
(一)b对映射后点的影响
(二)点积对映射后点的影响
在上概率公式中,对于给定的r,概率p(c)是关于c的单调递减函数。即,c=||v1-v2||越大,映射后发生冲突的概率就越小,这符合局部敏感哈希函数的要求。因此,所选取的哈希函数族是局部敏感哈希函数族,并且是(r1,r2,p1,p2)-敏感的,其中p1=p(1),p2=p(c),r2/r1=c。c>1时,满足p1>p2,r1<r2。
以上就是对p-stableLSH的讨论,它通过涉入稳定分布和点积的概念,实现了LSH算法在欧几里得空间下的直接应用,而不需要嵌入Hamming空间。p-stableLSH中,度量是欧几里得空间下的lp准则,即向量v1与v2的距离定义为||v1-v2||p,然后通过设定的哈希函数将原始点映射到直线的等长线段上,每条线段便相当于一个哈希桶,与LSH方法类似,距离较近的点映射到同一哈希桶(线段)中的概率大,距离较远的点映射到同一哈希桶中的概率小,正好符合局部敏感的定义。
参考:http://wenku.baidu.com/view/c616e7c008a1284ac85043cd.html
{转载或引用请注明原文地址,谢谢!}
0 0
- 【原创】LSH和p-stable LSH
- 基于p-Stable分布的LSH
- Collision probability of p-stable LSH
- LSH
- LSH
- LSH
- LSH
- LSH算法.p稳定hash
- 【LSH源码分析】p稳定分布LSH算法
- LSH系列一:p稳定分布LSH算法初探
- 基于p稳定分布的LSH
- LSH系列二:p-稳定E2LSH
- LSH一族
- BOW和LSH的一点理解
- LSH以及ANN和NN问题
- BOW和LSH的一点理解
- BOW和LSH的一点理解
- 【E2LSH源码分析】p稳定分布LSH算法初探
- 数组子串问题
- 比较两篇文章的相似性方法
- 编辑距离及其算法
- 字符串包含问题算法
- 基于字符串比对的文档复制检测方法
- 【原创】LSH和p-stable LSH
- matlab利用描点画平滑曲线
- set_new_handler()总结
- 剑指Offer之 - 二维数组中的查找
- nginx thin 部署rails3程序
- leetcode 第111题 Minimum Depth of Binary Tree
- AngularJs轻松入门(五)过滤器
- Symmetric Tree —— Leetcode
- 多线程断点下载详解