“LSH 有一些巨大的优势。首先,它很简单。你只需计算数据库中所有点的哈希值,然后从中制作一个哈希表。要查询,只需计算查询点的哈希值,然后检索数据库中的所有点哈希表中的同一个 bin。”
参考另一个问题的答案,我正在寻找对 LSH 分析过程的澄清。假设我有稀疏的特征向量(二进制,大部分为 0)并且想使用余弦距离作为具有阈值 alpha 的度量,这可能会有所不同。
我的第一步是计算每个向量的哈希值。距离测量重要吗?(我想是的)。门槛重要吗?(我想没有)。如何找到合适的哈希函数?
如果编程,我将具有如下功能:
bytes[] getHash(Vector featureVec)
然后我会把结果放在
Map(long vectorId, bytes[] hashcode) <-vectorHashMap
然后我从哈希中制作哈希表(将哈希放入垃圾箱)。我想至少在这里阈值很重要。我怎样才能做到这一点?
如果编程,它会像:
Map,Map createHashTable(Map vectorHashMap, long threshold)
它返回两个地图:
Map of (hashCode, bucketId)
和Map of (bucketId, ListOfVectorIds)
。然后我可以轻松地检索以 vectorId 作为输入并以 vectorIds 列表作为输出的邻居。