Locality-Sensitive Hashing (LSH)

在处理多媒体数据时,我们经常遇到高维数据,动则几十维上百维。如何快速索引和查找这些高维数据呢?LSH是一个不错的选择。

LSH基于的想法是比较简单的:如果两个点距离比较近,那么经过投影生成的两个点的距离会以较高的概率比较接近。这里我们设v是查询的点,x是投影向量(从高斯分布中随机采样而来),b为随机向量,w为量化步长,h为哈希的结果,我们有以下公式:

h = floor((x . v + b) / w)

以上公式可用的前提是需要满足如下条件:

P[h(p) = h(q)]  ≥ P1 如果 ||p− q|| ≤ R1
P [h(p) = h(q)] ≤ P2 如果 ||p− q||  ≥ cR1 (c > 1)

意思就是说两个点距离越近,落在同一个哈希桶的概率就越大,反之距离越大,落在同一个桶的概率就越小,这里P1 > P2。

通过采用k(k > 1)个投影我们可以扩大 两者概率的比值,(P1/P2)^k > (P1/P2)。通过k次投影,我们就为输入的数据得到了一个k维的哈希坐标。

k维的坐标查找起来同样不方便,所以我们需要对它再做一次投影。投影的方法和之前的投影区别不大,只不过b和w要做相应的调整。

做完之后我们就得到了一个最终的哈希值H,大写它是因为它得来的很辛苦哈。我们在索引的过程中实际上就可以用H作为键值,原始数据的ID作为值存在哈希表中。在实际工程中为了做进一步的校验,我们往往生成两个H,有一个做键值,有一个留作校验。

至于这些乱七八糟的参数怎么选择我就不做介绍了,有兴趣的可以去看看相关的资料。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值