局部敏感哈希 - 寻找 R 的概率和数值

6 投票
2 回答
4603 浏览
提问于 2025-04-16 01:24

感谢那些回答我之前问题的人,帮我走到了这一步。

我有一个大约25,000个向量的表格,每个向量有48个维度,数值范围从0到255。

我正在尝试开发一个局部敏感哈希(局部敏感哈希)算法,用来寻找最近邻或最接近的邻居点。

我现在的LSH函数是这样的:

def lsh(vector, r = 1.0, a = None, b = None):
    if not a:
        a = [normalvariate(10, 4) for i in range(48)]
    if not b:
        b = uniform(0, r)
    hashVal = floor((sum([a[i]*vector[i] for i in range(48)]) + b)/r)
    return int(hashVal)

我目前有以下几个问题:

A: 在我的代码中“normalvariate(10, 4)”的部分有没有最佳值?这是Python内置的random.normalvariate(random.normalvariate)函数,我用它来生成“从稳定分布中独立选择的d维向量”。根据我的实验,似乎这些值并没有太大影响。

B: 在维基百科文章的开头提到:

如果d(p,q) <= R,那么h(p) = h(q)的概率至少为P1

如果d(p,q) >= cR,那么h(p) = h(q)的概率至多为P2

这里提到的R值是否也指的是在稳定分布部分提到的R值?(稳定分布

C: 和我之前的问题(B)相关。我发现,在我的哈希函数中使用更高的R值会将我的向量映射到更小范围的哈希值。有没有办法优化我的R值?

D: 大约需要使用多少个表?

2 个回答

2

对感兴趣的人来说,我找到了一份文档(http://web.mit.edu/andoni/www/papers/cSquared.pdf),里面详细讲解了如何在高维空间中使用LSH,虽然内容有点复杂。

2

你可以看看“MetaOptimize”这个网站——就像是机器学习版的Stack Overflow。
http://metaoptimize.com/qa

你的问题其实不是关于Python或者编程的,那个社区可能能提供更多帮助。

撰写回答