locality sensitive hashing(LSH)局部敏感哈希
Posted liuxiangyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了locality sensitive hashing(LSH)局部敏感哈希相关的知识,希望对你有一定的参考价值。
参考:https://www.cnblogs.com/fengfenggirl/p/lsh.html
一、引入
LSH就是对高维空间的数据进行近邻搜索的一种算法。它的原则是:原来在高维空间中就很接近的点,如果能够设计一种hash函数,使得它们的哈希值很大概率是一样的,那么再给一个新的高维空间上的点,再用这个hash函数得到一个哈希值,则哈希值相同的点是有很大概率在原来的高维空间上是近似的。总之,LSH就是降维+查找匹配的算法。
二、Jaccard相似度
Jaccard相似度就是交集除以并集。用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。
比如说我们要比较人们的购物袋中,啤酒和奶粉的相似度,也就是说我们想要找到有多少人的购物袋里会同时出现啤酒和奶粉。那我们就去数一下同时存在啤酒奶粉的购物袋有几个,再数一下所有的购物袋,二者相除即可得到结果。、
Jaccard重点关注的是交集部分。
三、shingling
一篇文档可以看成是一个字符串,文档的k-shingle为在该文档中长度为k的所有子串。任意一篇文档都可以表示为k-shingles的集合,比如“A document is a string of characters”这句话的所有3-shingles为{ ”A d”, ”do”, ”doc”, ”ocu”, ”cum”, ”ume”, ”men”, ”ent”, . . . , ”ers” }。
如果k非常小,那么k个字符的序列会出现在大多数的文档中,如k=1,许多文档都有相同的字符,几乎所有的文档都有很高的相似性。如果k应该足够大,那么对于给定的shingle出现在不同的文档中的概率是非常低的。比如这两个单词“ document”和“monument”:
SIM( { d, o, c, u, m, e, n, t } , { m, o,n, u, m, e, n, t } ) = 6/8
SIM( { doc, ocu, cum, ume, men, ent } ,{mon, onu, num, ume, men, ent } ) = 3/9
可以看见,k为3时比k为1时的Jaccard相似度要低很多。
以上是关于locality sensitive hashing(LSH)局部敏感哈希的主要内容,如果未能解决你的问题,请参考以下文章
局部敏感哈希 Kernelized Locality-Sensitive Hashing Page
关于 LSH(Locality-sensitive hashing)和 minihash 实现的问题
局部敏感哈希(Locality-Sensitive Hashing, LSH)
局部敏感哈希(Locality-Sensitive Hashing, LSH)