C2LSH没有用多个hash table,是怎么解决False Negative的?

来源:互联网 发布:珠海云图软件 编辑:程序博客网 时间:2024/04/27 15:17

LSH函数性质

在一个(r,cr,p1,p2)-sensitive LSH函数上,相距较近的点有更大的碰撞概率(且有概率下界p1),相距较远的点有较小的碰撞概率(有概率上界p2)。

这样,通过一个LSH就能过滤掉很多相距较远的点。但是会存在False Positive(FP),即有些相距较远的点也可能投影距离很近。

为减少FP,常会构造一个含有m个LSH函数复合哈希函数(Compound LSH function)G,同时一个复合哈希函数对应一个哈希表(hashing table)。哈希函数间进行AND操作,从而排除FP。但这样做的弊端是会出现False Negative(FN),一些相距较近的点会被错误的排除掉。

为解决这一问题,常构造L组这样的复合哈希函数,多个之间采用OR操作。即一个数据点只需要在一个复合哈希函数上成功碰撞即可被作为候选点。

还有问题:L个hash table中至少在一个hash table上发生碰撞的概率P=1(1Pc)L=1(1p(s)m)L

但C2LSH里只有一组复合哈希函数,没有多组,却也取得了精度上的概率保证,那么他有没有处理False Negative,怎么处理的?这是本帖关心的主要问题。

博主认为其原因在于C2LSH改变了候选点评估标准。

在原始LSH框架下,候选点的选取标准是“至少在一个复合哈希函数上发生碰撞”。那么什么叫“在一个复合哈希函数上发生碰撞”呢?就是指在该复合哈希函数中的“每一个哈希函数上都发生碰撞”。也就是说,假设一个复合哈希函数里共有m个哈希函数,某个点只在(m1)个函数上发生了碰撞,都不能被当做候选点。

C2LSH只采用一个复合哈希函数,但是它改变了候选点评价标准。不再要求候选点必须要在每一个哈希函数上都发生碰撞。而是所有数据点来统计在m个函数上发生碰撞的次数(即Count Collisions,这是C2的由来)。碰撞次数多的点认为其质量更高。通俗地讲,由于两个点发生碰撞的概率随两者之间距离的减小而提升,碰撞概率*哈希函数个数=碰撞次数。碰撞次数大是因为碰撞概率大,那就说明这个点更近。

换句话说,在C2LSH里,哪怕碰撞次数排在第一的点,只要其碰撞次数小于m,那么在原始机制里是不能被当做候选点的,而是成为FN。

改变了原来机制中的候选点评价机制,还能用原来的理论保证吗,容我再去看看再给出答案。

0 0