Dual-tree (快速计算核密度估计算法)

Dual-tree (快速计算核密度估计算法)

  1. 介绍

使用kd-tree实现空间划分:

 

Kd-treek-dimensional树的简称,是一种分割k维数据空间的数据结构。

对数据点在k维空间{二维(xy),三维(xyz)k(xyz..)}中划分的一种数据结构,主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)

Kd-Tree的构建算法:

1)在K维数据集合中选择具有最大方差的维度k,然后在该维度上选择中值mpivot对该数据集合进行划分,得到两个子集合;同时创建一个树结点node,用于存储;

2)对两个子集合重复(1)步骤的过程,直至所有子集合都不能再划分为止;如果某个子集合不能再划分时,则将该子集合中的数据保存到叶子结点(leaf node)。

下面给出一个简单例子:

给定二维数据集合:(2,3), (5,4), (9,6), (4,7), (8,1), (7,2),利用上述算法构建一棵Kd-tree。左图是Kd-tree对应二维数据集合的一个空间划分,右图是构建的一棵Kd-tree

Kd-Tree的查找算法:

目的是检索在k-d树中与查询点距离最近的数据点。

假设查询点A

1)通过二叉树搜索,顺着搜索路径很快就能找到最邻近的近似点,也就是叶子节点B。而找到的叶子节点B并不一定就是最邻近的,最邻近肯定距离查询点更近,应该位于以查询点为圆心且通过叶子节点的圆域内。

2)为了找到真正的最近邻,还需要进行相关的回溯操作。也就是说,算法沿搜索路径反向查找是否有距离查询点更近的数据点。

 

以查询(2.1,3.1)为例:

1)二叉树搜索

此时搜索路径中的节点为{(7,2)(5,4)(2,3)},以(2,3)作为当前最近邻点,计算其到查询点(2.1,3.1)的距离为0.1414

2)在得到(2,3)为查询点的最近点之后,回溯到其父节点(5,4),并判断在该父节点的其他子节点空间中是否有距离查询点更近的数据点。

(2.1,3.1)为圆心,以0.1414为半径画圆,如下图所示。发现该圆并不和超平面y = 4交割,因此不用进入(5,4)节点右子空间中(图中绿色区域)去搜索;

最后,再回溯到(7,2),以(2.1,3.1)为圆心,以0.1414为半径的圆更不会与x = 7超平面交割,因此不用进入(7,2)右子空间(图中红色区域)进行查找。至此,搜索路径中的节点已经全部回溯完,结束整个搜索,返回最近邻点(2,3),最近距离为0.1414

 

多分辨率空间划分树:

1Kd-tree空间划分:

kd-tree树理解为一种网格的泛化,可以整合所有局部信息用来获得精确的全局解决方案;

kd-tree是一个简单有效的空间划分树,不同的节点所在的边界超矩形代表数据空间不同的区域(最大限度的收紧边界到每个坐标);

每次划分都是沿着节点内样本方差最大的的坐标方向,直到叶节点只有一个或者很少(预设数量)的样本点。

称每个节点包含统计量如局部统计均值和协方差的这种kd-treemrkd-tree,空间划分的矩形区域表示密度的形状。

分别把每个维度分成不同的区间,kd-trees有一些相同的属性,使网格表示指数增长的维度;通过选择质心点定义左、右集的分区。

 

2ball-tree空间划分

Ball-trees可以构建高效、高质量使用锚的层次结构算法,在高维度数据集的构建上在文献【16】中被证明有效。

维度低于10的用kd-tree构建,更高的维度用ball-tree构建。

 

 

查询算法:

优化①②两步:在二叉树查询时,记录每个节点与查询点的比较结果,避免在回溯操作步骤①中再次比较。

 

Dual-tree算法定义:

1XQ为测试数据集,数据集中每个点为xq,数据集的大小为NQ

    XT为训练数据集,数据集中每个点为xt,数据集的大小为NT

2lquqxq与任意训练数据点之间密度的最小值、最大值,即下界、上界

3dudl表示测试数据集里当前节点的贡献的上界、下界;

4QT表示测试树和训练树的节点;

5lQ表示测试树节点Q与任意训练树节点之间密度的最小值;

       uQ表示测试树节点Q与任意训练树节点之间密度的最大值;

6LuQ LlQ为节点Q的密度估计的全局似然函数的上界、下界;

7P表示全局优先队列;

8 XT的质心

9P为全局优先队列(优先函数的最大值);

 

计算公式:

  1. 全局似然函数:
  2. 核密度估计:
  3. 全局对数似然函数:
  4. 全局似然函数的下界: =

 

 

 

Single-tree算法(分而治之的策略):--------------------理解Dual-tree算法的基础

 

根据文献4建立划分XT的树,接着讨论边界和优先近似;

  1. 排除和包含(Exclusion and inclusion

A: 对于每个测试点,采用深度优先方式的标准遍历节点;

B: 每个节点T,计算测试点与训练数据集中任意点之间距离的上界和下界lquq,从而计算出XT数据集贡献的边界以及p(xq)p(xq)是由lquq的中间点计算的);

 

C: 如果T的最大密度贡献在机器浮动精度以内为0,那么T节点将删除,即T的子节点也不用计算;

    D: 若节点T的最小质量贡献在机器精度以内为1,那么就删除节点T

有限范围的核函数(例如:the spherical or optimal-efficiency Epanechnikov kernel),排除最小距离大于核函数长度的节点,保存结果准确。同样的属性用于spherical kernel包含

 

  1. 近似质心集合

如果这些不同边界的百分比小于 ,可以通过近似质心贡献来修剪节点(pruned),即添加NTK( )。排除和包含(Exclusion and inclusion)是这个近似修剪标准的特殊案例。

 

  1. 保证逐点精度

近似修剪标准不是提供密度估计精度的明显保证。从lquq本身维持:从最大的粗糙边界开始,慢慢地收紧边界,更加细致地递归和观察训练数据点。假设没有训练数据点贡献集合(contribute mass来初始下界,假设所有的训练数据点贡献集合来初始上界。当 执行排除,用来保证p(xq)的最大误差小于 

这种行为比恒定集合修剪的效率高。

 

  1. 局部优先级近似

节点的遍历顺序影响程序的效率(若早点得到严格的边界,则可以修剪更多的节点)。用局部最佳优先遍历(选择与xq具有最小距离的节点)代替深度优先遍历。

 

 

Dual-tree算法(高度分而治之的策略):

算法流程:

算法流程说明:没有描述如何添加质心集合;简单说明如何收紧上下界;在计算的结束部分,密度估计p(xq)是基于下界和上界的中间点;

 

  1. 多重递归:遍历dual-tree

    A: 建立两棵树:

    B: 同时用一种方法遍历两棵树,对应每一个可能的节点对进行比较。(single-tree 是针对测试数据集只有一点的特例);

    C: 利用优先级函数选择与边界区域之间距离最小的节点对;

     

  1. 保证全局精度

    为了同时考虑所有测试点,实现一个全局似然函数的近似值LQLQ经常为确量,特别是在计算模型选择的交叉验证多重密度估计时;

    明智的消费计算量:只要全局密度误差在要求范围内,即 ,就允许有些测试点具有额外的节点误差

     

  1. 全局优先近似

 

  1. 任意逼近特性

P中储存近似节点,并降低优先特性降低,用做未来可能地重访问,同时,确保未访问的节点可以优先访问(可逆机制);

每个节点膨胀时单调地收紧边界,每次收紧后,紧接着代替原边界;

 

 

优化上下界:

  1. 跨尺度信息最大化:上下大量繁殖
  2. 延迟异步传播

——————————————————————写下最后——————————————————————

本文为笔者旧日的阅读论文的笔记,分享出来,如有错误或、疑问以及侵权的部分,欢迎联系QQ邮箱:1192090271@qq.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值