CN113378995B - 基于iDistance算法的不确定数据序列K近邻方法及系统 - Google Patents
基于iDistance算法的不确定数据序列K近邻方法及系统 Download PDFInfo
- Publication number
- CN113378995B CN113378995B CN202110780363.1A CN202110780363A CN113378995B CN 113378995 B CN113378995 B CN 113378995B CN 202110780363 A CN202110780363 A CN 202110780363A CN 113378995 B CN113378995 B CN 113378995B
- Authority
- CN
- China
- Prior art keywords
- answer
- distance
- heap
- data
- map
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000004364 calculation method Methods 0.000 claims description 28
- 238000013507 mapping Methods 0.000 claims description 23
- 238000010276 construction Methods 0.000 claims description 16
- 230000009191 jumping Effects 0.000 claims description 12
- 238000005192 partition Methods 0.000 claims description 11
- 238000012545 processing Methods 0.000 claims description 10
- 101150064138 MAP1 gene Proteins 0.000 claims description 6
- 125000004122 cyclic group Chemical group 0.000 claims 1
- 230000007334 memory performance Effects 0.000 abstract description 3
- 238000005516 engineering process Methods 0.000 description 2
- 238000005065 mining Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
- G06F18/2413—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on distances to training or reference patterns
- G06F18/24147—Distances to closest patterns, e.g. nearest neighbour classification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/213—Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Computation (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Software Systems (AREA)
- Medical Informatics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出基于iDistance算法的不确定数据序列K近邻方法及系统,结合了iDistance索引为样本扫描算法所需读取的不确定序列数据建立索引;索引后,本方案可以按需对样本数据进行读取,有效提升了现有样本扫描算法在大规模不确定序列数据库上进行K近邻查询的外存性能和速度。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种基于iDistance算法的不确定数据序列K近邻方法及系统。
背景技术
随着信息采集技术的发展进步和现实应用中需求的不断增大,不确定数据开始大量地出现。不确定数据已经广泛存在于各个应用领域,而传统的针对确定数据的管理和挖掘的技术无法有效地对这些数据进行处理,也就不能满足现实应用的要求。因此,针对不确定数据的管理和挖掘的问题开始进入人们的视野,并得到越来越多的重视。
K近邻算法是在数据挖掘与机器学习中一种简单而常用的监督学习算法,在解决分类问题和回归问题中都有应用。公开号为CN1538326A的中国发明专利申请于2004年10月20日公开了一种用于视频片段快速相似查询的k近邻方法,其基本步骤为:对待查询视频片段中的每一帧,用Ordered VA-File在视频数据库找出它的T×k个近邻,即T×k个相似的视频帧;然后,将所有查询结果按照它们在视频数据库中出现的先后位置关系排序,如果数据库中的一帧同时属于多个查询帧的T×k的近邻,记录下这些帧的帧序号;最后,对该序列进行窗口扫描,返回相似度最大的k个视频片段。该方案虽然极大地减少了视频片段相似查询时磁盘访问代价和CPU计算代价,但其并不适用于不确定序列模型的K近邻问题,且在样本扫描过程中缺乏堆数据集的索引,间接地影响了算法地速度。
发明内容
本发明的目的是针对现有技术存在的缺陷,提供一种能高效解决不确定序列的k近邻问题的基于iDistance算法的不确定数据序列K近邻方法及系统。
为解决上述技术问题,本发明的技术方案如下:
基于iDistance算法的不确定数据序列K近邻方法,包括以下步骤:
S1:获取待计算的数据集,包括所有不确定序列和查询序列;
S2:基于iDistance算法选取一组参考点,为数据集建立索引;
S3:计算查询序列与每个参考点的距离;
S4:初始化当前距离d和选取距离增量deld;
S5:新建以距离distance为键值的小顶堆heap1和heap2,heap1用于维护查询序列的距离d范围内的样本的信息,heap2用于维护已从索引中读取并计算与查询序列间距离但不在距离d范围内的样本的信息;
S6:构建第一数组、第二数组和控制变量,并对第一数组、第二数组和控制变量进行初始化;
S7:构建数据结构并进行初始化;
S8:对heap1、heap2、第一数组、第二数组、数据结构、控制变量进行循环计算更新,最终获取数据结构中维护的答案。
其中,所述步骤S2具体包括以下步骤:
S21:在数据空间中选取一组参考点ref1,ref2,…,refrefn,用以将空间划分成多个分区;选取一个远大于数据点间距的常数c,用以错开不同分区的数据点计算出的索引键值;
S22:基于iDistance算法新建B+树btree;
S23:对数据集D中的每个不确定序列Xi∈D的每个样本执行以下步骤:
1)计算与每个参考点的距离/>
2)找出与距离最近的参考点/>以及对应距离
3)计算样本的索引键值key=pid*c+dis;
4)以key为键值将样本数据插入到btree中。
其中,在所述步骤S3中,计算查询序列Q与每个参考点refrefi的距离disrefrefi=dist(Q,refrefi);在所述步骤S6中,构建并初始化长度为N的第一数组scanned和第二数组res,使其所有元素为0;初始化变量logp=N*lnm;在所述步骤S7中,构建并初始化大小为k的数据结构answer;
所述步骤S8中,具体循环计算以下步骤:
S81:若堆heap1为空,更新heap1;
S82:若弹出heap1堆顶元素(i,dis);
S83:计算当前样本对其所属的不确定序列Xi j的最邻近概率PNN(Q,Xi)的贡献elogp -ln(m-scanned[i])-N*lnm,将其更新累加到res数组的对应元素res[i]中;
S84:以(i,res[i])更新数据结构answer;
S85:更新数组scanned的对应元素使scanned[i]+=1;
S86:判断scanned[i]是否与m相等,若相等,则跳出循环结束扫描过程;
S87:更新变量logp+=ln(m-scanned[i])-ln(m-scanned[i]+1);
S88:从数据结构answer中获取第k大与第k+1大之间的差值diff,判断diff>exp(logp-N*lnm)是否成立,若是,则跳出循环结束扫描过程。
其中,在所述步骤S81中,所述更新heap1的过程具体为:
S811:更新当前距离d+=deld;
S812:对每个参考点refrefi,有:
根据三角不等式,若有则有:
据此计算Q的距离d范围内的样本数据的键值必定所属的范围,具体表示为:
lb=refi*c+disrefrefi-d,ub=refi*c+disrefrefi+d
读取btree上键值范围[lb,ub]内所有还未读取过的样本数据;
对读取的每个样本数据计算其与查询序列Q间的距离为:
并将(i,distance)插入堆heap2中;
S813:重复执行以下步骤,直至堆heap2为空或堆顶元素的distance>d:
1)弹出heap2堆顶元素(i,distance);
2)将(i,distance)插入到堆heap1中。
其中,在所述步骤S84中,数据结构answer中包含以概率p为键值的小顶堆answer.heap,将编号i映射到堆中节点的映射表answer.map,以及当前大小answer.size,以(i,p)更新数据结构answer的步骤如下:
在映射表answer.map中查询编号i,若i已存在,则找到堆中对应节点,将其对应值更新为p,并对堆进行调整使其重新满足小顶堆的条件;
若i不存在,判断当前数据结构answer是否已满,即判断当前大小answer.size是否等于k+1;
若未满,则向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中,再更新当前大小answer.size;
若已满,则取堆answer.heap堆顶元素(j,q),再判断p是否大于q,若不大于则结束,若大于,则:
将堆answer.heap的堆顶元素弹出;
删除映射表answer.map中以编号j为键值的项answer.map[j];
向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中。
其中,从数据结构answer中获取diff步骤具体为:
1)若未满(当前大小answer.size小于k+1),则直接返回值-1,否则进行下面的步骤;
2)令堆answer.heap堆顶键值为p0,堆顶左儿子键值为p1,堆顶右儿子键值为p2;
3)若p1<p2,返回p1-p0,否则返回p2-p0。
本方案还提出一种基于iDistance算法的不确定数据序列K近邻系统,用于实现基于iDistance算法的不确定数据序列K近邻方法,具体包括数据获取模块、索引建立模块、距离处理模块、小顶堆建立模块、数组构建模块、数据结构构建模块、循环计算模块;其中:
所述数据获取模块用于获取待计算的数据集,包括所有不确定序列和查询序列;
所述索引建立模块用于基于iDistance算法选取一组参考点,为数据集建立索引;
所述距离处理模块用于计算查询序列与每个参考点的距离,并初始化当前距离d和选取距离增量deld;
所述小顶堆建立模块用于新建以距离distance为键值的小顶堆heap1和heap2,heap1用于维护查询序列的距离d范围内的样本的信息,heap2用于维护已从索引中读取并计算与查询序列间距离但不在距离d范围内的样本的信息;
所述数组构建模块用于构建并初始化第一数组、第二数组和控制变量;
所述数据结构构建模块用于构建并初始化数据结构;
所述循环计算模块用于根据heap1、heap2、第一数组、第二数组、数据结构、控制变量进行循环计算更新,最终获取数据结构中维护的答案。
其中,在所述索引建立模块中,具体执行以下步骤:
在数据空间中选取一组参考点ref1,ref2,…,refrefn,用以将空间划分成多个分区;选取一个远大于数据点间距的常数c,用以错开不同分区的数据点计算出的索引键值;
基于iDistance算法新建B+树btree;
对数据集D中的每个不确定序列Xi∈D的每个样本执行以下步骤:
1)计算与每个参考点的距离/>
2)找出与距离最近的参考点/>以及对应距离
3)计算样本的索引键值key=pid*c+dis;
4)以key为键值将样本数据插入到btree中。
其中,在所述距离处理模块中,计算查询序列Q与每个参考点refrefi的距离disrefrefi=dist(Q,refrefi);在所述数组构建模块中,构建并初始化长度为N的第一数组scanned和第二数组res,使其所有元素为0;初始化变量logp=N*lnm;在所述数据结构构建模块用于构建并初始化大小为k的数据结构answer;
在所述循环计算模块中,具体执行以下步骤:
若堆heap1为空,更新heap1;
若弹出heap1堆顶元素(i,dis);
计算当前样本对其所属的不确定序列Xi j的最邻近概率PNN(Q,Xi)的贡献,将其更新累加到res数组的对应元素res[i]中;
以(i,res[i])更新数据结构answer;
更新数组scanned的对应元素使scanned[i]+=1;
判断scanned[i]是否与m相等,若相等,则跳出循环结束扫描过程;
更新变量logp+=ln(m-scanned[i])-ln(m-scanned[i]+1);
从数据结构answer中获取第k大与第k+1大之间的差值diff,判断diff>exp(logp-N*lnm)是否成立,若是,则跳出循环结束扫描过程。
其中,在所述循环计算模块中,所述更新heap1的过程具体为:
S811:更新当前距离d+=deld;
S812:对每个参考点refrefi,有:
根据三角不等式,若有则有:
据此计算Q的距离d范围内的样本数据的键值必定所属的范围,具体表示为:
lb=refi*c+disrefrefi-d,ub=refi*c+disrefrefi+d
读取btree上键值范围[lb,ub]内所有还未读取过的样本数据;
对读取的每个样本数据计算其与查询序列Q间的距离为:
并将(i,distance)插入堆heap2中;
S813:重复执行以下步骤,直至堆heap2为空或堆顶元素的distance>d:
1)弹出heap2堆顶元素(i,distance);
2)将(i,distance)插入到堆heap1中。
其中,在所述循环计算模块中,所述数据结构answer中包含以概率p为键值的小顶堆answer.heap,将编号i映射到堆中节点的映射表answer.map,以及当前大小answer.size,以(i,p)更新数据结构answer的步骤如下:
在映射表answer.map中查询编号i,若i已存在,则找到堆中对应节点,将其对应值更新为p,并对堆进行调整使其重新满足小顶堆的条件;
若i不存在,判断当前数据结构answer是否已满,即判断当前大小answer.size是否等于k+1;
若未满,则向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中,再更新当前大小answer.size;
若已满,则取堆answer.heap堆顶元素(j,q),再判断p是否大于q,若不大于则结束,若大于,则:
将堆answer.heap的堆顶元素弹出;
删除映射表answer.map中以编号j为键值的项answer.map[j];
向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中。
与现有技术相比,本发明技术方案的有益效果是:
本发明提出基于iDistance算法的不确定数据序列K近邻方法及系统,结合了iDistance索引为样本扫描算法所需读取的不确定序列数据建立索引;索引后,本方案可以按需对样本数据进行读取,有效提升了现有样本扫描算法在大规模不确定序列数据库上进行K近邻查询的外存性能和速度。
附图说明
图1为本发明所述方法的流程示意图;
图2为本发明所述系统的数据流向示意图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
下面结合附图和实施例对本发明的技术方案做进一步的说明。
实施例1
本发明解决的是特定不确定序列模型的K近邻问题,原有的样本扫描算法缺乏对数据集的索引,使得当对存储的外存中的数据进行查询时,算法需要读取所有的数据,极大影响了算法的熟读。因此,针对解决现有存在的缺乏对数据集的索引的问题,结合iDistance算法为不确定序列数据集建立索引。
在此不确定序列模型中,一个不确定序列包含多个样本,每个样本代表不确定序列的一种可能情况。具体有以下定义:
数据序列:一个长度为n的数据序列S是n个实数组成的序列:
不确定序列:一个长度为n的不确定序列X为一个包含m个长度为n的数据序列的多重集合:
X={Xj:1≤j≤m}
距离:给定用于衡量两个数据序列S1和S2之间的距离的距离度量dist(S1,S2),一个不确定序列X和一个数据序列Q之间的距离被定义为dist(X,Q):
Dist(X,Q)={diss(S,Q):S∈X}
最近邻概率:给定数据集D和查询序列Q,数据集中的某一不确定序列Xi∈D是Q的最近邻的概率PNN(Q,Xi),具体定义为:
问题:给定数据集D、查询序列Q和结果集大小k,top-k概率最近邻搜索Top-k-PNN(D,Q,k)的目标为找到数据集内的k个不确定序列Xi∈D,使得它们的最近邻概率PNN(Q,Xi)最大,即求:
s.t.|A|=k.
其中,通过对于PNN(Q,Xi)的计算式的分析,提出其中的一些项以对其进行改写。
更具体的,如图1所示,基于iDistance算法的不确定数据序列K近邻方法,包括以下步骤:
S1:获取待计算的数据集,包括所有不确定序列和查询序列;
S2:基于iDistance算法选取一组参考点,为数据集建立索引;
S3:计算查询序列与每个参考点的距离;
S4:初始化当前距离d和选取距离增量deld;
S5:新建以距离distance为键值的小顶堆heap1和heap2,heap1用于维护查询序列的距离d范围内的样本的信息,heap2用于维护已从索引中读取并计算与查询序列间距离但不在距离d范围内的样本的信息;
S6:构建第一数组、第二数组和控制变量,并对第一数组、第二数组和控制变量进行初始化;
S7:构建数据结构并进行初始化;
S8:对heap1、heap2、第一数组、第二数组、数据结构、控制变量进行循环计算更新,最终获取数据结构中维护的答案。
更具体的,所述步骤S2具体包括以下步骤:
S21:在数据空间中选取一组参考点ref1,ref2,…,refrefn,用以将空间划分成多个分区;选取一个远大于数据点间距的常数c,用以错开不同分区的数据点计算出的索引键值;
S22:基于iDistance算法新建B+树btree;
S23:对数据集D中的每个不确定序列Xi∈D的每个样本执行以下步骤:
1)计算与每个参考点的距离/>
2)找出与距离最近的参考点/>以及对应距离
3)计算样本的索引键值key=pid*c+dis;
4)以key为键值将样本数据插入到btree中。
更具体的,在所述步骤S3中,计算查询序列Q与每个参考点refrefi的距离disrefrefi=dist(Q,refrefi);在所述步骤S6中,构建并初始化长度为N的第一数组scanned和第二数组res,使其所有元素为0;初始化变量logp=N*lnm;在所述步骤S7中,构建并初始化大小为k的数据结构answer;
所述步骤S8中,具体循环计算以下步骤:
S81:若堆heap1为空,更新heap1;
S82:若弹出heap1堆顶元素(i,dis);
S83:计算当前样本对其所属的不确定序列Xi j的最邻近概率PNN(Q,Xi)的贡献elogp -ln(m-scanned[i])-N*ln m,将其更新累加到res数组的对应元素res[i]中;
S84:以(i,res[i])更新数据结构answer;
S85:更新数组scanned的对应元素使scanned[i]+=1;
S86:判断scanned[i]是否与m相等,若相等,则跳出循环结束扫描过程;
S87:更新变量logp+=ln(m-scanned[i])-ln(m-scanned[i]+1);
S88:从数据结构answer中获取第k大与第k+1大之间的差值diff,判断diff>exp(logp-N*lnm)是否成立,若是,则跳出循环结束扫描过程。
更具体的,在所述步骤S81中,所述更新heap1的过程具体为:
S811:更新当前距离d+=deld;
S812:对每个参考点refrefi,有:
根据三角不等式,若有则有:
据此计算Q的距离d范围内的样本数据的键值必定所属的范围,具体表示为:
lb=refi*c+disrefrefi-d,ub=refi*c+disrefrefi+d
读取btree上键值范围[lb,ub]内所有还未读取过的样本数据;
对读取的每个样本数据计算其与查询序列Q间的距离为:
并将(i,distance)插入堆heap2中;
S813:重复执行以下步骤,直至堆heap2为空或堆顶元素的distance>d:
1)弹出heap2堆顶元素(i,distance);
2)将(i,distance)插入到堆heap1中。
更具体的,在所述步骤S84中,数据结构answer中包含以概率p为键值的小顶堆answer.heap,将编号i映射到堆中节点的映射表answer.map,以及当前大小answer.size,以(i,p)更新数据结构answer的步骤如下:
在映射表answer.map中查询编号i,若i已存在,则找到堆中对应节点,将其对应值更新为p,并对堆进行调整使其重新满足小顶堆的条件;
若i不存在,判断当前数据结构answer是否已满,即判断当前大小answer.size是否等于k+1;
若未满,则向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中,再更新当前大小answer.size;
若已满,则取堆answer.heap堆顶元素(j,q),再判断p是否大于q,若不大于则结束,若大于,则:
将堆answer.heap的堆顶元素弹出;
删除映射表answer.map中以编号j为键值的项answer.map[j];
向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中。
更具体的,从数据结构answer中获取diff步骤具体为:
4)若未满(当前大小answer.size小于k+1),则直接返回值-1,否则进行下面的步骤;
5)令堆answer.heap堆顶键值为p0,堆顶左儿子键值为p1,堆顶右儿子键值为p2;
6)若p1<p2,返回p1-p0,否则返回p2-p0。
本方案结合了iDistance索引为样本扫描算法所需读取的不确定序列数据建立索引;在没有索引的情况下,样本扫描算法即使只需扫描很小的一部分样本,也仍然需要读取所有的样本数据,并计算它们与查询序列之间的距离。结合索引之后,算法可以按需对样本数据进行读取,这提升了样本扫描算法在大规模不确定序列数据库上进行K近邻查询的外存性能和速度。
实施例2
本方案还提出一种基于iDistance算法的不确定数据序列K近邻系统,用于实现基于iDistance算法的不确定数据序列K近邻方法,如图2所示,具体包括数据获取模块、索引建立模块、距离处理模块、小顶堆建立模块、数组构建模块、数据结构构建模块、循环计算模块;其中:
所述数据获取模块用于获取待计算的数据集,包括所有不确定序列和查询序列;
所述索引建立模块用于基于iDistance算法选取一组参考点,为数据集建立索引;
所述距离处理模块用于计算查询序列与每个参考点的距离,并初始化当前距离d和选取距离增量deld;
所述小顶堆建立模块用于新建以距离distance为键值的小顶堆heap1和heap2,heap1用于维护查询序列的距离d范围内的样本的信息,heap2用于维护已从索引中读取并计算与查询序列间距离但不在距离d范围内的样本的信息;
所述数组构建模块用于构建并初始化第一数组、第二数组和控制变量;
所述数据结构构建模块用于构建并初始化数据结构;
所述循环计算模块用于根据heap1、heap2、第一数组、第二数组、数据结构、控制变量进行循环计算更新,最终获取数据结构中维护的答案。
其中,在所述索引建立模块中,具体执行以下步骤:
在数据空间中选取一组参考点ref1,ref2,…,refrefn,用以将空间划分成多个分区;选取一个远大于数据点间距的常数c,用以错开不同分区的数据点计算出的索引键值;
基于iDistance算法新建B+树btree;
对数据集D中的每个不确定序列Xi∈D的每个样本执行以下步骤:
1)计算与每个参考点的距离/>
2)找出与距离最近的参考点/>以及对应距离
3)计算样本的索引键值key=pid*c+dis;
4)以key为键值将样本数据插入到btree中。
其中,在所述距离处理模块中,计算查询序列Q与每个参考点refrefi的距离disrefrefi=dist(Q,refrefi);在所述数组构建模块中,构建并初始化长度为N的第一数组scanned和第二数组res,使其所有元素为0;初始化变量logp=N*lnm;在所述数据结构构建模块用于构建并初始化大小为k的数据结构answer;
在所述循环计算模块中,具体执行以下步骤:
若堆heap1为空,更新heap1;
若弹出heap1堆顶元素(i,dis);
计算当前样本对其所属的不确定序列Xi j的最邻近概率PNN(Q,Xi)的贡献,将其更新累加到res数组的对应元素res[i]中;
以(i,res[i])更新数据结构answer;
更新数组scanned的对应元素使scanned[i]+=1;
判断scanned[i]是否与m相等,若相等,则跳出循环结束扫描过程;
更新变量logp+=ln(m-scanned[i])-ln(m-scanned[i]+1);
从数据结构answer中获取第k大与第k+1大之间的差值diff,判断diff>exp(logp-N*lnm)是否成立,若是,则跳出循环结束扫描过程。
其中,在所述循环计算模块中,所述更新heap1的过程具体为:
S811:更新当前距离d+=deld;
S812:对每个参考点refrefi,有:
根据三角不等式,若有则有:
据此计算Q的距离d范围内的样本数据的键值必定所属的范围,具体表示为:
lb=refi*c+disrefrefi-d,ub=refi*c+disrefrefi+d
读取btree上键值范围[lb,ub]内所有还未读取过的样本数据;
对读取的每个样本数据计算其与查询序列Q间的距离为:
并将(i,distance)插入堆heap2中;
S813:重复执行以下步骤,直至堆heap2为空或堆顶元素的distance>d:
1)弹出heap2堆顶元素(i,distance);
2)将(i,distance)插入到堆heap1中。
其中,在所述循环计算模块中,所述数据结构answer中包含以概率p为键值的小顶堆answer.heap,将编号i映射到堆中节点的映射表answer.map,以及当前大小answer.size,以(i,p)更新数据结构answer的步骤如下:
在映射表answer.map中查询编号i,若i已存在,则找到堆中对应节点,将其对应值更新为p,并对堆进行调整使其重新满足小顶堆的条件;
若i不存在,判断当前数据结构answer是否已满,即判断当前大小answer.size是否等于k+1;
若未满,则向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中,再更新当前大小answer.size;
若已满,则取堆answer.heap堆顶元素(j,q),再判断p是否大于q,若不大于则结束,若大于,则:
将堆answer.heap的堆顶元素弹出;
删除映射表answer.map中以编号j为键值的项answer.map[j];
向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
Claims (8)
1.基于iDistance算法的不确定数据序列K近邻方法,其特征在于,包括以下步骤:
S1:获取待计算的数据集,包括所有不确定序列和查询序列;
S2:基于iDistance算法选取一组参考点,为数据集建立索引;
S3:计算查询序列与每个参考点的距离;
S4:初始化当前距离d和选取距离增量deld;
S5:新建以距离distance为键值的小顶堆heap1和heap2,heap1用于维护查询序列的距离d范围内的样本的信息,heap2用于维护已从索引中读取并计算与查询序列间距离但不在距离d范围内的样本的信息;
S6:构建第一数组、第二数组和控制变量,并对第一数组、第二数组和控制变量进行初始化;
S7:构建数据结构并进行初始化;
S8:对heap1、heap2、第一数组、第二数组、数据结构、控制变量进行循环计算更新,最终获取数据结构中维护的答案;
其中,所述步骤S2具体包括以下步骤:
S21:在数据空间中选取一组参考点ref1,ref2,…,refrefn,用以将空间划分成多个分区;选取一个远大于数据点间距的常数c,用以错开不同分区的数据点计算出的索引键值;
S22:基于iDistance算法新建B+树btree;
S23:对数据集D中的每个不确定序列Xi∈D的每个样本执行以下步骤:
1)计算与每个参考点的距离/>
2)找出与距离最近的参考点/>以及对应距离
3)计算样本的索引键值key=pid*c+dis;
以key为键值将样本数据插入到btree中;
在所述步骤S3中,计算查询序列Q与每个参考点refrefi的距离disrefrefi=dist(Q,refrefi);在所述步骤S6中,构建并初始化长度为N的第一数组scanned和第二数组res,使其所有元素为0;初始化变量logp=N*lnm;在所述步骤S7中,构建并初始化大小为k的数据结构answer;
所述步骤S8中,具体循环计算以下步骤:
S81:若堆heap1为空,更新heap1;
S82:若弹出heap1堆顶元素(i,dis);
S83:计算当前样本对其所属的不确定序列的最邻近概率PNN(Q,Xi)的贡献,将其更新累加到res数组的对应元素res[i]中;
S84:以(i,res[i])更新数据结构answer;
S85:更新数组scanned的对应元素使scanned[i]+=1;
S86:判断scanned[i]是否与m相等,若相等,则跳出循环结束扫描过程;
S87:更新变量logp+=ln(m-scanned[i])-ln(m-scanned[i]+1);
S88:从数据结构answer中获取第k大与第k+1大之间的差值diff,判断diff>exp(logp-N*lnm)是否成立,若是,则跳出循环结束扫描过程。
2.根据权利要求1所述的基于iDistance算法的不确定数据序列K近邻方法,其特征在于,在所述步骤S81中,所述更新heap1的过程具体为:
S811:更新当前距离d+=deld;
S812:对每个参考点refrefi,有:
根据三角不等式,若有则有:
据此计算Q的距离d范围内的样本数据的键值必定所属的范围,具体表示为:
lb=refi*c+disrefrefi-d,ub=refi*c+disrefrefi+d
读取btree上键值范围[lb,ub]内所有还未读取过的样本数据;
对读取的每个样本数据计算其与查询序列Q间的距离为:/>并将(i,distance)插入堆heap2中;
S813:重复执行以下步骤,直至堆heap2为空或堆顶元素的distance>d:
1)弹出heap2堆顶元素(i,distance);
2)将(i,distance)插入到堆heap1中。
3.根据权利要求2所述的基于iDistance算法的不确定数据序列K近邻方法,其特征在于,在所述步骤S84中,数据结构answer中包含以概率p为键值的小顶堆answer.heap,将编号i映射到堆中节点的映射表answer.map,以及当前大小answer.size,以(i,p)更新数据结构answer的步骤如下:
在映射表answer.map中查询编号i,若i已存在,则找到堆中对应节点,将其对应值更新为p,并对堆进行调整使其重新满足小顶堆的条件;
若i不存在,判断当前数据结构answer是否已满,即判断当前大小answer.size是否等于k+1;
若未满,则向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中,再更新当前大小answer.size;
若已满,则取堆answer.heap堆顶元素(j,q),再判断p是否大于q,若不大于则结束,若大于,则:
将堆answer.heap的堆顶元素弹出;
删除映射表answer.map中以编号j为键值的项answer.map[j];
向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中。
4.如权利要求1~3任一项所述的基于iDistance算法的不确定数据序列K近邻方法的基于iDistance算法的不确定数据序列K近邻系统,其特征在于,包括数据获取模块、索引建立模块、距离处理模块、小顶堆建立模块、数组构建模块、数据结构构建模块、循环计算模块;其中:
所述数据获取模块用于获取待计算的数据集,包括所有不确定序列和查询序列;
所述索引建立模块用于基于iDistance算法选取一组参考点,为数据集建立索引;
所述距离处理模块用于计算查询序列与每个参考点的距离,并初始化当前距离d和选取距离增量deld;
所述小顶堆建立模块用于新建以距离distance为键值的小顶堆heap1和heap2,heap1用于维护查询序列的距离d范围内的样本的信息,heap2用于维护已从索引中读取并计算与查询序列间距离但不在距离d范围内的样本的信息;
所述数组构建模块用于构建并初始化第一数组、第二数组和控制变量;
所述数据结构构建模块用于构建并初始化数据结构;
所述循环计算模块用于根据heap1、heap2、第一数组、第二数组、数据结构、控制变量进行循环计算更新,最终获取数据结构中维护的答案。
5.根据权利要求4所述的基于iDistance算法的不确定数据序列K近邻系统,其特征在于,在所述索引建立模块中,具体执行以下步骤:
在数据空间中选取一组参考点ref1,ref2,…,refrefn,用以将空间划分成多个分区;选取一个远大于数据点间距的常数c,用以错开不同分区的数据点计算出的索引键值;
基于iDistance算法新建B+树btree;
对数据集D中的每个不确定序列Xi∈D的每个样本执行以下步骤:
1)计算与每个参考点的距离/>
2)找出与距离最近的参考点/>以及对应距离
3)计算样本的索引键值key=pid*c+dis;
4)以key为键值将样本数据插入到btree中。
6.根据权利要求5所述的基于iDistance算法的不确定数据序列K近邻系统,其特征在于,在所述距离处理模块中,计算查询序列Q与每个参考点refrefi的距离disrefrefi=dist(Q,refrefi);在所述数组构建模块中,构建并初始化长度为N的第一数组scanned和第二数组res,使其所有元素为0;初始化变量logp=N*lnm;在所述数据结构构建模块用于构建并初始化大小为k的数据结构answer;
在所述循环计算模块中,具体执行以下步骤:
若堆heap1为空,更新heap1;
若弹出heap1堆顶元素(i,dis);
计算当前样本对其所属的不确定序列的最邻近概率PNN(Q,Xi)的贡献,将其更新累加到res数组的对应元素res[i]中;
以(i,res[i])更新数据结构answer;
更新数组scanned的对应元素使scanned[i]+=1;
判断scanned[i]是否与m相等,若相等,则跳出循环结束扫描过程;
更新变量logp+=ln(m-scanned[i])-ln(m-scanned[i]+1);
从数据结构answer中获取第k大与第k+1大之间的差值diff,判断diff>exp(logp-N*lnm)是否成立,若是,则跳出循环结束扫描过程。
7.根据权利要求6所述的基于iDistance算法的不确定数据序列K近邻系统,其特征在于,在所述循环计算模块中,所述更新heap1的过程具体为:
S811:更新当前距离d+=deld;
S812:对每个参考点refrefi,有:
根据三角不等式,若有则有:
据此计算Q的距离d范围内的样本数据的键值必定所属的范围,具体表示为:
lb=refi*c+disrefrefi-d,ub=refi*c+disrefrefi+d
读取btree上键值范围[lb,ub]内所有还未读取过的样本数据;
对读取的每个样本数据计算其与查询序列Q间的距离为:/>并将(i,distance)插入堆heap2中;
S813:重复执行以下步骤,直至堆heap2为空或堆顶元素的distance>d:
1)弹出heap2堆顶元素(i,distance);
2)将(i,distance)插入到堆heap1中。
8.根据权利要求7所述的基于iDistance算法的不确定数据序列K近邻系统,其特征在于,在所述循环计算模块中,所述数据结构answer中包含以概率p为键值的小顶堆answer.heap,将编号i映射到堆中节点的映射表answer.map,以及当前大小answer.size,以(i,p)更新数据结构answer的步骤如下:
在映射表answer.map中查询编号i,若i已存在,则找到堆中对应节点,将其对应值更新为p,并对堆进行调整使其重新满足小顶堆的条件;
若i不存在,判断当前数据结构answer是否已满,即判断当前大小answer.size是否等于k+1;
若未满,则向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中,再更新当前大小answer.size;
若已满,则取堆answer.heap堆顶元素(j,q),再判断p是否大于q,若不大于则结束,若大于,则:
将堆answer.heap的堆顶元素弹出;
删除映射表answer.map中以编号j为键值的项answer.map[j];
向堆answer.heap中插入新值(i,p),并将对应节点位置保存在映射表answer.map以编号i为键值的项answer.map[i]中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110780363.1A CN113378995B (zh) | 2021-07-09 | 2021-07-09 | 基于iDistance算法的不确定数据序列K近邻方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110780363.1A CN113378995B (zh) | 2021-07-09 | 2021-07-09 | 基于iDistance算法的不确定数据序列K近邻方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113378995A CN113378995A (zh) | 2021-09-10 |
CN113378995B true CN113378995B (zh) | 2024-03-12 |
Family
ID=77581669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110780363.1A Active CN113378995B (zh) | 2021-07-09 | 2021-07-09 | 基于iDistance算法的不确定数据序列K近邻方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113378995B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102306202A (zh) * | 2011-09-30 | 2012-01-04 | 中国传媒大学 | 一种基于街区距离的高维向量快速检索算法 |
CN106778869A (zh) * | 2016-12-16 | 2017-05-31 | 重庆邮电大学 | 一种基于参考点的快速精确近邻分类算法 |
CN106844664A (zh) * | 2017-01-20 | 2017-06-13 | 北京理工大学 | 一种基于摘要的时间序列数据索引构建方法 |
CN109189819A (zh) * | 2018-07-12 | 2019-01-11 | 华南师范大学 | 一种移动k近邻差异化查询方法、系统及装置 |
CN109325032A (zh) * | 2018-09-18 | 2019-02-12 | 厦门市美亚柏科信息股份有限公司 | 一种索引数据存储及检索方法、装置及存储介质 |
-
2021
- 2021-07-09 CN CN202110780363.1A patent/CN113378995B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102306202A (zh) * | 2011-09-30 | 2012-01-04 | 中国传媒大学 | 一种基于街区距离的高维向量快速检索算法 |
CN106778869A (zh) * | 2016-12-16 | 2017-05-31 | 重庆邮电大学 | 一种基于参考点的快速精确近邻分类算法 |
CN106844664A (zh) * | 2017-01-20 | 2017-06-13 | 北京理工大学 | 一种基于摘要的时间序列数据索引构建方法 |
CN109189819A (zh) * | 2018-07-12 | 2019-01-11 | 华南师范大学 | 一种移动k近邻差异化查询方法、系统及装置 |
CN109325032A (zh) * | 2018-09-18 | 2019-02-12 | 厦门市美亚柏科信息股份有限公司 | 一种索引数据存储及检索方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113378995A (zh) | 2021-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107766555B (zh) | 基于软约束无监督型跨模态哈希的图像检索方法 | |
Liu et al. | Query-adaptive hash code ranking for large-scale multi-view visual search | |
Schindler et al. | City-scale location recognition | |
Ge et al. | Graph cuts for supervised binary coding | |
CN108304409B (zh) | 一种基于进位的Sketch数据结构的数据频度估计方法 | |
Liu et al. | Subgraph-augmented path embedding for semantic user search on heterogeneous social network | |
CN108549696B (zh) | 一种基于内存计算的时间序列数据相似性查询方法 | |
Ram et al. | Nearest-neighbor search on a time budget via max-margin trees | |
CN114579794A (zh) | 特征一致性建议的多尺度融合地标图像检索方法及系统 | |
CN113378995B (zh) | 基于iDistance算法的不确定数据序列K近邻方法及系统 | |
CN114330584A (zh) | 数据聚类方法、装置、存储介质以及电子设备 | |
CN110083732B (zh) | 图片检索方法、装置及计算机存储介质 | |
CN107133348B (zh) | 大规模图片集中基于语义一致性的近似搜索方法 | |
Feng et al. | Real-time SLAM relocalization with online learning of binary feature indexing | |
CN111177190B (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
CN110659375A (zh) | 哈希模型训练方法、相似对象检索方法及装置 | |
Babanejad et al. | Finding skyline points over dynamic incomplete database | |
US20120054196A1 (en) | System and method for subsequence matching | |
Ding et al. | kNN hashing with factorized neighborhood representation | |
CN111259176B (zh) | 融合有监督信息的基于矩阵分解的跨模态哈希检索方法 | |
CN115544306A (zh) | 一种基于特征融合哈希算法的多模态检索方法 | |
CN114896252A (zh) | 物联网设备的查询方法、装置、计算机设备及存储介质 | |
CN113344140A (zh) | 一种基于剪枝条件的不确定数据序列扫描方法及系统 | |
CN114048825A (zh) | 基于对比学习的聚类方法、系统、设备及存储介质 | |
CN110941730B (zh) | 基于人脸特征数据偏移的检索方法与装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |