哈希快速检索之三种海明空间中的检索方法
来源:互联网 发布:mac最新远程windows 编辑:程序博客网 时间:2024/06/08 06:01
哈希检索简介:
近年来,哈希检索算法领域有闷声大规模填坑的迹象,2012-2015年间有一大堆论文在国际机器学习顶级会议期刊上发表。详见哈希算法综述:“Hashing for Similarity Search:A Survey”。
哈希检索的主要思想是把向量表示的数据投影到海明空间,在海明空间中进行K近邻(k
本文主要介绍哈希投影之后如何在海明空间检索K近邻。通常哈希检索的论文都侧重于如何构造或训练(学习)投影函数,对投影后的检索描述甚少。很多情况下,只用海明距离进行计算是不够的,因为根据海明距离得到的数据数量不大可能恰好是等于K的。那么在海明空间中到底该如何检索呢?
总体的思路很直观:利用海明距离得到一组候选集(如海明距离
方法一:按海明距离排序
用哈希算法进行检索主要就是利用了海明空间离散的特点。在海明空间中可以用机器指令或查表来计算距离(减法),相比于欧氏距离计算其速度相当快,有几十甚至上百倍的差距。所以在海明空间进行检索,可以先计算query和database的海明距离,然后进行排序。注意到这里不同距离数量是很有限的,如32 位编码中最多有33种(0-32)不同的距离。计算完海明距离之后可以有两种不同的处理方法:
做法一:对海明距离为0的检索结果用原始数据计算欧式距离,如果距离为0的数据数量小于K,先把距离为0的数据加入返回结果或候选集,再看距离为1的数据,以此类推;
做法二:找到d,使得海明距离
这种方法的缺点是计算量会比较大,但是实现简单。
方法二:哈希表
哈希表,英文名称Hash Table。如果海明空间的维数为b,则构建一个包含
优点:找到与 query编码距离较近的海明编码后可以直接取出对应的数据,不需要计算每一个数据与query之间的海明距离。
哈希表结构示意图:
方法三:Multi-Index Hashing
Multi-Index Hashing算法的思路很直观:把海明空间b维投影分成m段,也就是m个哈希表,每段包含
Mohammad的论文中把时间复杂度降低到次线性。主要思路是:如果两个数据对应的二进制编码h和g最多只有r位不同,那么他们的m段编码中至少有一段编码的不同位的个数是小于等于
有了海明距离小于等于r的数据集,剩下的检索步骤就和上面两种方法类似了,即用原始数据计算欧氏距离。
借用论文中的一个实验结果图展示一下Multi-index Hashing和线性计算海明距离的时间比较:
- 哈希快速检索之三种海明空间中的检索方法
- 快速检索的方法删除顺序表中的元素
- 海量空间数据的快速检索架构
- 快速检索(一)之自定义快速检索QiuckIndexBar控件
- 检索方法
- Android自定义控件之实现快速检索
- 哈希检索
- 哈希检索
- 信息检索之布尔检索
- 检索
- 检索
- 检索
- 检索
- 检索
- 空间范围内检索方案
- 目录快速检索
- Redis命令快速检索
- 联系人快速检索实现
- OpenCV Mat 结构
- 技巧
- C#中的Json解析
- android service总结
- win7+64位+vs2010+opencv2.4.9配置问题
- 哈希快速检索之三种海明空间中的检索方法
- 网络协议学习笔记-数据链路层-MTU、路径MTU和串行线路吞吐量计算
- 20151201 ocp 卷3 1-30
- ElasticSearch学习3_elasticsearch集群管理工具head插件
- dom4j解析和生成XML文件
- PAT 1094. The Largest Generation (25)
- 如何利用QT设计师设计的ui生成相应头文件
- IOS的一些手势方法(手势的tag值 绝对值 偏移量 中心点 等等)
- 将tomcat注册为windows服务