Matlab:如何在Locality敏感哈希中创建多个哈希表的概念上的困难

时间:2016-05-25 17:47:56

标签: matlab nearest-neighbor locality-sensitive-hash

Locality sensitive hashing(LSH)的关键思想是邻居点 v 更有可能 映射到同一个存储桶但彼此远离的点更可能映射到不同的存储桶。在使用随机投影时,如果数据库包含N个高维d的样本,那么理论上说我们必须创建k个随机生成的散列函数,其中k是目标缩减维度,表示为g(**v**) = (h_1(v),h_2(v),...,h_k(v))。因此,对于任何矢量点 v ,该点被映射到具有g函数的k维向量。然后,哈希码是减小长度/维度k的向量,并且被视为桶。现在,为了增加碰撞的概率,理论上说我们应该随机地得到L个这样的g函数g_1, g_2,...,g_L。这是我不理解的部分。

问题:如何创建多个哈希表?哈希表中包含多少个桶?

我正在遵循严夏等人在文件Sparse Projections for High-Dimensional Binary Codes中给出的代码。 al Link to Code

在档案Coding.m

dim = size(X_train, 2);
R = randn(dim, bit);

% coding
B_query = (X_query*R >= 0);
B_base = (X_base*R >=0);   

X_query是每个维度d的查询数据集,并且有1000个查询样本; R是随机投影,bit是目标减少维度。 B_queryB_base的输出为N长度为k的字符串,取0/1值。 这种方式是否会创建多个哈希表,即N是哈希表的数量?我很困惑。详细解释将非常有用。

1 个答案:

答案 0 :(得分:1)

  

如何创建多个哈希表?

LSH通过串联使用(放大的)哈希函数创建哈希表:

g(p) = [h<sub>1</sub>(p), h<sub>2</sub>(p), · · · , h<sub>k</sub> (p)], h<sub>i</sub> ∈<sub>R</sub> H

g()是一个哈希函数,它对应一个哈希表。因此,我们通过g()将数据映射到该哈希表,并且概率地,将关闭的数据放入同一个桶中,非关闭的数据库将落入不同的桶中。

我们这样做L次,因此我们创建了L哈希表。请注意,每个g()最有可能与其他g()哈希函数不同。

注意:大的k⇒P 1 之间的差距较大,P 2 。小P 1 ⇒larer L以便找到邻居。实际选择是L = 5(或6)。 P 1 和P 2 定义如下:

enter image description here

  

哈希表中包含多少个桶?

希望我知道!这是一个棘手的问题,sqrt(N)如何N是数据集中的点数。检查一下:Number of buckets in LSH

  

燕霞的代码

我对此并不熟悉,但根据您的说法,我相信您看到的查询数据的数量是1000,因为我们希望提出1000个查询。

k是字符串的长度,因为我们必须哈希查询以查看它将映射到的哈希表的哪个桶。该桶内的点是潜在的(近似)最近邻居