Skip to content
Tse的笔记
Go back

向量数据库复习三

Edit page

BallTree:节点分割与索引构建

1. 基本概念

BallTree 是用于加速最近邻搜索(kNN)的树结构。

核心思想:

每个节点包含:


2. 节点分割(Node Splitting)

2.1 常见分裂方式

(1)最远点对分裂

直觉:沿数据最大延展方向切分


(2)PCA 分裂


2.2 划分步骤

Step 1:方向

v = p2 - p1


Step 2:投影

t(x) = (x - p1) · v


Step 3:排序切分


3. 子球构建

3.1 球心

c = 均值(x)


3.2 半径

r = max ||x - c||


4. 索引构建(重点)

BallTree 是递归二叉结构。

4.1 构建流程

BuildTree(S):


5. 节点结构

Node:


6. 树结构

Root ├── Ball │ ├── Leaf │ └── Leaf └── Ball ├── Leaf └── Leaf


7. 为什么有效

7.1 空间聚类

相近点会被划到同一球

7.2 剪枝条件

如果:

d(q, center) - radius > best_dist

则整棵子树可以跳过


8. 总结

Annoy:核心思想与索引机制

1. 核心思想

Annoy(Approximate Nearest Neighbors Oh Yeah)通过构建多棵随机投影树来划分高维空间。

其核心目标是:


2. 索引构建过程

Annoy 使用多棵随机树(forest)进行索引构建。

2.1 构建方式

每棵树的构建过程如下:


2.2 分裂方式

特点:


3. 查询过程

查询时的流程:


4. 多树机制的作用

Annoy 的关键设计在于“多树投票机制”:

作用:


5. 总结


Edit page
Share this post:

Previous Post
向量数据库复习四
Next Post
向量数据库复习二