ball-tree

为了改进kd-tree沿着笛卡尔坐标进行划分的低效率,ball tree将使用超球面而不是超平面来划分空间。虽然在构建数据结构的花费上大过于kd-tree,但是在高维甚至很高维的数据上都表现的很高效。ball tree的节点保存圆心和半径,节点每次分裂都生成两个小的超球空间,不断分裂直至节点包含的数据点数量小于一定值,如下图所示。

(from:https://blog.csdn.net/skyline0623/article/details/8154911)

不同层次的圆被用不同的风格画出。树中的每个结点对应一个圆,结点的数字表示该区域包含的观测点数,但不一定就是图中该区域囊括的点数,因为有重叠的情况,并且一个观测点只能属于一个区域。

节点分裂方法如下:选择一个距离当前圆心最远的观测点i1,和距离i1最远的观测点 i2,将圆中其它观测点根据距离分别赋给这两个观测点所代表的簇,然后计算每一个簇的中心点和包含所有其所属观测点的最小半径。
使用ball tree时,先自上而下找到包含target的叶子结点,从此结点中找到离它最近的观测点。这个距离就是最近邻的距离的上界。检查它的兄弟结点中是否包含比这个上界更小的观测点。方法是:如果目标点距离兄弟结点的圆心的距离大于兄弟圆半径加上前面的上界的值(两圆不可能相交,三角形不等式),则这个兄弟结点不可能包含所要的观测点(如下图所示);否则,检查这个兄弟结点是否包含符合条件的观测点;搜索思路跟kd-tree基本一致,除了判断是否剪枝时的计算方式不一样。

ball-tree的性能分析与kd-tree的性能分析思路一致,具体参考上一篇https://blog.csdn.net/yeqiustu/article/details/106033726,这里不在陈述。

LSH

LSH(Locality Sensitive Hashing),局部敏感哈希,其基本思想类似于一种空间域转换思想,基于一个假设:如果两个数据在原有的数据空间是相似的,那么分别经过哈希函数转换以后的它们也具有很高的相似度;相反,如果它们本身是不相似的,那么经过转换后它们应仍不具有相似性;具体的说,将原始数据空间中的两个相邻数据点通过相同的映射或投影变换(projection)后,这两个数据点被映射到同一个桶的概率很大,而不相邻的数据点被映射到同一个桶的概率很小。

LSH是一种近似最近邻搜索的算法,提供了一种在海量的高维数据集中查找与查询数据点(query data point)近似最相邻的某个或某些数据点。需要注意的是,LSH并不能保证一定能够查找到与query data point最相邻的数据,而是减少需要匹配的数据点个数的同时保证查找到最近邻的数据点的概率很大。

那具有怎样特点的hash functions才能够使得原本相邻的两个数据点经过hash变换后会落入相同的桶内?这些hash function需要满足以下两个条件:

  • 1)如果d(x,y) ≤ d1, 则h(x) = h(y)的概率至少为p1;
  • 2)如果d(x,y) ≥ d2, 则h(x) = h(y)的概率至多为p2;

其中d(x,y)表示x和y之间的距离,d1 < d2, h(x)和h(y)分别表示对x和y进行hash变换。

满足以上两个条件的hash functions称为(d1,d2,p1,p2)-sensitive。而通过一个或多个(d1,d2,p1,p2)-sensitive的hash function对原始数据集合进行hashing生成一个或多个hash table的过程称为Locality-sensitive Hashing;当数据量很大时,也可以考虑建立多级LSH。d(x,y)是x和y之间的一个距离度量,并不是所有的距离度量都能够找到满足locality-sensitive的hash functions。

下面介绍一些满足不同距离度量方式下的locality-sensitive的hash functions:

  • 1. Jaccard distance

    • Jaccard distance: (1 - Jaccard similarity),而Jaccard similarity = (A intersection B) / (A union B),Jaccard similarity通常用来判断两个集合的相似性。
    • 对应的LSH hash function为:minhash,其是(d1,d2,1-d1,1-d2)-sensitive的。
  • 2. Hamming distance
    • Hamming distance: 两个具有相同长度的向量中对应位置处值不同的次数。
    • 对应的LSH hash function为:H(V) = 向量V的第i位上的值,其是(d1,d2,1-d1/d,1-d2/d)-sensitive的。
  • 3. Cosine distance 
    • Cosine distance:cos(theta) = A·B / |A||B| ,常用来判断两个向量之间的夹角,夹角越小,表示它们越相似。
    • 对应的LSH hash function为:H(V) = sign(V·R),R是一个随机向量。V·R可以看做是将V向R上进行投影操作。其是(d1,d2,(180-d1)180,(180-d2)/180)-sensitive的。
    • 理解:利用随机的超平面(random hyperplane)将原始数据空间进行划分,每一个数据被投影后会落入超平面的某一侧,经过多个随机的超平面划分后,原始空间被划分为了很多cell,而位于每个cell内的数据被认为具有很大可能是相邻的(即原始数据之间的cosine distance很小)。
  • 4. normal Euclidean distance
    • Euclidean distance是衡量D维空间中两个点之间的距离的一种距离度量方式。
    • 对应的LSH hash function为:H(V) = |V·R + b| / a,R是一个随机向量,a是桶宽,b是一个在[0,a]之间均匀分布的随机变量。V·R可以看做是将V向R上进行投影操作。其是(a/2,2a,1/2,1/3)-sensitive的。
    • 理解:将原始数据空间中的数据投影到一条随机的直线(random line)上,并且该直线由很多长度等于a的线段组成,每一个数据被投影后会落入该直线上的某一个线段上(对应的桶内),将所有数据都投影到直线上后,位于同一个线段内的数据将被认为具有很大可能是相邻的(即原始数据之间的Euclidean distance很小)

LSH算法内容比较多,其本身也不是为knn算法而开发的,这里便不再展开;详细可参考https://www.cnblogs.com/wt869054461/p/8148940.html

knn基础与优化2--ball tree、LSH相关推荐

  1. 【基础智能优化算法】68种算法大合集+matlab源码+参考资料+永久更新

    目前已更新68种基础算法+matlab源码+参考资料 !!!!!! 2-蝴蝶优化算法 3--海洋捕食者算法 4-鲸鱼优化算法 5-乌燕鸥优化算法 6-灰狼优化算法 7-黑猩猩优化算法 8-原子搜索算法 ...

  2. 移动前端开发基础与优化

    移动前端开发基础与优化 http://qywx.gitcafe.io/2014/11/22/%E7%A7%BB%E5%8A%A8%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91 ...

  3. 编程基础 - 线索二叉树 (Threaded Binary Tree)

    编程基础 - 线索二叉树 (Threaded Binary Tree) 返回分类:全部文章 >> 基础知识 返回上级:编程基础 - 二叉树 (Binary Tree) 本文将介绍线索二叉树 ...

  4. 统计机器学习【3】- K近邻法(三)Ball Tree

    在计算机科学中,球树(ball tree)是一种空间划分数据结构,用于组织在多维空间中的点.球数之所有得到此名,是因为它将数据点划分为一组嵌套的超球体.这种类型的数据结构特征使其在很多方面都有用,特别 ...

  5. 计算机探索策略的反馈调整,任务驱动模式下的中职计算机应用基础课程优化教学探索...

    邵志杰 摘 要:在中职计算机课程教学过程中,教师应当结合中职学生的实际情况以及未来职业需求来调整教学策略,使学生能够在计算机课堂上提升知识运用能力.基于此,教师在开展中职计算机应用基础课程教学过程中, ...

  6. MySQL基础: 索引, 优化, 锁

    一. mysql的架构介绍 ​ 从几年前实习开始, 陆陆续续写了好多的markdown笔记, 早期的笔记大多是在B站和一些大牛博客分享而自己整理的笔记, 早期的笔记体系比较清晰,也是我的学习成长路线. ...

  7. Linux基础操作优化

    yum更新 #yum  grouplist     #yum  groupinstall " " #yum  upgrade    # yum  update yum -y upd ...

  8. 【机器学习基础】优化算法详解

    本文来源于吴恩达老师的深度学习课程[1]和深度学习课程[2]笔记部分. 作者:黄海广[3] 备注:笔记和作业(含数据.原始作业文件).视频都在 github[4]中下载. 导语 在学习机器学习的过程中 ...

  9. ASP.NET Aries 4.0 开源发布:已完成基础功能优化重写

    主要更新: 1:增加AR.Global.GetUser() 方法返回当前登陆者的用户信息. 2:重写AR.Combobox 支持下拉树. 3:调整及扩展Input下拉的配置参数. 4:优化及新增AR. ...

最新文章

  1. Windows Live Writer 测试日志
  2. hadoop streaming编程小demo(python版)
  3. java jlabel里面加button_在Java Swing中通过JLabel覆盖JButton?
  4. workerman mysql_workerman/mysql
  5. spark-sql建表语句限制_SparkSQL
  6. 如何在私有链实现分叉
  7. 基于Qt设计的学生考勤系统
  8. springboot毕业设计 基于springboot房产中介预约看房系统毕业设计设计与实现参考
  9. Markdown常用数学符号
  10. 【ENVI入门系列】02.自定义坐标系(北京54、西安80、2000坐标系)
  11. ARM与x86之1--Wintel帝国
  12. 用计算机做雕塑的,做电脑雕刻工资怎样
  13. LookAhead优化器方法
  14. HTML中使用360浏览器默认用极速模式
  15. SaaS 公司融资的「22条军规」
  16. java连接云服务Hadoop伪分布式错误:Call From LAPTOP-14BPR3NI/192.168.1.2 to node1:9000 failed on connection
  17. 第四范式蒋仁皓:什么才是构建企业AI的关键要素
  18. 小萌新开始做题啦!----------相交链表
  19. Android项目gen目下没有R.class文件 解决方法
  20. 蜜友工作室来博客园开博了

热门文章

  1. 福利爬虫妹子图之获取种子url
  2. 精品网址导航主题整站源码 wordpress模板 自适应手机端
  3. 上海亚商投顾:沪指缩量跌0.44% 医药股全线反弹
  4. 如何使用电脑来程控数字示波器(一)USB接线程控
  5. win10备份为wim_Win10 也能玩转一键还原
  6. 基于CSS和HTML技术开发中国海洋大学网站的首页
  7. 根据湖底DEM计算湖泊蓄水量
  8. 从微信小程序谈起,对企业级平台的理解
  9. HTML5期末大作业:在线电影网站设计——我不是药神电影介绍(4页) HTML+CSS+JavaScript 大二实训大作业HTML源码...
  10. Nginx-第一天--HTTP