KNN问题
近似的KNN(k近邻)使用二进制散列函数技术,是克服执行精确的KNN查询的高昂成本的最常用的方法之一。本文引进了邻居敏感哈希,通过使用哈希码中更多的二进制位来区分邻近数据项,在k的值较小的情况下,大大提高了算法的准确性和时间效率。
主要思想
作者认为,“在汉明空间内增加类似的产品之间的距离”,这种看似违反直觉的想法是远远更有效地解决k近邻问题。因为在大多数的情况下,KNN问题中的参数k都不会有太大的取值,因此NSH算法适用于k值较小的情况,即可适用于绝大多数情况。
本算法提出了一个特殊的转换函数——NST,它满足以下的三个性质:
1. 连续性;
2. 单调递增;
3. 它使得邻近数据项之间的距离变大。
本算法通过这样的转换函数,得到一系列特殊的哈希码。在这些哈希码中,更多的二进制位被用来区分邻近的数据项,而选择性的忽视了远端数据项的差异。
通过这样的方法,可以显著优化当K值较小时的算法准确度。
本算法中的哈希码和其他算法的区别,具体如下图所示:
前人提出的方法的目标是要分配哈希码,使得每对数据项之间的汉明距离尽可能接近其原始距离的线性函数。本文的方法改变了这种形式,就像上图(C)中的实线所示;当一对数据项之间的原始距离小,我们设定一个较大的斜率,并让曲线在超过某一点时趋于平稳。这意味着在NSH技术分离别的k近邻项目的概率较高。
基本算法的描述
NSH的首要目标是生成合适的NST转换函数。
首先,如果我们考虑一个数据项V作为一个m维列向量d