LSH最根本的目的是能高效处理海量高维数据的最近邻问题。在信息检索,数据挖掘以及推荐系统等应用中,我们经常会遇到的一个问题就是海量的高维数据查找最近邻。不同于我们在数据结构教材中对哈希算法的认识,哈希最开始是为了减少冲突方便快速增删改查,在这里LSH恰恰相反,它利用的正是哈希冲突加速检索,并且效果极其明显。
LSH(局部敏感哈希)函数使得2个相似度很高的数据以较高的概率映射成同一个hash值,而2个相似度很低的数据以极低的概率映射成同一个hash值。
定义 3: 给定一族哈希函数,是一个从欧式空间到哈希编码空间的映射。如果以下两个条件都满足,则称此哈希函数满足性。
- 如果,那么
- 如果,那么
其中,,表示两个具有多维属性的数据对象,为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)