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_query
和 B_base
的输出是 N
个长度为 k
的字符串,取 0/1 个值。
这种方式是否创建多个散列 tables 即 N
是散列 tables 的数量?我很困惑如何。详细的解释会很有帮助。
How to create multiple hash tables?
LSH 通过串联使用(放大的)散列函数创建散列-table:
g(p) = [h1(p), h2(p), · · · , hk (p)], hi ∈R 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映射。该桶内的点是潜在的(近似)最近邻.
局部敏感哈希 (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_query
和 B_base
的输出是 N
个长度为 k
的字符串,取 0/1 个值。
这种方式是否创建多个散列 tables 即 N
是散列 tables 的数量?我很困惑如何。详细的解释会很有帮助。
How to create multiple hash tables?
LSH 通过串联使用(放大的)散列函数创建散列-table:
g(p) = [h1(p), h2(p), · · · , hk (p)], hi ∈R 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映射。该桶内的点是潜在的(近似)最近邻.