LSH

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个元素的交集个数与并集个数的比例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值