论文《Neighbor-Sensitive Hashing》读后感(一)

本文介绍了邻居敏感哈希(NSH)算法,用于近似KNN查询,尤其适用于k值较小的情况。NSH通过特殊转换函数增加了邻近数据项的汉明距离,提高算法准确性和时间效率。实验表明,NSH在搜索精度和速度上优于传统方法,如LSH和SH,尤其在信息检索和大规模数据集上表现突出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KNN问题

近似的KNN(k近邻)使用二进制散列函数技术,是克服执行精确的KNN查询的高昂成本的最常用的方法之一。本文引进了邻居敏感哈希,通过使用哈希码中更多的二进制位来区分邻近数据项,在k的值较小的情况下,大大提高了算法的准确性和时间效率。

主要思想

作者认为,“在汉明空间内增加类似的产品之间的距离”,这种看似违反直觉的想法是远远更有效地解决k近邻问题。因为在大多数的情况下,KNN问题中的参数k都不会有太大的取值,因此NSH算法适用于k值较小的情况,即可适用于绝大多数情况。

本算法提出了一个特殊的转换函数——NST,它满足以下的三个性质:

1. 连续性;

2. 单调递增;

3. 它使得邻近数据项之间的距离变大。

本算法通过这样的转换函数,得到一系列特殊的哈希码。在这些哈希码中,更多的二进制位被用来区分邻近的数据项,而选择性的忽视了远端数据项的差异。

通过这样的方法,可以显著优化当K值较小时的算法准确度。

本算法中的哈希码和其他算法的区别,具体如下图所示:

前人提出的方法的目标是要分配哈希码,使得每对数据项之间的汉明距离尽可能接近其原始距离的线性函数。本文的方法改变了这种形式,就像上图(C)中的实线所示;当一对数据项之间的原始距离小,我们设定一个较大的斜率,并让曲线在超过某一点时趋于平稳。这意味着在NSH技术分离别的k近邻项目的概率较高。

 

基本算法的描述

NSH的首要目标是生成合适的NST转换函数。

首先,如果我们考虑一个数据项V作为一个m维列向量d,每一位哈希码按以下方式确定:

其中f是用多重枢纽变换函数,Wi是一个m维矢量,和Ci是一个标量值。

上述方程5保证了每一位哈希码都等可能的取值为1或-1;

方程6保证了某个哈希码中的不同位,和不同哈希码中的每一位,取值都相互独立,互不影响。

我们的主要目的是要找到合适的Wi和Ci,能满足方程式5和6。为了找到这些值的相应值,NSH执行下列步骤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值