hash其实就是一种映射,不过一般都不是一一映射。LSH 这种映射有个很好的特点:它可以把在空间A里面相近的点映射到空间B后,这些点也相近。有这么好的一个性质,首当其冲的一个应用就是多维近似查询。比如说在空间A中,我们要查一个与给定点p相近的一些点,一般的方法就是用p去和空间A里面的点一一比较,最后找过最接近的一些点,显然这样方法的时间复杂度是0(n)级的,这在大规模查询中还是太大了。使用LSH的方法是,先将空间A的点通过LSH映射到空间B(一般是一维空间,实际中为了提高命中率会把原先的点映射到多个一维空间,),我们在把p也映射到空间B ,这样在一维空间中我们很容易得到与p相近的点。当然LSH的代价是有些相邻的点找不到。
LSH我认为有两个地方很重要:
1) 查到合适的映射函数
2) 怎么保证精确度
我现在研究的是一种基于p-stable的LSH,在进入主体前有些数学知识是要
提提的。
a) 什么是稳态分布
如果随机变量X 满足如下条件, 则称它是服从稳态分布的随机变量: 对于X 的两个相互独立的拷贝X 1 和X 2 以及任意给定的正的常数a 和b, 存在常数c 和正的常数d , 使得X 1 和X 2 按照a 和b 的线性相组合在分布上满足aX1+ bX2 = cX + d其中 = 表示等号两边的表达式具有相同的分布。在上述稳态分布的定义中, 如果d ! =0, 则称随机变量满足广义稳态分布。若d = 0, 则称该随机变量满足狭义的稳态分布。
b) 向量间的长度定义
Length define the Lp norm(Lp norm这个东西我只可意会不可言传)
我们一般取p=1或2。
当p=2时长度定义如下:
c) p-stable 分布
p-stable 分布:A distribution D over R Ris called p-stable, if there exists p ≥ 0 such that for any n real numbers v1 . . . vn and i.i.d. variables X1 . . .Xn with distribution D, the random variable viXi has the same distribution as the variable X, where X is a random variable with distribution D. stable distributions exist for any p ∈ (0, 2]. In particular:
• a Cauchy distribution DC, defined by the density function is 1-stable
• a Gaussian (normal) distribution DG, defined by the density function is 2-stable
From a practical point of view, note that despite the lack of closed form density and distribution functions, it is known that one can generate p-stable random variables essentially from two independent variables distributed uniformly over [0, 1].
有了这些基本的数学知识我们就来说我们怎样构造一个LSH函数
假设我们把一个两维空间的点映射到一维空间上:
如下图:
我们发现把a,b,c ,d,e ,f点投影到x轴后,a和b的投影很接近,同之,c和d,e和f。这与实际情况还是很接近的,但是我们把a,b,c ,d,e ,f点映射到y轴后,就出现了与实际情况不同,如在实际中a和d是不接近的,但在y轴的投影中,我们发现他们投影是接近的,通过这我们发现不是随便做个映射就行了,因此我们问自己我们能找到一个向固定方向的映射吗让所以情况都符合事实。一般不能的(我比较保守),在这个例子中我们选了x和y轴做映射,实际上我们是可以在这个空间中任意找条直线做投影的。 至于高维的也是让这些点向某条空间上的直线做投影,现在的问题是我们怎样找到这样一些合适的向量(我们一般找的是通过原点的直线)。现在回头看看p-stable 分布的定义,你就会知道我们为什么选p-stable了,
我们知道在多维空间中,一个向量是由这个空间的维数决定的,现在假设我们的空间是n,我们取随机变量 X1 . . .Xn,他们都服从同一个p-stable分布,现在我们把空间的一个点p(v1,v2,….vn)和(x1,x2….xn)做点积即 viXi,它的集合意思是向量op在向量ox上的投影。同时我们要注意 viXi它是 ( 和x1…是同分布的)是同分布的。这样我们对 viXi的大小可以在概率上把握了。这样我们只要随机取X1 . . .Xn这些数,就可以得到不同的投影直线了。这就是LSH我认为的第一个点,
目前我还在研究第二个点
待写