基于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这么大才可以,显然这是不能令人满意的。

时间: 2024-09-20 11:46:16

基于Hash算法的高维数据的最近邻检索的相关文章

海量文档查同或聚类问题 -- Locality Sensitive Hash 算法

考虑一下这个场景 , 使用网络爬虫高速爬取大量的网页内容 , 如果想把这些网页进行实时聚类 , 并从中提取每个网页聚类的主题 . 我们应该怎么样去做 对于普通或常见的聚类算法 , 比如 K-means, 或 Hierarchical 聚类 , 无法适用于这个常见 , 对于这些聚类算法无法进行 incremental 聚类 , 即在聚类开始前必须知道整个数据集 , 而这个场景中的数据集是随着爬虫不断增多的 . 而且这些聚类算法的 performance 不够高 , 比如对于 K-means 需要不

基于Hash的查找算法实现

package da; public class MyMap< K, V> { private int size;// 当前容量 private static int INIT_CAPACITY = 16;// 默认容量 private Entry< K, V>[] container;// 实际存储数据的数组对象 private static float LOAD_FACTOR = 0.75f;// 装载因子 private int max;// 能存的最大的数=capacity

wsn 数据收集-wsn中基于移动SINK的高效数据收集算法

问题描述 wsn中基于移动SINK的高效数据收集算法 哪位大神可以帮帮忙CSDN移动问答 其中最短路径用佛洛依德算法实现最好

基于一致性hash算法 C++语言的实现详解_C 语言

    一致性hash算法实现有两个关键问题需要解决,一个是用于结点存储和查找的数据结构的选择,另一个是结点hash算法的选择.     首先来谈一下一致性hash算法中用于存储结点的数据结构.通过了解一致性hash的原理,我们知道结点可以想象为是存储在一个环形的数据结构上(如下图),结点A.B.C.D按hash值在环形分布上是有序的,也就是说结点可以按hash值存储在一个有序的队列里.如下图所示,当一个hash值为-2^20的请求点P查找路由结点时,一致性hash算法会按hash值的顺时针方向

基于一致性hash算法(consistent hashing)的使用详解_Mysql

1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache : hash(object)%N 一切都运行正常,再考虑如下的两种情况: 1 一个 cache 服务器 m down 掉了(在实际应用中必须要考虑这种情况),这样所有映射到 cache m 的对象都会失效,怎么办,需要把 cache m 从 c

Hash算法,及HashMap使用

为什么要Hash? 哈希表是基于数组实现的,哈希算法就是如何将键值(key)转换成数组小标的方法,哈希化可以提供非常高的操作(插入.删除.查询)效率,因为对有序数组的查询,即使是二分查找也只能做到O(logN),因为哈希可以直接将要查询的key转化为数组小标,所以可以达到O(1)的时间级. Hash算法:将key做hash后的值叫hashcode,hashcode的值范围可能很大,Hash算法是将一个较大范围的hashcode转换为定长的区间的数值.一个好的hash算法应该使hashcode均匀

基于hash计算的多层实验流量切分的实现

1. 背景介绍 站点新功能或者是站内新策略开发完毕之后,在全流量上线之前要评估新功能或者新策略的优劣,常用的评估方法是A-B测试,做法是在全量中抽样出两份小流量,分别走新策略分支和旧策略分支,通过对比这两份流量下的各指标的差异,我们可以评估出新策略的优劣,进而决定新策略是否全流量. 上文中提到的抽样是指按照某种确定的随机化方法,对线上流量进行划分.抽样可以指这种划分的方法,也可以指划分得到的一个流量子集.抽样是一种特殊的小流量,要求对流量的划分必须保证均匀性和随机性,并且可以根据需求过滤掉不符合

基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)

郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档适用人员:技术人员 提纲: 所谓异常流量 如何识别异常流量 Apriori如何工作 如何让 Nginx 拦截可疑 IP 0x00,所谓异常流量 有害的异常流量大概分为以下几种: 僵尸网络中的节点对主站发起无目的的密集访问: 黑客.白帽子或某些安全公司为了做漏洞扫描,对主站各个 Web 工程发起字典式

科大讯飞刘庆峰:AI要改变世界,算法、大数据、行业专家缺一不可

10月24日,科大讯飞在其大本营安徽合肥举办了首届全球1024开发者节.会上,科大讯飞董事长刘庆峰发表了<1024 AI因你而来>的主题演讲. 刘庆峰指出,人工智能是这个时代最伟大的技术,其对当前社会的改变,将会超出我们常人的想象.目前来说,人工智能现在有两个主要方向:一个是基于数学统计.建模的人工智能发展模式,以深度学习为代表:一个是对人类大脑科学的研究. 刘庆峰还表示,通过与教育.医疗等领域的机构通力合作,科大讯飞的开放平台与传统领域的应用程度正在逐步加深. "目前,讯飞开放平台