【问题标题】:Why k and l for LSH used for approximate nearest neighbours?为什么 LSH 的 k 和 l 用于近似最近邻?
【发布时间】:2015-06-08 14:33:06
【问题描述】:

在所有 Locality Sensitive Hashing 解释中(即http://en.wikipedia.org/wiki/Locality-sensitive_hashing#LSH_algorithm_for_nearest_neighbor_search

他们描述了生成了 k 个哈希函数,但在哈希表中只使用了 l (l

为什么要生成 k 而不仅仅是生成 l?

为什么要分开因子 k 和 l?

我不明白。

【问题讨论】:

    标签: algorithm hash knn locality-sensitive-hash approximate-nn-searching


    【解决方案1】:

    实际上使用了所有散列函数。如果您记得,例如,在“汉明距离的位采样”部分中,单个散列函数可能只返回一个位,这将更有意义。事实上,LSH 散列函数的另一个例子是在某个 d 维位置考虑一个随机选择的平面,并根据被散列的点在平面的哪一侧返回 0 或 1。

    要处理单个表,因为散列函数可能只返回一个位,所以您评估 k 个散列函数并将结果连接起来,给您一个可能是 k 位的密钥。现在有了 l 个表,你需要 l 个不同的键,所以实际上你总共需要 l*k 个哈希函数。

    检查:查看成功概率。在查找单个表时,单个哈希函数为查询和概率 P1 的近邻返回相同的值。要在单个表中找到近邻,您必须使所有散列函数起作用,因此概率为 P1^k,并且单个查找失败的概率为 1 - P1^k。但是你尝试这个 l 次,所以所有查找失败的概率是 (1-P1^k)^l,成功概率是 1-(1-P1^k)^l,这正是他们计算的结果。

    【讨论】:

    • 好的,感谢您的精彩回答!概括一下:我们的 LSH 系列 L 中有 k * l 个不同的哈希函数。我们创建了一个新系列 G,它由 l 个新函数组成,每个新函数都使用 L 中 k 个函数的串联。所以函数 g 看起来像以下:g_1 = [l_1, ..., l_k], g_2 = [l_{k+1}, l_{2*k}], g_3 = [l_{2*k + 1}, l_{3*k }] 等等?现在,当我想要 ANN 查询时,我会在所有表中查找冲突。如果发生碰撞,我发现的另一个项目是概率 p1 的近邻。如果没有碰撞呢?
    • 我计算出的概率是找到任何特定近邻的概率,假设您检查从哈希表中检索到的每个值 - 他们谈论桶,所以我假设可能有更多比在桶中找到的一个值,其中一些不在邻居附近。我完全没有计算您可能检索到的不靠近邻居的事物的数量,尽管这篇文章确实有一个 P2 似乎与此相关。如果没有碰撞,如果有近邻,那么你就处于我计算出的概率的不幸端。
    猜你喜欢
    • 2011-12-06
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2014-04-12
    • 2021-12-26
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多