基于Hash算法的高维数据的最近邻检索
一.摘要
最紧邻检索:一种树基于树结构,一种是基于hash
a.随机投影算法,需要产生很多哈希表,才能提高性能。
b.基于学习的哈希算法在哈希编码较短时候性能不错,但是增加编码长度并不能显著提高性能。
随机投影:实际上就是随机的,实际上需要挖掘使用数据的内部结构,结合最大熵原理。
基于密度的哈希就是依据数据分布产生最合理的投影。
数据稀疏:稀疏编码+ 压缩感知
GIST1M数据集2.55G,这个是专门做最近邻检索的。
二.绪论
2.1 课题背景
最近邻检索的主要问题是如何建立高效索引。
数据集是n*d。
d = 1,先排序,然后二分查找,空间复杂度是o(n),时间复杂度是o(nlgn);各种平衡树也行。
d = 2时,用voronoi图(泰森多边形或者狄利克雷图),这个我刚开始看k-means得时候找到过,来自于GIS的技术。时空同上。
d>3时候找不到空间线性、时间对数的算法了。
d<20时,利用KD树(1975年提出)。
提出近似(最优解的宇普西龙邻域内的点都可以返回)的概念,这个理念的思想是许多情况下近似解和最优解差别不大。
k分类算法,近朱者赤、近墨者黑,判断一个点属于哪一类就看他周围的点多数属于哪一类。如果k太小,容易受噪声点影响,k太大,会因为很远的点包含进来而影响算法性能。
k-means算法的一个计算瓶颈是为每个数据点找最近类心。
2.2 算法基础
主流的哈希算法可以看做是降维,因此先介绍降维算法。
降维包括特征提取和特征选择。特征提取是选择某几维,比如研究基因对XXX的影响,就研究某几个基因就行了,感觉有点像物理实验中的控制变量法。
特征提取是构造了原有的特征,比如随机投影、PCA,LDA(线性判别(discriminant)分析)。这些降维算法都可以转换为哈希算法。
随机投影基于Johnson-Lindenstrauss定理。
笔者注:Johnson–Lindenstrauss 定理是我在今晚的一个学术报告里听说的一个非常令人惊讶的定理。简单说来,它的结论是这样的:一个一百万维空间里的随便一万个点,一定可以几乎被装进一个几十维的子空间里!
严格说来是这样:在 M 维空间中的 N 个点,几乎总是被包含在一个 D 维子空间里的。这里的 D 按照直觉应当等于 N 的阶,可是实际上我们只需要让 D 是 log(N) 的阶就可以了。这里「几乎被包含在」的确切含义是它在这个子空间上的投影几乎是等距的(允许有一个 ε 的误差,而常数 D/log(N) 就依赖于 ε)。很显然,这件事情在高维数据降维时有极重要的意义。
这个定理的证明很初等。它依赖于这样的一个基本概率事实:一个随机的 M 维单位向量到一个随机的 D 维子空间上的投影的长度几乎一定约等于 D/M。这件事情本身也有点不同寻常,虽然它可以通过简单的计算来证实。这是概率论计算中常常出现的由于高维度而导致的反直觉现象的一例。
这让我想起另一个高维度导致的悖论,是我在学大数定律时了解到的。在 M 维单位立方体中随机取一个点,当 M 充分大时根据大数定理容易算出这个点到立方体中心的距离几乎一定等于 √(M/3)/2。于是这就说明 M 维实心单位立方体几乎就完全位于一个半径为 √(M/3)/2 的球壳上。这里没有任何捣鬼之处,事实上就是如此。
http://imaginary.farmostwood.net/573.html
PCA如果映射为一个点的话,那么丢失休息,所以,映射后的数据要方差最大,保证数据比较离散,尽可能地保留多的信息。
LDA是有监督的线性降维方法,和PCA不同,他要求尽可能使数据被容易区分,即同一类数据点尽可能拷进,不同类的尽可能分散。
还有就是保留局部投影,这就是谱方法。
三.相关工作
在实际应用中,我们往往不一定需要用到真实的最近邻,许多时候我们都只需要在很短的时间内得到近似的最近邻即可,这也给了研究学者一个新的研究的方向。
超平面分割的哈希随着编码长度的增加性能并不能显著增加。
迭代量化哈希能提升二值哈希的均衡性,从而提升性能。
谱哈希挖掘数据的内部结构。
球哈希能显著增加准确度。
四.密度哈希算法
先用k-means算法对数据分组,不过大量数据下k-means运行时间很长,所以需要让算法P次后停止迭代(P=5)。假设产生了k个组,那么就以每个组内的中心点作为投影向量。
www.zjucadcg.cn/dengcai/Data/DSH.html
www.zjucadcg.cn/dengcai/Data/NNSData.html
www.zjucadcg.cn/dengcai/Data/DimensionReduction.html
五.基于压缩感知的哈希算法
据Jonson Lindenstrauss定理为了使一个含有个点的数据点集在投影到低维空间后依然很好地保持着点对距离,我们必须构建大约O(ln n/ε^2)个随机投影向量,其中ε(Epsilon)参数是距离估计的相对误差。
在这一章,针对前面所提到的目前主流哈希算法所存在的问题,我们将提出一个新的哈希算法:基于压缩感知的哈希算法(这个算法结合了稀疏编码技术和压缩感知理论。这个算法的主要思想是基于压缩感知理论中的一个重要的性质受限等距性质。这个性质强调了对于任意一个稀疏的向量,随机投影保持这些高维稀疏向量之间的欧氏距离的概率都是非常大的。
根据J-L定理,我们可以想到的最直接的方法就是把高维数据投影到低维空间,然后用一些高效的能在低维空间快速检索最近邻的方法(如kd-tree树)来处理查询。这个方法的主要问题在于为了使得每个点的最近邻都能以很大的概率在检索的过程中被返回,需要K这么大才可以,显然这是不能令人满意的。
基于Hash算法的高维数据的最近邻检索的更多相关文章
- Memcached Hash算法
本文来自网易云社区 作者:吕宗胜 Hash算法 1. Memcached Hash介绍 我们在前面的文章中已经介绍过了Memcached的内存管理方式,LRU的策略.由于Memcached的数据存储方 ...
- memcache的一致性hash算法使用
一.概述 1.我们的memcache客户端(这里我看的spymemcache的源码),使用了一致性hash算法ketama进行数据存储节点的选择.与常规的hash算法思路不同,只是对我们要存储数据的k ...
- 一致性hash算法在memcached中的使用
一.概述 1.我们的memcacheclient(这里我看的spymemcache的源代码).使用了一致性hash算法ketama进行数据存储节点的选择.与常规的hash算法思路不同.仅仅是对我们要存 ...
- 海量数据挖掘MMDS week2: 频繁项集挖掘 Apriori算法的改进:基于hash的方法
http://blog.csdn.net/pipisorry/article/details/48901217 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 高维数据的高速近期邻算法FLANN
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jinxueliu31/article/details/37768995 高维数据的高速近期邻算法FL ...
- 逐步实现hash算法(基于BKDRhash函数)
哈希(Hash)算法,即散列函数.它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程.同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出.hash算法 ...
- 负载均衡算法: 简单轮询算法, 平滑加权轮询, 一致性hash算法, 随机轮询, 加权随机轮询, 最小活跃数算法(基于dubbo) java代码实现
直接上干活 /** * @version 1.0.0 * @@menu <p> * @date 2020/11/17 16:28 */ public class LoadBlance { ...
- 大数据 --> 一致性Hash算法
一致性Hash算法 一致性Hash算法(Consistent Hash)
- 一致性hash算法简介与代码实现
一.简介: 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1.平衡性(Balance) 2.单调性(Monotonicity) 3.分散性(Spread) 4.负 ...
随机推荐
- iOS数据持久化-SQLite数据库使用详解
使用SQLite数据库 创建数据库 创建数据库过程需要3个步骤: 1.使用sqlite3_open函数打开数据库: 2.使用sqlite3_exec函数执行Create Table语句,创建数据库表: ...
- iOS数据持久化(二)SQLite
一.什么是SQLite SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,处理速度快,非常适合用于移动端开发. 二.使用 创建DataBaseHandle.h & DataB ...
- [Bootstrap]组件(二)
按钮组 .btn-group>.btn : 一组.btn按钮包裹在.btn-group 外包元素.btn-group {position/display/} 按钮元素.btn <div ...
- 4月12日学习笔记——jQuery操作属性和样式
区分 DOM 属性和元素属性 <img src="images/image.1.jpg" id="hibiscus" alt="Hibiscus ...
- 6个超炫酷的HTML5电子书翻页动画
相信大家一定遇到过一些电子书网站,我们可以通过像看书一样翻页来浏览电子书的内容.今天我们要分享的HTML5应用跟电子书翻页有关,我们精选出来的6个电子书翻页动画都非常炫酷,而且都提供源码下载,有需要的 ...
- (转载)浅谈我对DDD领域驱动设计的理解
原文地址:http://www.cnblogs.com/netfocus/p/5548025.html 从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来 ...
- jQuery 简单漂亮的 Nav 导航菜单
自己写的一个简单的导航菜单,先看效果: 鼠标悬浮时菜单项向上移动成蓝底白字,点击之后底部会有蓝条表示当前选中项. 页面代码,菜单的每一项都是一个 div ,其中包括一个 ul 用来放置显示文字等,另一 ...
- Template_5模板拾遗1
1,typename和class模板参数作为类的时候只能用classtemplate<typename T, template<typename ELEM> class CONT = ...
- OC 内存管理机制总结
OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创 ...
- sql简易的MRP资源分析
写了个简易的MRP根据传进来的数据,进行上下级的判断,父表,子表 构思: 3张变量表,第一张用来存传进来的成品,这边对表做了循环就是成品是一样一样进去的,取成品表的第一行,将数据做父表和子表关联,取出 ...