根据github:lsh families中的存储库,我发现Location Sensitive Hash
支持EuclideanHash
CosineHash
和其他一些哈希。无论如何,CosineHash
很容易理解:
double result = vector.dot(randomProjection);
return result > 0 ? 1 : 0;
但是EuclideanHash
很难理解:
double hashValue = (vector.dot(randomProjection)+offset)/Double.valueOf(w); // offset = rand.nextInt(w)
return (int) Math.round(hashValue);
答案 0 :(得分:0)
通常,lsh中的欧几里德散列表示将欧几里德空间中附近位置的数据(向量)映射到整数的散列函数。
实现此目的的一种方法是生成随机线,并将线分成段,其中段表示哈希值。然后,可以通过将数据向量投影到该行并观察它落入哪个段来获得散列。
你问的功能似乎是使用类似的方法,但使用点积而不是投影