模式识别(Pattern Recognition)学习笔记(二十七)-- 基于树搜索算法的快速近邻法

近邻法中计算距离需要遍历,带来很大的计算量和存储量,为了改善这两方面的性能,有人提出采用分枝界定算法(Branch-Bound  Algorithm)来改进近邻法,主要分为两个阶段:1)利用人工划分或K-means聚类算法或其他动态聚类算法将样本集X划分成层级形式,形成一个树结构;2)利用树搜索算法找出与未知样本的最近邻。

1.层级划分

1)将样本集X划分成l个子集,每个子集再分成l个子集,不断这样划分下去,形成一个树状结构,如图:

这样划分完后,每个节点上都会有一部分样本;

2)将节点记作p,并对每个节点计算以下参数:

p节点上拥有的子集:Xp

p节点上样本子集Xp的样本数:Np

Xp中所有样本的样本均值(可看做是样本Centroid或圆心):Mp

Xp中离样本中心Mp最远样本和Mp之间的距离,相当于以Mp为圆心的圆的半径:

2.判断某未知样本x的最近邻是否在某个节点的子集上

对于该判断,有两个规则:

1)规则一:若满足:,则不可能是x的最近邻;

其中,B是Xp中当前搜索到的样本到待识样本x的最近距离,该值在算法初始时置为

该规则的解释是:如果Xp中的某一个样本xi到圆心Mp的距离比其中到圆心Mp最大的距离(即半径)与上一次搜索中找到的最近邻距离之和还要大很多,说明样本xi必然是远离Xp中样本组成的圆的,所以不可能是x的最近邻,如图可示:

2)规则二:若满足:,则不可能是x的最近邻;

这条规则是针对最后一层树枝节点提出的,如果搜索算法进行到了最后一层节点,那么为了避免把最后一层的所有节点都计算一次距离,就可以利用这一规则来进行剔除;

该规则的解释意义同规则一类似:如果待识样本x与圆心Mp的距离大于Xp中某个样本xi到圆心Mp的距离与当前B的和,表明x离xi所在节点比较远,xi也不会是x的最近邻,同样可以根据上图来理解。

3.树搜索算法

1)从第一级开始,即L=0,p=0,当前初始最近邻距离B=0;

2)对当前节点分别计算圆心Mp和半径rp;

3)对当前节点p的所有直接后继子节点进行保存,分别计算其到圆心Mp的距离D(x,Mp);

4)根据规则一,对当前节点的所有直接后继子节点进行判断,将所有满足规则一的节点直接剔除;

5)如果保存的节点当前为空,则回退到上一层,即L=L-1;如果L=0,就停止,否则跳至4);如果保存的节点中有多于一个的节点存在,则跳至6);

6)在已保存的节点中找到最近节点p1,方法是计算D(x,Mp),值最小的就是最近的节点p1,因而将p1节点置为当前节点,并清空已保存的节点目录;如果当前节点p1处于的层级是最后一级,就跳至7),否则L=L+1,跳至2);

7)对当前节点p1中的每个样本xi使用规则二来进行最近邻的判断;只要满足规则二的样本xi,就可以不用计算D(x,xi),不满足就计算,并将其与当前得到的最近B进行比较,如果比当前的最近还小,那么就认为找到了比当前最近还要近的样本,则更新B:B=D(x,xi),并把这个最近样本的下标位置保存下来:NN=i;对所有样本进行上述判断后,跳至4);

8)输出待识未知样本x的最近邻,以及距离

4.对于k近邻的改进

上面是对最近邻做了计算上的改进,对于k近邻,基本上与上面介绍的算法类似,只需要稍稍做些小改动:

1)首先根据最近邻得到的最邻近距离,按照实际情况给出恰当的k个邻近距离表;

2)首先B的初始值:设为x到k个近邻中的最远的那个近邻之间的距离;

3)在上面步骤7)中,每计算一个距离后,就与邻近距离表中的k歌距离进行比较,如果这个距离比表中任何一个距离都要小,那么就果断剔除掉表中距离最大的而一个,也就是放弃第k个;

时间: 2024-10-09 20:14:04

模式识别(Pattern Recognition)学习笔记(二十七)-- 基于树搜索算法的快速近邻法的相关文章

angular学习笔记(二十七)-$http(5)-使用$http构建RESTful架构

在angular中有一个特别为RESTful架构而定制的服务,是在$http的基础上进行了封装. 但是为了学习,我们先看看用直接$http是如何构建RESTful架构的: 假设有一个银行卡的列表.需要的功能有: 可以通过id来获取用户123的指定id的卡     'GET'  'card/user/123/id' 可以获取用户123的所有的银行卡             'GET'  'card/user/123' 可以更新用户123的指定id的卡                'POST' '

【Unity 3D】学习笔记二十七:unity游戏脚本(七)

使用C#编写游戏脚本 在前面提到,unity支持三种语言编写脚本:js,C#,boo.入门的时候建议只用js,因为js比较简单易懂,语法也不是很严格.但后来晋级的时候推荐使用C#,因为它比较符合unity的编程思想,执行效率更高.下面总结下怎么使用C#编写脚本. 继承MonoBehaviour类 在unity中,任何一个脚本,包括上述三种语言都需要去继承MonoBehaviour这个类.为什么我们之前写JS代码的时候没有继承咧?因为在创建JS代码的时候,系统会将其类名与继承关系隐藏起来. 在pr

Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图

Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图 ExpandableListView可折叠列表 这一节我们介绍第三个用适配器的控件,ExpandableListView可折叠列表.这个控件可以实现我们在QQ中非常常见好友分组功能,ExpandableListView是ListView的子类,用法跟ListView差不多,下面我们来学习这个控件的基本使用: 常用属性: android:childDivider:指定各组内子类表项之间的分隔条,

[傅里叶变换及其应用学习笔记] 二十七. 高维傅里叶变换,复习

这节课主要讲傅里叶变换的计算,由于高维傅里叶变换有多个变量,多重积分,因此在计算时会有较大的困难.不过某些函数会有较为简捷的计算方式,下面来分析两类这样的函数. 可分离函数 有一类函数的高维傅里叶变换能通过计算一系列低维傅里叶变换来得到,这类函数被称为可分离函数.(There's an important class of functions for which you can compute a higher-dimensional transform by computing a serie

Linux学习笔记<二十七>——DNS服务器配置实例

配置规划:(vmware9下RHEL5.8系统实现) 在cqy.com域中,在192.168.0.0/24网段 ns服务器:192.168.0.150: www服务器:192.168.0.151,192.168.0.152 mail服务器:192.168.0.153 ftp服务器是www服务器的别名 配置主从服务器,从服务器IP:192.168.0.160 主服务器内授权一个子服务器,IP:192.168.0.170,并实现子服务器可以解析父域 注意:必须确保服务器防火墙不阻隔dns流量 # s

Java基础学习笔记二十七 DBUtils和连接池

DBUtils 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简化开发工具包.需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具. DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. Dbutils三个核心功能介绍 QueryRunner中

PHP学习笔记二十七【重写】

<?php // class Animal{ public $name; protected $price; function cry(){ echo "动物在叫....<br/>"; } } class Dog extends Animal { //重写父类方法 //当子类的方法和父类的方法同名参数也一样,可以让子类的方法覆盖父类的方法 //访问修饰符可以不一样,但是满足子类的访问范围大于等于父类的访问范围 function cry(){ echo "狗在

ninject学习笔记二:单例模式singleton pattern

今天准备学习singleton pattern,顾单词思含义,就是一个实例的意思.单例的实现思路是:私有化构造函数,提供公有方法获取类的实例.下面定义一个音乐播放器类MusicPlayer,观察单例的实现方法 class MusicPlayer { private static readonly MusicPlayer player = new MusicPlayer(); private MusicPlayer() { } public static MusicPlayer GetInstan

马哥学习笔记二十四——分布式复制快设备drbd

DRBD: 主从 primary: 可执行读.写操作 secondary: 文件系统不能挂载 DRBD: dual primay, 双主(基于集群文件系统的高可用集群) 磁盘调度器:合并读请求,合并写请求: Procotol:drbd数据同步协议 A: Async, 异步  数据发送到本机tcp/ip协议栈 B:semi sync, 半同步  数据发送到对方tcp/ip协议 C:sync, 同步  数据到达对方存储设备 DRBD Source: DRBD资源 资源名称:可以是除了空白字符外的任意