我已经有了算法来产生局部敏感的哈希值,但是我应该如何利用它们来利用它们的特性(即类似的元素有近哈希值(汉明距离))?
在matlab代码中,我发现它们只是在要搜索的点的散列和数据库中的点的散列之间创建一个距离矩阵,以简化代码,同时引用所谓的Charikar方法以实现良好的实现搜索方法
我试图搜索它,但我不确定如何将我发现的任何方法(如多探针方法)应用于我的案例。如果你已经有哈希,这些技术似乎都不容易插入。有没有简单的示例代码?或任何建议?
这是我正在讨论的带有matlab代码的页面的链接: http://www.eecs.berkeley.edu/~kulis/klsh/klsh.htm
答案 0 :(得分:0)
基于:Search in locality sensitive hashing我会在阅读Similarity Estimation Techniques from Rounding Algorithms之后说出来:
这个问题有点宽泛,所以我只想在这里给出一个最小的(抽象)例子:
我们的数据集中有6个(= n
)个向量,每个向量都有d
个位。假设我们做2(= N
)随机排列。
让第一个随机排列开始!请记住,我们置换位,不是向量的顺序。在置换位之后,它们维持一个顺序,例如:
v1
v5
v0
v3
v2
v4
现在查询向量q
到了,但是(几乎)不太可能与我们的数据集中的向量相同(在置换之后),因此我们通过二进制搜索找不到它。
然而,我们将在两个向量之间结束。所以现在我们可以想象场景就像这样(例如q
位于v0和v3之间:
v1
v5
v0 <-- up pointer
<-- q lies here
v3 <-- down pointer
v2
v4
现在我们向上或向下移动指针,寻找与q
最多匹配的vi向量。我们说这是v0。
类似地,我们进行第二次排列,我们找到向量vi,比如说v4。我们现在比较第一个排列和v4的v0,看看哪一个最接近q
,即哪个位数最多等于q
。
但是,如果您正在寻求准备实施,则应在Software Recommendation中提问。我还会查看我链接的论文,看看作者是否公开了代码,或者是否愿意在联系后分享代码。