局部敏感哈希Locality Sensitive Hashing, LSH()

匿名 (未验证) 提交于 2019-12-02 22:56:40

LSH最根本的目的是能高效处理海量高维数据最近邻问题。在信息检索,数据挖掘以及推荐系统等应用中,我们经常会遇到的一个问题就是海量的高维数据查找最近邻。不同于我们在数据结构教材中对哈希算法的认识,哈希最开始是为了减少冲突方便快速增删改查,在这里LSH恰恰相反,它利用的正是哈希冲突加速检索,并且效果极其明显。
LSH(局部敏感哈希)函数使得2个相似度很高的数据以较高的概率映射成同一个hash值,而2个相似度很低的数据以极低的概率映射成同一个hash值。

定义 3: 给定一族哈希函数HH是一个从欧式空间S到哈希编码空间U的映射。如果以下两个条件都满足,则称此哈希函数满足(r1,r2,p1,p2)性。

  • 如果d(O1,O2)<r1,那么Pr[h(O1)=h(O2)]p1
  • 如果d(O1,O2)>r2,那么Pr[h(O1)=h(O2)]p2

其中,O1,O2S,表示两个具有多维属性的数据对象,d(O1,O2)为2个对象的相异程度,也就是1 - 相似度。其实上面的这两个条件说得直白一点,就是当足够相似时,映射为同一hash值的概率足够大;而足够不相似时,映射为同一hash值的概率足够小。

使用
lshash

pip install lshash
from lshash import LSHash lsh = LSHash(hash_size, input_dim, num_of_hashtables=1, storage=None, matrices_filename=None, overwrite=False) 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!