LSH 来自楼下的塘北

位置敏感哈希:Locality Sensitive Hashing

转自 楼下的塘北  致谢!http://blog.youtueye.com/work/lsh.html

 前一篇讲到用于高维数据搜索的方法--最近邻搜索,而之于其中的方法是基于树结构的索引(如K-D Tree),当数据维数过大时,其效率同线性扫描。研究人员试图寻找一种在保证一定准确性的前提下,时间和空间复杂度得到降低,并且能够很好地支持高维数据的检索算法,这里介绍的LSH(Locality Sensitive Hashing,位置敏感哈希)便是就这一问题产生的。

简单地讲,LSH建立了一种映射准则:将原始高维数据空间S中的点映射到相对低维空间U,保证S中距离相近的点,其在U中的映射点,也具有较大概率的距离相近,甚至是相等;那么在做搜索时,将查询点做映射,在U中查找与该映射值相近的点;这样,这些查找到的映射点的原象,即是S中与查询点相近的点,因此,这种方法称为是“位置敏感”(Locality Sensitive)的。那么,映射的建立、空间的选择以及空间的度量,是LSH要研究的问题。

如上图所示,空间上的点经位置敏感哈希函数散列之后,对于q,其rNN有可能散列到同一个桶(如第一个桶),即散列到第一个桶的概率较大,会大于某一个概率阈值p1;而其(1+c)rNN之外的对象则不太可能散列到第一个桶,即散列到第一个桶的概率很小,会小于某个概率阈值p2。当然,为了尽可能地减少冲突,可建立多个散列表,每个散列表对应多个桶。(via)

关于LSH的理论及发展,本文按如下线路说开:

1. 原始 LSH

P. Indyk 和 R. Motwani 在 [Indyk & Motwani '98] 中首次提出LSH的概念:

定义:映射   H={h:SU}  对于度量D 关于 (r1,r2,p1,p2)  对 v,qS 是敏感的(Sensitive),其中 p1>p2,r1<r2 ,满足:

(1)如果 vB(q,r1)   , 那么   PrH[h(q)=h(v)]p1

(2)如果 vB(q,r2)   ,  那么  PrH[h(q)=h(v)]p2

其中, vB(v,r) 定义为 度量空间 M=(S,d) 中以  vS 为中心, r 为半径的类球体: B(v,r)={qS|d(v,q)r}

这样,只要选择一族这样的映射 G={g:SUk} ?g(p)=(h1(p),,hk(p)),hiH ,中的 l 个: g1,,gl ,将 S 中的点集 pP 散列到苦干个桶 gj(p) 中。

2. 实现 LSH

A. Gionis, P. Indyk, R. Motwani 在 [Gionis & Indyk & Motwani '99] 中详细说明了LSH的实现。作者证明LSH可成功解决 Ld1 空间上的 (r,ε)NN 问题,同时也在概率意义下成功解决了 εNN 问题,并保证了查询时间的上界为 O(dn1/(1+ε)) ,而原始LSH算法仅为 O(dn1/ε)

注意到 Rd 空间的赋 l1 范数 xy1=di|xiyi| 近似于Hamming空间,那么 哈希函数可选为从 Rd 空间到Hamming空间的映射。

假设 p Ld1 空间中的向量,且 p 的每一维为非负整数,最大值为 c 。LSH算法建立 l 个散列表,每个散列表 Ti(i=0,,l1) 包含 M 个存放数据的桶,其中要涉及两个散列函数 gi,hi 。LSH为向量 p 在散列表 Ti 中建立索引的流程如下:

(1)将向量 p 转化为Hamming空间 Hc×d 中的二进制向量 pH (每一维仅为0或1): pH=Unary(c)(p[0])Unary(c)(p[d1])
其中, Unary(x) 是将整数 x 转化为 c 维二进制向量,因此向量在Hamming空间 Hc×d 中的距离与在原始空间 Ld1 中的距离保持一致。
(2)将散列函数 gi 作用在 pH 上,得到 pH=gi(pH)
其中,散列函数 gi 为选择 pH 中的 k 个形成一个新的 k 维二进制向量 pH
(3)将散列函数 hi 作用在 pH 上,得到 Ii=hi(pH)
其中, hi(pH)=(k1j=0wi,j×pH[j]) , Wi={wi,1,,wi,k} 是与 hi 相关联的一组系数。
(4)将向量 p 存放到 Ti 的第 Ii 个桶中。

在实际应用中散列表的个数 l ,每个散列表的桶数 M 以及散列函数 gi 从向量 pH 中选择的向量维数 k 都是LSH的重要参数。
3. 欧氏空间 LSH   

M. Datar, N. Immorlica, P. Indyk, and V. S. Mirrokni.在[ACM'04]中提出基于稳态分布(p-stable)的LSH,从而适用于欧氏空间( Ld2 )。

4. 基于核  SH(Kernelized Locality-Sensitive Hashing)

Brian Kulis, Prateek Jain, & Kristen Grauman 在 [PAMI '09] 中对Mahalanobis距离 进行扩展,引入核方法及半监督学习以降低映射的计算量及LSH参数的选择。

 

项目主页:Kernelized Locality-Sensitive Hashing

5. LSH 综述

Piotr Indyk 的 学生 在其 Alex Andoni  博士毕业论文[Andoni '09]中 对已有LSH进行了总结,并开发了适用于欧氏空间上的LSH算法实现:E2LSH。

项目主页: LSH Algorithm and Implementation (E2LSH)

实践:

1. 在VC2005+OpenCV2.2下,结合LSHKIT,使用SIMPLIcity Image Database(1000 images),应用简单的颜色特征,结果如下:

2. 另外一个在线的演示来自Princeton 的 Wei Dong http://www.simigle.com:8080/,号称是索引了三千万淘宝商品图片和三千万Flickr图片,经测试,效果还好。另外 ,其也是LSHKIT 项目的参与者。

Blog:

LSH 介绍

 又好又快的检索:Fast Similarity Search

LSH小结系列

基于汉明距离的LSH图像检索算法

Paper:

 

资源:

LSHKIT: A C++ Locality Sensitive Hashing Library


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值