E2LSH的原理与实现
来源:互联网 发布:程序员壁纸高清 编辑:程序博客网 时间:2024/05/01 21:44
E2LSH
E2LSH一个是用来解决高维空间近邻搜索问题的工具包。E2LSH实现了R-NN问题的随机化解决方案,即(R, 1 −δ )-near neighbor:每个满足||q-p||2 ≤ R的点p被报告的概率至少为1 −δ。E2LSH的实现基于基本的LSH模式。Hash函数族
E2LSH使用基于p-stable分布的哈希函数族:LSH基本过程
定义g函数:使用LSH进行R-NN或k-NN搜索的过程主要分为建立索引和查询两步。建立索引时,对数据集中的每个点v∈P,计算其L个g函数值,并将其存入L个表中对应的哈希桶内。查询时,同样计算查询点q的L个g函数值,则找到q所在的L个哈希桶,计算这些哈希桶中的点与q的距离,找到规定距离R之内的点(R-NN),或k个距离最近的点(k-NN)。
参数的确定
L的确定
参数L的确定需要根据前面提到的(R, 1 −δ )-near neighbor的定义来解决,即一个近邻点被报告的概率至少为1 −δ。给定一个查询点q,近邻点v ∈ B(q,R),设p1= p(R),两点在某个桶中发生碰撞,即在一个g函数中两点的值相等,应满足:k的确定
为了确定参数k的取值,首先需要知道使用E2LSH进行R-NN查询的查询时间分为两部分: -根据Tg与Tc的计算方式可知,Tg随k的增大而增大,Tc随k的增大而减小,因此存在一个k的最优值使Tg+Tc最小。对不同的查询点q来说Tc是不同的,因此需要计算Tc的平均值,根据其平均值来估计k的最优值。E2LSH的实现是从查询集中随机选取一组样本点组成集合S,构造一个样本数据结构,并在这个数据结构上执行多次查询,测得一组真实的Tg与Tc的值,计算出Tc的平均值
gi 的快速计算
在基本的LSH方法中,g函数的确定过程是在哈希函数族中均匀随机独立选取L个函数gi = (h(i)1 , … , h(i)k ),则需要O(d)时间计算hj(i)(q),O(dkL)时间计算g1(q), … , gL(q)。为了减少计算函数gi函数的时间,需重用一部分hj(i)函数,过程如下:- - 设k为偶数,m是一个常数,定义函数
- - 重新定义
- - 总共的哈希表个数为
m个u函数中q和v的值都不相等的概率为 :
只有一个u函数中q和v的值相等的概率为:
该式计算出来的L会比gi相互独立时计算的L值略大一点,但依然是
实现细节
桶哈希
对数据集中的点使用哈希函数哈希之后得到g(v)=(h1(v),…,hk(v)),但将(h1(v),…,hk(v))直接存入哈希表,即占用内存,又不便于查找,为解决此问题,E2LSH使用了另外两个哈希函数:- -
- -
- -
- -
0 0
- E2LSH的原理与实现
- 数字证书的原理与实现
- 数字证书的原理与实现
- CRC的原理与实现
- 汉诺塔的原理与实现
- 数字证书的原理与实现
- 数字证书的原理与实现
- CGI的原理与实现
- Synchronized的实现与原理
- jsonp 的原理与实现
- 栈与队列的原理与实现
- zip 的压缩原理与实现
- zip 的压缩原理与实现
- 局域网监听的原理、实现与防范
- 随机数的产生原理与实现
- zip 的压缩原理与实现 (转)
- Projective Texture的原理与实现 (转贴)
- zip 的压缩原理与实现
- Intent的应用
- 关于windows10系统,玩英雄联盟加载无响应问题的解决办法
- IOS之Quartz
- hihoCoder 1236 Scores(bitset+分块)
- Mac OS X10.10下Matlab 2014b安装libsvm-3.20
- E2LSH的原理与实现
- SpriteBuilder中的粒子系统属性
- 《Metasploit渗透测试魔鬼训练营》 之 信息收集工具
- ios UI day01
- 学生成绩管理C实现
- u-boot-2009.11移植(适用于TQ2440和MINI2440)第三篇:修改初始化代码
- 6.Python补充_Python之道
- Crush The Crash--dump和异常
- 2015年“10.1”假期游玩——杭州(3天2夜),上海(2天1夜)