NN-Descent构建K近邻图——论文超详细注解

提出了一种名为NN-Descent的K近邻图构建方法,适用于任意相似性度量,具有可扩展性、节省空间、快速精确及易实施的特点。通过迭代改进随机初始K近邻图,最终构建高质量近似K近邻图。

个人博客:www.mzwang.top

论文题目

Efficient K-Nearest Neighbor Graph Construction for Generic Similarity Measures

相关信息

作者与单位

Wei Dong(wdong@cs.princeton.edu);

Moses Charikar(moses@cs.princeton.edu);

Kai Li(li@cs.princeton.edu).

Department of Computer Science, Princeton University

出处与时间

In Proceedings of the 20th international conference on World wide web; 2011

作者拟解决的主要问题

K近邻图的构建在很多基于Web的应用上是一个重要的操作,比如协同过滤(基于用户的邻居作推荐)、相似性搜索等。一个有效地构建方法将使K近邻图的应用更加广泛。

暴力构建K近邻图的时间复杂度为O(n2)O(n^2)O(n2),为了能更高效的构建K近邻图,现存的工作扩展性都不太好,而且一般都特定于具体的相似性度量。

有效的K近邻图构建仍然是一个开放的问题,解决该问题的已知方案中没有一个是通用、有效和可扩展的。因此,本文提出了NN-Descent方法,该方法具有以下优点:

  1. 通用。适用于任意的相似性度量准则。

  2. 可扩展。随着数据集尺寸的增加,Recall仅有很小的下降。由于对每一个数据点的局部信息进行操作,因此适用于分布式计算环境(MapReduce).

  3. 节省空间。整个构建过程仅涉及到一种数据结构——近邻图。

  4. 快速、精确。百分之几的相似性比较便可实现90%以上的召回率。

  5. 容易实施。主要代码不超过200行(C++)。

论文主要研究内容

如何有效地构建一个K近邻图,具体如下:

  1. 适用任意相似性度量的K近邻图构建方法。
  2. 在较短的时间内快速构建K近邻图的方法。
  3. 构建一个在其上能快速、精确执行搜索的K近邻图。
  4. 适用于MapReduce框架的K近邻图构建方案。

论文使用的方法

抽象描述注解

VVV表示数据集,数据集尺寸为N=∣V∣N=|V|N=V,相似性度量σ\sigmaσV×V→RV \times V \rightarrow RV×VR∀v∈V\forall v \in VvVBK(v)B_K(v)BK(v)表示vvvKKK个最近邻,RK(v)={ u∈V∣v∈BK(u)}R_K(v)= \lbrace u \in V | v \in B_K(u) \rbraceRK(v)={ uVvBK(u)}表示vvv的反向K个最近邻。B[v]B[v]B[v]R[v]R[v]R[v]分别表示BK(v)B_K(v)BK(v)RK(v)R_K(v)RK(v)的近似。B‾[v]=B[v]∪R[v]\overline{B}[v]=B[v] \cup R[v]B[v]=B[v]R[v]表示vvv的一般邻居。

当在VVV上的度量方式为距离度量时,即dddV×V→[0, +∞]V \times V \rightarrow [0,\ +\infty]V×V[0, +]∀r∈[0, +∞]\forall r \in [0,\ +\infty]r[0, +],以vvv为球心的r-球定义为:Br(v)={ u∈V∣d(u, v)≤r}B_r(v)=\lbrace u \in V | d(u, \ v) \leq r\rbraceBr(v)={ uVd(u, v)r}

如果∃c\exists cc满足:
∣B2r(v)∣≤c∣Br(v)∣, ∀v∈V(1) |B_{2r}(v)| \leq c|B_{r}(v)|, \ \forall v \in V \tag{1} B2r(v)cBr(v), vV(1)
则称度量空间V增长受限ccc是增长常量。

基础算法注解

基本思想:邻居的邻居更可能是邻居

理论推导

我们可以从VVV中每一个点的现有的近似K近邻出发,通过探索该点邻居的邻居(在当前近似K近邻中)而不断完善该点的K近邻。换句话说,可从粗略的K近邻图出发通过改进而不断完善它。对这一观点的量化表达如下:

K=c3K=c^3K=c3(后面公式推导要用到,KKK取此值是方便推导),假定已有的近似K近邻图(可以随机给每个点选邻居构建,也可通过其它数据结构辅助构建,如哈希,树等)为BBB∀v∈V\forall v \in VvVB′[v]=⋃v′∈B[v]B[v′]B^\prime[v]=\bigcup _{v^\prime \in B[v]} B[v^\prime]B[v]=vB[v]B[v]表示vvv所有邻居的邻居集合,它也是在完善vvv的K近邻时的候选点集。当B的精度比较高时(迭代完善了一定次数或通过某种更好的方式初始化B),高到什么程度呢?就是给定一个固定的半径rrr,对∀v∈V\forall v \in VvVB[v]B[v]B[v]包含的K个邻居均匀地分布在Br(v)B_r(v)Br(v)中。这样的话,当各事件相互独立且K<<∣Br/2(v)∣K<< |B_{r/2}(v)|K<<Br/2(v)时,B′[v]B^\prime [v]B[v]很可能包含在Br/2(v)B_{r/2}(v)Br/2(v)中的K个邻居。换句话说,对∀v∈V\forall v \in VvV,通过探索B′[v]B^\prime [v]B[v]来使vvv到它的近似K近邻的距离减半。

Br/2(v)B_{r/2}(v)Br/2(v)中的一点uuu,要从B′[v]B^\prime[v]B[v]里面找到,则至少存在一点v′v^\primev,使得v′∈B[v]v^\prime \in B[v]v

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值