基于双树的高维向量空间样本快速搜索方法及装置制造方法及图纸

技术编号:27242874 阅读:25 留言:0更新日期:2021-02-04 12:15
基于双树的高维向量空间样本快速搜索方法及装置,从原始数据点集合中过滤出极少量数据点组成剪枝点集合,过滤剩余数据点组成被删点集合,剪枝点集合中数据点最大限度地保留原始数据点集合在多维空间中的分布形态,这样待查点在剪枝点集合中的最近邻点与待查点在完整集合中的第K个近邻点非常接近。利用剪枝点集合构成剪枝树,利用被删点集合构成被删树,由于剪枝点集合中数据点个数很少,因此可以在剪枝树内快速定位最近邻点,再利用这个近邻点作为初始近邻点,在被删树和完整树内搜索K近邻,由于初始近邻点位置不在固定,而是位于待查点附近,有效缩小了剪枝半径,减少空间距离计算和大小比较次数,改善了剪枝效果,提高整体查询效率。体查询效率。体查询效率。

【技术实现步骤摘要】
基于双树的高维向量空间样本快速搜索方法及装置


[0001]本专利技术涉及样本处理
,具体涉及一种基于双树的高维向量空间样本快速搜索方法及装置。

技术介绍

[0002]K近邻(K Nearest Neighbor,KNN)算法是指给定一个待查点,在多维向量空间样本点集合内查找与待查点最接近的K个样本点,如果这K个样本点中的大多数属于某一类别,则待查点也属于这一类别。K近邻搜索在很多数据分析问题中得到广泛应用,例如机器学习、地理信息系统、人工智能等领域。在面对高维、海量样本集合时,因需要与大量样本点计算和比较空间距离,造成计算量大,查询速度慢的问题,影响了KNN算法的实践应用。
[0003]针对KNN算法计算量大、查询效率低的问题,目前主要有以下改进方向:
[0004]第一、对样本集进行裁剪。例如现有技术中通过对样本集进行分析,从中剔除冗余元素,缩小样本集合,进而减少K近邻搜索阶段的计算量。但在面向高维、海量样本集时,样本集合缩减规模有限,仍面临计算量大的缺陷。
[0005]第二、采用并行计算架构提升K近邻查询速度。现有技术提出一种基于CUDA模型的并行KNN算法,采用通用矩阵乘提升距离计算速度,根据K值大小,分别采用两种方法对距离进行比较,这一并行计算方法有效提高了K近邻查询效率。
[0006]第三、采用空间分区数据结构,实现K近邻快速搜索。对样本点集合按照特定的几何形态进行划分,同时构造搜索二叉树,在K近邻查找阶段,通过比较空间距离,对二叉树进行剪枝处理,减少需要计算和比较距离的样本点数量,进而加快K近邻查询速度。常见的空间分区数据结构包括Metric-tree,Ball-tree,Cover-tree,VP-tree,MVP-tree,R-tree和KD-tree。
[0007]各种空间分区数据结构主要在以下三个方面存在区别,第一、分区的几何形状;第二、建立搜索树的空间划分策略;第三、利用数据结构进行搜索的策略。Ball-tree结构采用超球体对数据集进行划分,在K近邻查询方面有更多的优势,因此得到广泛应用。但是基于Ball-tree结构的K近邻算法初始K个近邻点位置固定,即Ball-tree结构最左侧K个叶节点,如待查点距离初始K个近邻点空间距离较近,则剪枝效果好,会有更多的数据点被剪枝滤除,进而获得更快的K近邻查询速度。但当待查点距离初始K个近邻点较远时,剪枝半径过大,剪枝效果差,仅有少量数据点被剪枝滤除,K近邻查询速度降低,在面对高维、海量样本集时,这一缺点尤为明显。

技术实现思路

[0008]为此,本专利技术提供一种基于双树的高维向量空间样本快速搜索方法及装置,最大限度地保留原始数据点集合在高维空间的分布形态,可以快速定位最近邻点,有效缩小了剪枝半径,改善了剪枝效果,提升K近邻查询效率。
[0009]为了实现上述目的,第一方面,本专利技术提供一种基于双树的高维向量空间样本快
速搜索方法,包括:
[0010]步骤1、在双树结构构造过程中,对每棵子树信息进行统计,将统计结果存入节点数组,所述节点数组中每个元素对应一棵子树的统计信息,统计信息包括子树内数据点个数,子树对应的超球体半径和子树对应的数据点集合,所述节点数组中的元素按照每棵子树内数据点个数降序排列,子树内数据点个数值相同的元素,按照所述子树对应的超球体半径升序排列;
[0011]步骤2、对数据点个数大于等于最大剪枝点数的每棵子树进行过滤处理,保留每棵子树中距离质心最近的数据点,将未被保留的数据点过滤删除并存入被删点集合;全部子树处理完毕后,将所述被删点集合中的数据点按照双树构造算法组成被删树;从全部样本点集合中去除被删点集合元素后的剩余元素组成剪枝点集合,将剪枝点集合中的数据点按照双树构造算法组成剪枝树;
[0012]步骤3、先在剪枝树内调用K近邻算法查找待查点的Kg个近邻点,其中1≤Kg≤K;之后分别用第1个和第Kg个近邻点作为被删树的初始近邻点,在被删树内查找所述待查点的K个近邻点,当找到的近邻个数不足K个时,将最近邻数组置空,在双树结构内查找所述待查点的K个近邻点;
[0013]步骤4、将原始数据集按照给定比例划分为测试集和训练集,利用随机算法生成若干组测试集和训练集,对每组测试集和训练集得到的最优查询参数计算平均值作为最终的最优参数值Kg,使给定数量的待查点在所述剪枝树和被删树内找到K个最近邻。
[0014]作为基于双树的高维向量空间样本快速搜索方法的优选方案,步骤2中,定义剪枝树为reduce_tree,定义被删树为pruned_tree;
[0015]输入参数为:待剪枝的数据点集合data;存储每棵子树统计信息的节点数组node_density,节点数组元素按照每棵子树内数据点个数point_num降序排列,point_num值相同的元素,按照子树对应的超球体半径radius升序排列;整数变量max_points表示最大剪枝点数;
[0016]输出参数为:一棵由被删除数据点构造的被删树pruned_tree,一棵由剪枝剩余数据点构造的剪枝树reduce_tree;
[0017]剪枝树reduce_tree和被删树pruned_tree构造步骤包括:
[0018]步骤2.1、令被删树数组存储被删除数据点,初值为空;令剪枝树数组存储剪枝剩余数据点,初值为空;
[0019]步骤2.2、将节点数组中数据点个数大于等于最大剪枝点数的全部元素构成集合T,T={T1,T2,

,Tn};按照数据点个数将子树分类,定义实数变量avg_max_radius表示已经剪枝的每棵子树的最大半径平均值,初值为T1.radius;定义整数变量current_point_num表示当前处理的这类子树数据点个数,初值为T1.point_num;定义实数变量previous_radius表示前一棵子树对应球体的半径,初值为T1.radius;定义整数变量i,初值为2;
[0020]步骤2.3、从集合T中取出元素Ti,如果Ti.point_num!=current_point_num,即当前这类子树处理完毕,则执行步骤2.6,否则执行步骤2.4;
[0021]步骤2.4、如果Ti.radius-previous_radius≤2或者Ti.radius<avg_max_radius,执行步骤2.5;否则,令i=i+1,如果i≤len(T),则执行步骤2.3,依次跳过这类子树中剩余子树,否则执行步骤2.7;
[0022]步骤2.5、令center为数据点集Ti.points的质心,min_dist_point为数据点集Ti.points中距离质心center最近的点,令pruned_tree=pruned_tree∪(Ti.points-min_dist_point),即将Ti.points中除min_dist_point之外的数据点并入pruned_tree数组;令previous_radius=Ti.radi本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于双树的高维向量空间样本快速搜索方法,其特征在于,包括:步骤1、在双树结构构造过程中,对每棵子树信息进行统计,将统计结果存入节点数组,所述节点数组中每个元素对应一棵子树的统计信息,统计信息包括子树内数据点个数,子树对应的超球体半径和子树对应的数据点集合,所述节点数组中的元素按照每棵子树内数据点个数降序排列,子树内数据点个数值相同的元素,按照所述子树对应的超球体半径升序排列;步骤2、对数据点个数大于等于最大剪枝点数的每棵子树进行过滤处理,保留每棵子树中距离质心最近的数据点,将未被保留的数据点过滤删除并存入被删点集合;全部子树处理完毕后,将所述被删点集合中的数据点按照双树构造算法组成被删树;从全部样本点集合中去除被删点集合元素后的剩余元素组成剪枝点集合,将剪枝点集合中的数据点按照双树构造算法组成剪枝树;步骤3、先在剪枝树内调用K近邻算法查找待查点的Kg个近邻点,其中1≤Kg≤K;之后分别用第1个和第Kg个近邻点作为被删树的初始近邻点,在被删树内查找所述待查点的K个近邻点,当找到的近邻个数不足K个时,将最近邻数组置空,在双树结构内查找所述待查点的K个近邻点;步骤4、将原始数据集按照给定比例划分为测试集和训练集,利用随机算法生成若干组测试集和训练集,对每组测试集和训练集得到的最优查询参数计算平均值作为最终的最优参数值Kg,使给定数量的待查点在所述剪枝树和被删树内找到K个最近邻。2.根据权利要求1所述的基于双树的高维向量空间样本快速搜索方法,其特征在于,步骤2中,定义剪枝树为reduce_tree,定义被删树为pruned_tree;输入参数为:待剪枝的数据点集合data;存储每棵子树统计信息的节点数组node_density,节点数组元素按照每棵子树内数据点个数point_num降序排列,point_num值相同的元素,按照子树对应的超球体半径radius升序排列;整数变量max_points表示最大剪枝点数;输出参数为:一棵由被删除数据点构造的被删树pruned_tree,一棵由剪枝剩余数据点构造的剪枝树reduce_tree;剪枝树reduce_tree和被删树pruned_tree构造步骤包括:步骤2.1、令被删树数组存储被删除数据点,初值为空;令剪枝树数组存储剪枝剩余数据点,初值为空;步骤2.2、将节点数组中数据点个数大于等于最大剪枝点数的全部元素构成集合T,T={T1,T2,

,Tn};按照数据点个数将子树分类,定义实数变量avg_max_radius表示已经剪枝的每棵子树的最大半径平均值,初值为T1.radius;定义整数变量current_point_num表示当前处理的这类子树数据点个数,初值为T1.point_num;定义实数变量previous_radius表示前一棵子树对应球体的半径,初值为T1.radius;定义整数变量i,初值为2;步骤2.3、从集合T中取出元素Ti,如果Ti.point_num!=current_point_num,即当前这类子树处理完毕,则执行步骤2.6,否则执行步骤2.4;步骤2.4、如果Ti.radius-previous_radius≤2或者Ti.radius<avg_max_radius,执行步骤2.5;否则,令i=i+1,如果i≤len(T),则执行步骤2.3,依次跳过这类子树中剩余子树,否则执行步骤2.7;
步骤2.5、令center为数据点集Ti.points的质心,min_dist_point为数据点集Ti.points中距离质心center最近的点,令pruned_tree=pruned_tree∪(Ti.points-min_dist_point),即将Ti.points中除min_dist_point之外的数据点并入pruned_tree数组;令previous_radius=Ti.radius,同时更新avg_max_radius值;令i=i+1,如果i≤len(T),则执行步骤2.3,否则执行步骤2.7;步骤2.6、令current_point_num=Ti.point_num,更新当前处理的这类子树的数据点计数current_point_num,执行步骤2.5;步骤2.7、令reduce_tree=data-pruned_tree,执行步骤2.1至步骤2.6构建全部被删数据点构成的被删树和全部剪枝剩余数据点构成的剪枝树。3.根据权利要求1所述的基于双树的高维向量空间样本快速搜索方法,其特征在于,步骤3中包括:步骤3.1、调用单树结构K近邻搜索算法,确定待查点target在剪枝树内的Kg个近邻点,找到的Kg个近邻点存储在reduce_tree.KNN_result数组内;步骤3.2、将待查点target在剪枝树内的最近邻点预置到被删除树的K近邻数组内,确定待查点target在被删树内的K个近邻点,当定位的近邻点个数num≥K时,查找结束,否则执行步骤3.3;步骤3.3、将待查点target在剪枝树内的最远近邻点预置到被删树的K近邻数组内,确定待查点target在被删树内的K个...

【专利技术属性】
技术研发人员:徐国天
申请(专利权)人:中国刑事警察学院
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1