LSH

来源:互联网 发布:手机电视投影软件 编辑:程序博客网 时间:2024/05/23 01:21

SimHash

  • 参考:http://blog.csdn.net/heiyeshuwu/article/details/44117473
  • 如下图,规定是多少位,对各个特征进行hash。将所有特征的进行累加。累加结果,若该位大于0则为1,小于0则为0。
    这里写图片描述
  • 可以基于海明距离还计算是否相似
  • 还有查询的问题。空间换时间,取前若干位作为index

MinHash

  • 参考:http://blog.csdn.net/sunlylorn/article/details/7835411
  • h(x): 把x映射成一个整数的哈希函数。
  • hmin(S):集合S中的元素经过h(x)哈希后,具有最小哈希值的元素。

  • 第一种:使用多个hash函数

    • 为了计算集合A、B具有最小哈希值的概率,我们可以选择一定数量的hash函数,比如K个

    • 然后用这K个hash函数分别对集合A、B求哈希值,对每个集合都得到K个最小值。比如Min(A)k={a1,a2,…,ak},Min(B)k={b1,b2,…,bk}。

    • 那么,集合A、B的相似度为|Min(A)k ∩ Min(B)k| / |Min(A)k ∪ Min(B)k|,及Min(A)k和Min(B)k中相同元素个数与总的元素个数的比例。

  • 第二种:使用单个hash函数

    • 第一种方法有一个很明显的缺陷,那就是计算复杂度高。使用单个hash函数是怎么解决这个问题的呢?请看:

    • 前面我们定义过 hmin(S)为集合S中具有最小哈希值的一个元素,那么我们也可以定义hmink(S)为集合S中具有最小哈希值的K个元素。

    • 这样一来,我们就只需要对每个集合求一次哈希,然后取最小的K个元素。计算两个集合A、B的相似度,就是集合A中最小的K个元素与集合B中最小的K个元素的交集个数与并集个数的比例。

0 0
原创粉丝点击