Hash LSH中的存储桶数

Hash LSH中的存储桶数,hash,document,nearest-neighbor,locality-sensitive-hash,bigdata,Hash,Document,Nearest Neighbor,Locality Sensitive Hash,Bigdata,在LSH中,您可以将其放入桶中。这个想法是,这些落入同一个桶中的文档可能是相似的,因此可能是最近的邻居 对于40000个文档,存储桶的数量(基本上)是多少 我现在有:number\u of_bucket=40000/4,但我觉得可以减少更多 有什么想法吗 相对:一个常见的起点是为n文档使用sqrt(n)存储桶。您可以尝试将其加倍或减半,然后运行一些分析,看看您得到了什么类型的文档分发。当然,也可以尝试使用任何其他指数,甚至K*log(n)如果您预期不同集群的数量增长“缓慢” 我不认为这是一门精

在LSH中,您可以将其放入桶中。这个想法是,这些落入同一个桶中的文档可能是相似的,因此可能是最近的邻居

对于40000个文档,存储桶的数量(基本上)是多少

我现在有:
number\u of_bucket=40000/4
,但我觉得可以减少更多

有什么想法吗



相对:

一个常见的起点是为
n
文档使用
sqrt(n)
存储桶。您可以尝试将其加倍或减半,然后运行一些分析,看看您得到了什么类型的文档分发。当然,也可以尝试使用任何其他指数,甚至
K*log(n)
如果您预期不同集群的数量增长“缓慢”


我不认为这是一门精确的科学,它的主题与选择最佳的
k
相似。

我认为它至少应该是
n
。如果小于该值,比如说
n/2
,则确保对于所有带区,由于冲突,每个文档平均至少有一个可能的相似文档。因此,在计算相似性时,您的复杂性至少为O(n)


另一方面,您将必须至少通过桶K次,因此这就是O(K*B),作为您的桶。我认为后者更快,因为它只是在您的数据结构(即某种字典)上迭代,并计算散列到每个存储桶的文档数。

您在前面的问题中实际散列了哪些内容还不清楚:“文档作为列,单词作为行[…]每个条带都对其列进行散列,因此一列落在一个桶中。如果两列落在同一个桶中,对于>=1条带,则它们可能是相似的”。无论如何,一个常见的起点是为
n
文档使用
sqrt(n)
存储桶。您可以尝试将其加倍或减半,然后运行一些分析,看看您得到了什么类型的文档分发。