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

Matlab : Conceptual difficulty in How to create multiple hash tables in 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。这是我不明白的部分。

问题:如何创建多个散列table?一个散列中包含多少个桶 table?

我正在遵循 Yan Xia 等人在论文 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 个值。 这种方式是否创建多个散列 tables 即 N 是散列 tables 的数量?我很困惑如何。详细的解释会很有帮助。

How to create multiple hash tables?

LSH 通过串联使用(放大的)散列函数创建散列-table:

g(p) = [h1(p), h2(p), · · · , hk (p)], hiR H

g()是一个hash函数,对应一个hashtable。因此,我们通过 g() 将数据映射到该散列 table 并且有可能,接近的将落入同一桶,而不接近的将落入不同的桶。

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

注:大k ⇒ P1、P2之间的差距较大。小 P1 ⇒ 大 L 以便找到邻居。一个实际的选择是 L = 5(或 6)。 P1和P2定义如下图:

How many buckets are contained in a hash table?

希望我知道!这是一个难题,sqrt(N) 怎么样,其中 N 是数据集中的点数。检查这个:

The code of Yan Xia

我不是很了解,但是从你说的,我相信你看到的查询数据是1000条,因为我们要提出1000条查询。

k 是字符串的长度,因为我们必须散列查询 以查看它将在散列的哪个桶中table映射。该桶内的点是潜在的(近似)最近邻.