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


算法概述

本文中的Neighbour-Sensetive-Hashing(NSH)算法主要应用于处理kNN问题,通过将更多位的哈希码用来区分邻近的数据项,使得相邻数据项之间的汉明距离更远,所以当k值较小时,NSH相比于其他传统算法,拥有更高的精确度。

此时,此算法需要对各个数据项进行一种特殊的转变——NST,是的生成的哈希码满足以下3个性质:

1.    连续性;

2.    单调递增;

3.    两个数据项之间的汉明距离大于原始距离。

 

参数m的选取

为了达到上述目的,此算法提出了一个“多重枢纽变换”(Multi-Pivoted Transformation),即从所有数据项中,选取m个作为枢纽,计算每个点到这些枢纽的汉明距离,结果为一个m维向量,由这m个汉明距离组成。

显然,m越大,算法的准确度越高,但是运行时间越长;m越小,算法的运行时间越短,但是准确度越低。选取一个大小合适的参数m,对于这个算法有着巨大的意义。

作者提出的一个选择m的方法为,m = c * b。c为一个1~10之间的任意数,b为二进制哈希码的位数。作者提出,将c从1变化到10,分别求出m,并挑选一部分数据项作为测试项,分别测试不同m值时代码的效率,然后选择使代码效率最高的参数m。

 

可以改进的地方:

在作者的方法中,在任何情况下都需要进行10次评估,才能选出最合适的m,这相当于将代码执行了10次,大大降低算法的效率。

虽然作者通过选取部分数据项进行测试,减少了参加测试的数据项的数量,进而减少选取参数m的耗时,但这也有可能导致选取的m对于全体数据项而言,并不是最合适的参数。

 

m个枢纽点的选取

对于如何选取m个枢纽点,作者提出了三种方案:

1.    平均策略:在距离最远的点之间,每隔固定的距离选择一个枢纽点;

2.    随机策略:在所有数据项中,随机的选择m个枢纽点;

3.    k-means策略:调用k-means函数,将所有数据项分成m个点群,并选出相应的种子点。

作者对于以上三种方法的准确性进行了评估:

随机策略在稀疏图中的准确性很差,在密集图中的准确性相对于其他两者较差。其余两者的准确度十分接近,k-means策略略好一点。

 

可以改进的地方:

平均策略在时间复杂度方面相比于k-means策略拥有较为明显的优势,但是在准确性上稍有不如,可以加一个评价函数,在合适的情况下选取合适的策略,使得算法兼具这两者的优势。

 

不适用于K值较大时的情况

这个算法用哈希码中更多的位数来区分邻近的数据项,使得邻近数据项之间的距离更远、区分度更大,以此来提高k值较小时的查找精确度。

 

可以改进的地方:

在此算法中,用来区分距离较远的数据项的哈希码位数相应的变少,导致远端的数据项难以区分,似乎都在一起。因此,当k值较大时,这个算法就几乎没有可行性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值