写在前面的话
今天的这一章有几个目的,一是回答一下各位网友在各大博客上提出的问题,然后其他博主没有回答的问题。二是纠正一些别人在写局部敏感哈希时候出现的错误。就是这么贴心有没有。
假装自己是正文的正文
首先我们来看一下这篇文章局部敏感哈希LSH(Locality Sensitive Hashing)
https://blog.csdn.net/yc461515457/article/details/48845775
我觉得博主在这两篇文章里面的描述可能是有问题。
这两个图片要说的其实不是这个问题把,正版的PPT在这里http://i.stanford.edu/~ullman/cs246slides/LSH-1.pdf
这两个图都是针对我们在用Minhash 得到了我们特征矩阵之后然后 把特征矩阵划分成了 b 个bands 每个band 包含了r 行的情况来说明的。 具体的说明已经在我上一篇文章中,非常详细的说明了。
为什么这个图片是一条过原点的直线,我们可以这么看。首先纵坐标是每一个band 落到桶里的概率也就是,这个概率就是两个样本的相似度,也就是S。 而横坐标就是两个样本的相似度,也是s . 所以,当你只有一个band 并且这个band 只有一行的时候,那么就是一条直线。这个其实很好理解。但是如果你有一个band ,这个band 有r行,两个样本相似的概率是s,那么每一行相似的概率就是s, 一个band 相同的概率就是 .
注意一个band 相同概率也就是指,这个band 的hash 值被映射到一个桶里的概率。
我们再来看另外一个图
这个图描述的应该就是有b个band 每个band 里面有r 行的情况
表示的两列被映射到同一个bucket 的情况,或者说是两个band 相同的情况。如果这两个band 不相同,其实很难被映射到同一个bucket 里面,这个已经在前一节里面做了很详细的分析。
因为一个band 有r 行,每一行都相同才能保证我们的 band 相同
所以这个概率就是
那么band 不相同的概率,或者说更加准确的就是一个band 里面不是每一行都相同的概率就是
这个公式表示的就是band 不相同的概率
那么每一个band 都不相同的概率就是
然后我觉得高中的学霸或者说你高中数学基础扎实一点都知道 每一个都不相同的概率就是至少有一个相同
why?
我记得我高中的时候特别喜欢那种列表去看问题
上面那个图表示是总共有5个band对,0对相同的概率,1对相同的概率,2对相同的概率,……以及5 对相同的概率
因为这几个事件是相对独立的,每个事件相加的概率是1.所以没有相同的对出现的反面就是至少有一对。
在这篇博客里
http://www.cnblogs.com/maybe2030/p/4953039.html
当然不是,我们说以两列Boolean 矩阵来说,我们的Jaccard Similarity 只有下面四种情况:
a 类 表示的就是 两个样本都有的属性 的个数
b 类 表示的就是 第一个样本有的属性,第二个样本没有的属性 的个数
c 类 表示的就是 第二个样本有的属性,第一个样本没有的属性 的个数
d 类 表示的就是 两个样本都没有的属性 的个数
既然我们Jaccard Similarity 表示的是交集除以并集
这个时候我们不会考虑d类,为啥,因为他们两个都没有这个属性,这个属性根本不存在他们的并集还是交集中。所以我们的两列的 sim = a/(a+b+c)
而且这个也可以解释,签名的相似和列的相似性其实是一样的,因为是从两列中开头第一次出现1的最小行号,当且仅当两列都是1时,他们的minhash 才会相等,也就是签名矩阵产生的特征值才会相等。
我觉得其他人写的也挺好的