Annoy

随机选择两个点,以这两个节点为初始中心节点,执行聚类数为2的kmeans过程,最终产生收敛后两个聚类中心点

二叉树底层是叶子节点记录原始数据节点,其他中间节点记录的是分割超平面的信息

但是上述描述存在两个问题:

(1)查询过程最终落到叶子节点的数据节点数小于 我们需要的Top N相似邻居节点数目怎么办?

(2)两个相近的数据节点划分到二叉树不同分支上怎么办?

针对这个问题可以通过两个方法来解决:

(1)如果分割超平面的两边都很相似,那可以两边都遍历

(2) 建立多棵二叉树树,构成一个森林

(3)所有树返回近邻点都插入到优先队列中,求并集去重, 然后计算和查询点距离, 最终根据距离值从近距离到远距离排序, 返回Top N近邻节点集合

Summary of features

  • Euclidean distanceManhattan distancecosine distanceHamming distance, or Dot (Inner) Product distance
  • Cosine distance is equivalent to Euclidean distance of normalized vectors = sqrt(2-2*cos(u, v))
  • Works better if you don't have too many dimensions (like <100) but seems to perform surprisingly well even up to 1,000 dimensions
  • Small memory usage
  • Lets you share memory between multiple processes
  • Index creation is separate from lookup (in particular you can not add more items once the tree has been created)
  • Native Python support, tested with 2.7, 3.6, and 3.7.
  • Build index on disk to enable indexing big datasets that won't fit into memory (contributed by Rene Hollander)

build(-1)的树的颗数问题

:所有节点的个数是trainning data的2倍左右:https://github.com/spotify/annoy/issues/338

build_on_disk 问题

写文件时候,会向磁盘写

最新文章

  1. asp.net 生成图形验证码(字母和数字混合)
  2. C++ Sqlite3
  3. 3、C#面向对象:封装、继承、多态、String、集合、文件(下)
  4. android 圆角图片的实现
  5. IRC(Internet Relay Chat Protocol) Protocal Learning &amp;&amp; IRC Bot
  6. 第一个django
  7. WPF 定时写入文本
  8. C# 平时碰见的问题【3】
  9. Ubuntu下安装Git以及Git帮助手册【转】
  10. dll 入口函数
  11. PHP从数据库获取的下拉树
  12. jQuery执行进度提示窗口的实现(progressbar)
  13. 读书笔记 effective c++ Item 2 尽量使用const,枚举(enums),内联(inlines),不要使用宏定义(define)
  14. 深入理解委托(Delegate)
  15. [UE4]让箭头保持水平
  16. 001_深度剖析什么是 SLI、SLO和SLA?
  17. jsp获取请求头信息
  18. css兼容小问题
  19. 如何简单的测试kubernetes的dns add-ons是否工作正常?
  20. Mysql 5.7主主复制配置

热门文章

  1. Spring核心组件剖析
  2. Maven web 项目工程的建立
  3. Java中Jdom解析XML
  4. JAVA记录-基础常识
  5. 设置MyBatis在控制台打印SQL语句
  6. 解决logstash启动缓慢问题
  7. docker部署安装
  8. CodeBlock 快捷键大全
  9. 循环屏障CyclicBarrier以及和CountDownLatch的区别
  10. IntelliJ IDEA AndroidStudio SVN无法使用