局部敏感哈希 - 寻找 R 的概率和数值
感谢那些回答我之前问题的人,帮我走到了这一步。
我有一个大约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或者编程的,那个社区可能能提供更多帮助。