目录

  • LSH简介
  • LSH算法过程

LSH简介

LSH全称Locality Sensitive Hashing,即局部敏感度哈希,是一种常用的数据挖掘算法,LSH让海量且高维的数据检索变得高效;普通哈希的目标是避开碰撞,比如Python的dict,Java的HashMap,给一个样本,找一个位置,不同的样本落到不同的位置,只有两个样本相同,才会落到同一位置;而LSH在普通哈希的基础上,弱化了普通哈希避开碰撞的目标,重点是需要保证高维空间相近的样本在低维空间也具有很高的相近概率;

先粗略地描述,假设数据为3张图像,每张图像展开为向量后是4096维,通过哈希可以将每张图像的向量压缩(编码)成128个bit(注意,是位,每个位仅可取0或1);普通哈希只要能够确保图像的编码不碰撞即可,而LSH需要保证两张相似的图像,其128bits的编码也相近;两种哈希的做法可以描述为下图:

在图像检索的工程应用中,人们的想法一般是输入一张图像,用卷积网络提取特征,将特征编码成固定长度的bits(一般是32bits或128bits),数据库中保存的是大量图像以及其经过卷积提取到特征对应的bits,通过对比bits,能够快速返回和输入相似的图像;


比较bits的接近程度使用汉明距离:
A为 10001001;
B为 10110001;
不同的位数为3,汉明距离就是3;汉明距离就是两个码不同的位的个数;

机器最擅长的就是位运算,因此,这比计算特征的欧式距离快很多;


同样的,LSH算法分为两个步骤:

  • 1.映射,建立索引;
  • 2.查询,query;

LSH属于近邻算法,工程上常用的近邻算法还有KD树(回顾:机器学习笔记本-第三课K近邻算法


LSH算法过程

首先,把原始的样本映射成长度为NNN的2进制串;其中每个位可以理解为在空间中取了一个超平面进行划分:

如上图所示,样本有3个特征,以散点形式可视化在三维空间中,现在想要用定长的bits编码,比如长度为3,所以随机生成3个平面(如果样本特征为二维,则划分的平面为直线;如果样本特征维度更高,划分的平面就递进到超平面),样本在平面一侧时,该平面对应的位即记为0,若在另一侧,则记为1;左图和右图分别是两种随机平面下的编码,不同的划分方式会产生不同的编码结果;

可以看出,LSH是允许碰撞的,比如左图样本a,b,da,b,da,b,d均被编码为100;形象地,把Table中的一个个区域称作桶bucket,比如(100,a,b,d)(100,a,b,d)(100,a,b,d),100即为桶的编号;

假设现在输入图像,特征对应在空间中的点c,需要返回3张相似图像,编码选择左图,检索过程为:

  • 对点c使用同一超平面集合进行编码,得到110;
  • 在110对应的桶内查找数据库样本,本例中110没有样本,所以计算其他桶编号与110的汉明距离,先选择最小距离的桶,取出其中的样本,直接与点c计算特征的欧式距离,返回前3个最小欧式距离的样本;

为了提高样本划分的精度,可以增加划分超平面的数量,这会使编号长度增加,对应的就会增加检索的计算时间;同理,如果对划分精度不高,可以减少超平面数量,这样可以增加每个桶中样本的数量,从而降低计算bucket间汉明距离的可能性,直接在桶中计算特征欧式距离。

其他算法-LSH局部敏感度哈希相关推荐

  1. 【算法】局部敏感哈希 LSH 的 Python 实现

    一.哈希算法 普通的哈希算法:把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值. 最理想的是所有不同的输入都可以映射到散列值,但是存在这种可能性的.当不同的输入映射到相同的散列值时, ...

  2. LSH(局部敏感度哈希)

    一.局部敏感哈希LSH 在很多应用领域中,我们面对和需要处理的数据往往是海量并且具有很高的维度,怎样快速地从海量的高维数据集合中找到与某个数据最相似(距离最近)的一个数据或多个数据成为了一个难点和问题 ...

  3. LSH(局部敏感哈希算法)实现文本的相似性比对

    源码见github:https://github.com/smallsmallcase/lsHash 和LSH算法类似,朴素贝叶斯算法也能实现相近的分类功能,朴素贝叶斯算法给新浪新闻分类的代码见:ht ...

  4. KD树和LSH局部敏感哈希

    文档结构 文档表示 距离度量 KD树 原理 构建 查询 复杂度 KD树的KNN KD树的逼近KNN 不适用高维数据 LSH LSH潜在的问题 LSH算法 复杂度 概率逼近 多表 文档结构 文档表示 词 ...

  5. minHash(最小哈希)和LSH(局部敏感哈希)

    在数据挖掘中,有一个比较基本的问题,就是比较两个集合的相似度.关于这个问题,最笨的方法就是用一个两重循环来遍历这两个集合中的所有元素,进而统计这两个集合中相同元素的个数.但是,当这两个集合里的元素数量 ...

  6. R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(一,基本原理)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 私认为,文本的相似性可以分为两类:一类是机械相 ...

  7. 最近邻和K近邻及其优化算法LSH(局部敏感哈希,Locality Sensitive Hashing) Kd-Tree

    引言 在处理大量高维数据时,如何快速地找到最相似的数据是一个比较难的问题.如果是低维的小量数据,线性查找(Linear Search)就可以解决,但面对海量的高维数据集如果采用线性查找将会非常耗时.因 ...

  8. 如何使用局部敏感哈希(LSH)算法进行特征降维?

    这篇博客只关注局部敏感哈希的降维过程,也不涉及理论证明. 1. 局部敏感哈希算法 1.1 算法简介   传统的哈希(Hashing)算法通过映射函数将记录的存储位置与记录的关键字关联起来,实现记录的快 ...

  9. 局部敏感哈希算法(Locality Sensitive Hashing)

    from:https://www.cnblogs.com/maybe2030/p/4953039.html 阅读目录 1. 基本思想 2. 局部敏感哈希LSH 3. 文档相似度计算 局部敏感哈希(Lo ...

最新文章

  1. 第十四周项目一-排序函数模版
  2. 写python程序用什么软件最好-Python必学之编译器用哪个好?你用错了吧!
  3. 数位 dp 最低位最高位之差绝对值大于2_2020赛季30大球员系列:第27位 微笑刺客 肯巴沃克...
  4. SAP Spartacus里的不同种类的CMS Component type
  5. mysql8 win10启动_Windows10 mysql 8.0.12 非安装版配置启动方法
  6. SPSS的数据T检验
  7. gcc编译选项【转】
  8. Alibaba Druid 源码阅读(五)数据库连接池 连接关闭探索
  9. psasp和matlab,PSASP与Matlab/SimPowerSystems联合仿真接口方法研究
  10. NISP题库(八套模拟题)
  11. spring集成shiro原理
  12. 学点负面情绪的抗争能力
  13. 服务都微了,编排怎么整?
  14. 各行业常见的资质证书
  15. 微信小程序渲染图片报错:[渲染层网络层错误] Failed to load local image resource
  16. 强大的 mysql管理工具之 Mysql Query Browser
  17. OSG 自定义场景漫游示例
  18. SE14造成表丢失后找回数据
  19. 集成显卡 独立显卡 带 双显示器
  20. 揭秘:恒生电子到底是干什么的

热门文章

  1. Java各版本的重大改变
  2. 3天我把DDD业务领域建模、数据库、聚合彻底撸干净了!
  3. 33张图剖析ReentrantReadWriteLock源码
  4. 一口气说出 5 种 IO 模型,蒙圈了!
  5. QPS、TPS、RT、并发数、吞吐量理解和性能优化深入思考
  6. B站疯传!拿走不谢!最全面的JAVA面试材料!完整版开放下载,叫我好人!
  7. 面试官:你说你熟悉jvm?那你讲一下并发的可达性分析
  8. 还搞不懂 Java NIO?快来读读这篇文章!
  9. 普通程序员和优秀程序员的距离究竟有多大?
  10. 用Leangoo进行项目管理