参考另一个问题的答案,我正在寻找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作为输入的neigbors和一个vectorIds列表作为输出。
答案 0 :(得分:0)
哈希与距离测量无关。通过使用随机选择的向量点击向量,可以获得散列的每个位。该位表示散列矢量的随机矢量(真正的超平面)的哪一侧。这些位是哈希值。
是的,然后您通过哈希值索引矢量以便于检索。您不需要'桶ID' - 您的哈希就是您的桶。
这里唯一的问题是,所有最近的矢量都在它所散列的桶中并不是真的。他们只是倾向于靠近。如果它很重要,你可能不得不搜索“相似”的桶 - 只有几点不同的桶 - 来考虑更多的候选者并更好地找到真正最近的邻居。