Annoy 近邻算法
2024-09-01 07:00:22
Annoy
随机选择两个点,以这两个节点为初始中心节点,执行聚类数为2的kmeans过程,最终产生收敛后两个聚类中心点
二叉树底层是叶子节点记录原始数据节点,其他中间节点记录的是分割超平面的信息
但是上述描述存在两个问题:
(1)查询过程最终落到叶子节点的数据节点数小于 我们需要的Top N相似邻居节点数目怎么办?
(2)两个相近的数据节点划分到二叉树不同分支上怎么办?
针对这个问题可以通过两个方法来解决:
(1)如果分割超平面的两边都很相似,那可以两边都遍历
(2) 建立多棵二叉树树,构成一个森林
(3)所有树返回近邻点都插入到优先队列中,求并集去重, 然后计算和查询点距离, 最终根据距离值从近距离到远距离排序, 返回Top N近邻节点集合
Summary of features
- Euclidean distance, Manhattan distance, cosine distance, Hamming 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 问题
写文件时候,会向磁盘写
最新文章
- asp.net 生成图形验证码(字母和数字混合)
- C++ Sqlite3
- 3、C#面向对象:封装、继承、多态、String、集合、文件(下)
- android 圆角图片的实现
- IRC(Internet Relay Chat Protocol) Protocal Learning &;&; IRC Bot
- 第一个django
- WPF 定时写入文本
- C# 平时碰见的问题【3】
- Ubuntu下安装Git以及Git帮助手册【转】
- dll 入口函数
- PHP从数据库获取的下拉树
- jQuery执行进度提示窗口的实现(progressbar)
- 读书笔记 effective c++ Item 2 尽量使用const,枚举(enums),内联(inlines),不要使用宏定义(define)
- 深入理解委托(Delegate)
- [UE4]让箭头保持水平
- 001_深度剖析什么是 SLI、SLO和SLA?
- jsp获取请求头信息
- css兼容小问题
- 如何简单的测试kubernetes的dns add-ons是否工作正常?
- Mysql 5.7主主复制配置