基于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.负 ...
随机推荐
- iframe滚动条的一些方法
用iframe布局,会碰到浏览器右边出现2个滚动条,简单代码解决用iframe布局,会碰到浏览器右边出现2个滚动条, 简单代码解决,用下面的代码可以把浏览器本身的滚动条去掉,只留页面产生的滚动条: b ...
- 项目经理PPT演讲意见
1.语速 2.互动 3.平常语气,聊天的感觉去讲解 4.脱稿演讲,不要照着PPT读,PPT展示仅仅是一个重点提示,更多在于自己讲解 5.如果是验收等相关的内容,劲量多讲解用户能够得到的利益,如“钱” ...
- 整理一下前段时间在写iOS app时所涉及的东西
在刚学习和做完一个android app后,看了两周的Objective-C就开始做这个项目,所以整个app代码有很多现学现用的东西,今天来总结一下. 这个名为VID的app是用于公司产品的研发与de ...
- 《锋利的jQuery》心得笔记--Three Sections
第六章 1. JavaScript的Ajax的实现步骤: 1) 定义一个函数用来异步获取信息 function Ajax(){ } 2) 声明: var xmlH ...
- 项目中Service层的写法
截取自项目中的一个service实现类,记录一下: base类 package com.bupt.auth.service.base; import javax.annotation.Resource ...
- 洛谷 P3399 丝绸之路
题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...
- functional javascript
(转载请注明出处!) 今早带我的master跟我分享了他最近看<functional javascript>一书的感悟,瞬间觉得写1w行代码都不如看本好书来的好啊! 于是在下午的写的项目中 ...
- java基础-浅复制与深复制的理解
浅复制与深复制在很多编程语言中都有出现,那么什么是浅复制,什么是深复制呢? 要区分浅复制与深复制,首先我们要明确什么是复制,怎样才算是复制.复制的例子在生活中也随处可见,如复印一份文档,复制一段文字等 ...
- 《RPM源码包的制作》RHEL6
一下rpm包的创建不含编译部分: 首先写个脚本,这个脚本是你想干的事..useradd.sh是我写的脚本,批量添加20个用户.我们创建一个目录,将脚本放进去: 将此目录压缩: 我们将校验的key导出: ...
- 主引导记录MBR
作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)版权声明:本文的版权归作者与博客园共同所有.转载时请在明显地方注明本文的详细链接,未经作者同意请不要删 ...