一种度量空间离群检测方法及装置与流程

文档序号:17185779发布日期:2019-03-22 21:20阅读:168来源:国知局
一种度量空间离群检测方法及装置与流程

本公开涉及数据挖掘技术领域,具体涉及一种基于自适应密度峰值支撑点的度量空间离群检测方法。



背景技术:

度量空间离群检测方法适用于大多数数据类型,图像、音视频、蛋白质等复杂数据类型。但传统算法存在着索引效率低下、离群检测速度较慢等问题。下面以与本公开最为接近的iorca算法为例介绍度量空间离群检测方法。

orca算法是iorca算法的前身,它分块检测数据集,并应用简单的剪枝规则,一旦计算得对象的当前离群度低于topn离群点阈值,则该对象再也可能成为离群点(因为其所用的离群点定义就是该对象与其k最近邻的距离之和,或者该对象与其第k个最近邻的距离,显然随着k最近邻搜索的进行,离群度不可能增大),获得近似线性的检测速度,成为离群检测领域的state-of-art算法。

iorca算法是本领域代表性算法。算法发明者认为,离群点在数据集中占的比较非常小,因此被随机选中的概率非常低。故而该算法随机选取数据集一个对象作为支撑点,然后计算所有对象与其距离,再按降序排序,从而建立简单索引。基于该索引,相当于按照与支撑点的距离,从远到近检测离群点。实验表明该算法较orca算法检测速度有了很大的提升。

iorca算法的缺点

①iorca算法随机选取一个支撑点,算法性能波动较大,即如果离群点或者较稀疏处的正常点被选到,都会导致算法不能尽早结束而使性能下降。

②iorca算法每检测完一个数据块,才检查下一个数据块的首个对象是否符合终止规则(即能否直接作为非离群点排除,从而能够直接排除剩下所有未检测的对象,提前终止离群检测程序)。如此,终止程序的时机比较滞后。

③iorca算法未能充分发挥度量空间“三角不等性”作用来排除更多非离群点。



技术实现要素:

本公开提供一种度量空间离群检测方法及装置,与现有的iorca算法的缺点对应,本公开从多个随机选取的支撑点之中,选择密度最大(即密度峰值)的支撑点,实时检查当前正在检测的对象是否符合终止规则,对确认为非离群点的对象,使用度量空间“三角不等性”检查其k最近邻能否也作为非离群点而提前排除。

为了实现上述目的,根据本公开的一方面,提供一种度量空间离群检测方法,所述方法包括以下步骤:

步骤1,选取数据集自适应密度峰值的支撑点;

步骤2,根据支撑点建立数据集的度量空间支撑点索引;

步骤3,定义剪枝规则;

步骤4,根据剪枝规则与支撑点索引进行离群检测;

步骤5,输出离群点。

进一步地,在步骤1中,选取数据集自适应密度峰值的支撑点的方法包括以下步骤,

步骤1.1,随机选取数据集的m个候选支撑点,所述m为整数且由用户输入,一般为数据集规模的0.1%,如果该值小于10则设置为10,默认值为数据集规模的0.1%;

步骤1.2,计算数据集中所有对象,例如对象x,与第1个候选支撑点p1的距离并存储距离信息d(p1,x),并保存最大距离值maxdistance,将所有候选支撑点的密度值初始化为0;

步骤1.3,检查这些已经保存的距离信息,如果d(x,p1)<0.1*maxdistance,则候选支撑点p1的密度值加3,否则如果d(x,p1)<0.2*maxdistance,则候选支撑点p1的密度值加2;否则如果d(x,p1)<0.4*maxdistance,则候选支撑点p1的密度值加1;

步骤1.4,对于数据集的每个对象x与除第1个之外的其它每个候选支撑点pi,其中2≤i≤m,如果||d(p1,pi)-d(p1,x)||<0.4*maxdistance,则计算对象x与对象pi的距离d(x,pi),否则不必计算,即利用距离三角不等性避免不必要的距离计算;

步骤1.5,如果d(x,pi)<0.1*maxdistance,则候选支撑点pi的密度值加3;否则如果d(x,pi)<0.2*maxdistance,则候选支撑点pi的密度值加2;否则如果d(x,pi)<0.4*maxdistance,则候选支撑点pi的密度值加1;

步骤1.6,根据所有候选支撑点的密度值,取具有最大密度值的候选支撑点作为支撑点p输出。

其中,d(a,b)表示对象a与b的距离,针对不同的数据类型可使用不同的距离函数,例如多维数据使用欧几里德距离等。||a||表示式子a的绝对值,其中,密度值加1的意义为密度值累加1。

进一步地,在步骤1.1中,所述随机选取数据集的m个候选支撑点的方法包括以下步骤:

在读入数据集之后,获取数据集大小totalsize;

建立并初始化长度等于数据集大小(即totalsize)的整形数组startarray,数组元素内容与其下标相同,例如startarray[0]=0,startarray[2018]=2018,这个元素内容代表数据集里各个对象的id,即对象的唯一标识符;

使用编程语言对应的随机数生成器(例如c++,推荐使用mt19937随机数生成器),从startarray数组随机抽取1个元素,作为第1个候选支撑点,注意抽取的数组下标范围为0至totalsize-1(即范围大小为totalsize),假设被抽取元素下标为loc1;

将数组最后一个有效元素(下标为totalsize-1的元素)移至loc1,即令startarray[loc1]=startarray[totalsize-1];

使用随机数生成器,从startarray数组随机抽取1个元素,作为第2个候选支撑点,注意本次抽取的数组下标范围为0至totalsize-2(即范围大小为totalsize-1),假设被抽取元素下标为loc2;

将数组最后一个有效元素(下标为totalsize-2的元素)移至loc2,即令startarray[loc2]=startarray[totalsize-2];

依此类推,每次都从剩下的有效元素里随机抽取,然后把当前最后一个有效元素移至被抽取出的地方,直到抽取到m个元素,即一共抽取m次。

执行上述步骤,得到m个候选支撑点,所述m为整数的随机值。

进一步地,在步骤2中,根据支撑点建立数据集的度量空间支撑点索引的方法包括以下步骤,

步骤2.1,将整个数据集的所有对象与支撑点p计算距离,并保存这些距离信息,称为支撑点空间;

步骤2.2,将这些距离信息按从大到小排序,形成支撑点索引,后续进行离群检测时,即是按照索引顺序。

进一步地,在步骤3中,定义剪枝规则的方法包括以下步骤,

步骤3.1,假设给定d为数据集,c为离群度阈值,p为支撑点,x为离群检测方法正在检测的数据对象,d()为距离函数,nnk(p,d)表示对象p在数据集d中的第k最近邻;

步骤3.2,设定剪枝规则的终止规则为,如果d(x,p)+d(p,nnk(p,d))<c,那么离群检测过程能够终止并得到正确的结果;

步骤3.3,设定排除非k最近邻的对象约束为,如果||d(x,p)-d(xj,p)||>d(x,nnk(x,d)),即对象x与对象xj的支撑点空间距离大于x与其第k最近邻的距离,那么xj不可能为x的k最近邻;

步骤3.4,如果d(x,nnk(x,d))<0.5*c那么对象x及其k个最近邻都能够作为非离群点排除。

进一步地,在步骤4中,根据剪枝规则与支撑点索引进行离群检测的方法包括以下步骤,

输入:最近邻数量k,拟检测离群点数量n,数据集d,假设给定d为数据集,c为离群度阈值,p为支撑点,x为离群检测方法正在检测的对象,d()为距离函数,nnk(p,d)表示对象p在数据集d中的第k最近邻

输出:topn离群点

步骤4.1,读取支撑点索引;

步骤4.2,划分索引序列为数据块,得到离群检测顺序;

步骤4.3,离群度阈值初始化为0;

步骤4.4,按检测顺序逐数据块读取数据集;

步骤4.5,如果所有数据块都已检测,输出topn离群点检测结果;

步骤4.6,如果d(x,p)+d(p,nnk(p,d))<c成立,输出topn离群点检测结果;

步骤4.7,数据块每个对象(仍假设当前正在检测的对象为x)相对全局数据集以螺旋顺序(螺旋顺序搜索起点为该数据块的中点,假设当前搜索到对象xj)搜索k最近邻,如果||d(x,p)-d(xj,p)||>d(x,nnk(x,d)),那么xj不可能为x的k最近邻,则不计算距离,直接排除,一旦发现x的离群度低于阈值,如果d(x,nnk(x,d))<0.5*c那么对象x及其k个最近邻都能够作为非离群点排除;否则只将对象x从当前数据块移除;(注:搜索k最近邻的过程,实际上就是计算距离,看这个距离值是不是比对象x当前的第k最近邻更小,若更小,则把该对象插入x的k最近邻队列,并且该队列只保存与对象x距离最小的k个最近邻。)

步骤4.8,更新topn离群点、阈值;

步骤4.9,所有数据块检测完,得到topn离群点。

进一步地,在步骤5中,输出离群点为将离群点输出到数据库或者通过网络传输到服务器中进行存储。

优选地,根据剪枝规则与支撑点索引进行离群检测在初始化离群度阈值、topn离群点和数据块之后,调用支撑点选取算法选取自适应密度峰值支撑点,随后依据支撑点建立索引,并保存距离信息为支撑点空间,按照支撑点索引顺序,即从远到近的顺序逐数据块检测离群点

本公开还提供了一种度量空间离群检测装置,所述装置包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序运行在以下装置的单元中:

支撑点选取单元,用于选取数据集自适应密度峰值的支撑点;

索引建立单元,用于根据支撑点建立数据集的度量空间支撑点索引;

剪枝规则单元,用于定义剪枝规则;

离群检测单元,用于根据剪枝规则与支撑点索引进行离群检测;

结果输出单元,用于输出离群点。

本公开的有益效果为:本公开提供一种度量空间离群检测方法及装置,本公开是完全基于距离的离群点检测算法,对不同的数据类型具有很强的通用性。但与现有技术相比(包括但不限于iorca、orca算法),本公开在保持基于距离的通用性的同时,具有较高的检测效率,且兼容多种离群点定义。

具体而言,本公开具有以下4个有益效果:

1.本公开可快速选取到质量较好的支撑点(自适应密度峰值支撑点)。

2.本公开实时检查当前正在检测的对象是否符合终止规则,如果符合,立即终止离群检测程序并得到正确结果,有利于缩短程序运行时间。

3.本公开同时使用多个剪枝规则(特别是包括剪枝规则三)尽量排除非k最近邻和非离群点,从而减少距离计算次数。

4.建立索引时间开销较小,索引加速效果好。

附图说明

通过对结合附图所示出的实施方式进行详细说明,本公开的上述以及其他特征将更加明显,本公开附图中相同的参考标号表示相同或相似的元素,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还能够根据这些附图获得其他的附图,在附图中:

图1所示为基于自适应密度峰值支撑点的度量空间离群检测方法过程;

图2所示为本公开实施例的离群检测方法流程图;

图3所示为一种度量空间离群检测装置图。

具体实施方式

以下将结合实施例和附图对本公开的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本公开的目的、方案和效果。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征能够相互组合。

本公开是完全基于距离的离群点检测算法,对不同的数据类型具有很强的通用性。但与现有技术相比(包括但不限于iorca、orca算法),本公开在保持基于距离的通用性的同时,具有较高的检测效率,且兼容多种离群点定义。

如图1所示为根据本公开的基于自适应密度峰值支撑点的度量空间离群检测方法过程,下面结合图1来阐述根据本公开的实施方式的一种度量空间离群检测方法。

本公开提出一种度量空间离群检测方法,具体包括以下步骤:

如图1所示,本公开技术所指算法过程主要分为三部分:支撑点选取、建立度量空间索引、离群检测。各部分具体流程分别如下:

1.自适应密度峰值支撑点的选取方法:

本公开实施例的自适应密度峰值支撑点的选取方法,具体包括以下步骤:

步骤1.1,随机选取数据集的m个候选支撑点,所述m为整数且由用户输入,一般为数据集规模的0.1%,如果该值小于10则设置为10,默认值为数据集规模的0.1%;

步骤1.2,计算数据集中所有对象,例如对象x,与第1个候选支撑点p1的距离并存储距离信息d(p1,x),并保存最大距离值maxdistance,将所有候选支撑点的密度值初始化为0;

步骤1.3,检查这些已经保存的距离信息,如果d(x,p1)<0.1*maxdistance,则候选支撑点p1的密度值加3,否则如果d(x,p1)<0.2*maxdistance,则候选支撑点p1的密度值加2;否则如果d(x,p1)<0.4*maxdistance,则候选支撑点p1的密度值加1;

步骤1.4,对于数据集的每个对象x与除第1个之外的其它每个候选支撑点pi,其中2≤i≤m,如果||d(p1,pi)-d(p1,x)||<0.4*maxdistance,则计算对象x与对象pi的距离d(x,pi),否则不必计算,即利用距离三角不等性避免不必要的距离计算;

步骤1.5,如果d(x,pi)<0.1*maxdistance,则候选支撑点pi的密度值加3;否则如果d(x,pi)<0.2*maxdistance,则候选支撑点pi的密度值加2;否则如果d(x,pi)<0.4*maxdistance,则候选支撑点pi的密度值加1;

步骤1.6,根据所有候选支撑点的密度值,取具有最大密度值的候选支撑点作为支撑点p输出。

其中,d(a,b)表示对象a与b的距离,针对不同的数据类型可使用不同的距离函数,例如多维数据使用欧几里德距离等。||a||表示式子a的绝对值,其中,密度值加1的意义为密度值累加1。

进一步地,在步骤1.1中,所述随机选取数据集的m个候选支撑点的方法包括以下步骤:

在读入数据集之后,获取数据集大小totalsize;

建立并初始化长度等于数据集大小(即totalsize)的整形数组startarray,数组元素内容与其下标相同,例如startarray[0]=0,startarray[2018]=2018,这个元素内容代表数据集里各个对象的id,即对象的唯一标识符;

使用编程语言对应的随机数生成器(例如c++,推荐使用mt19937随机数生成器),从startarray数组随机抽取1个元素,作为第1个候选支撑点,注意抽取的数组下标范围为0至totalsize-1(即范围大小为totalsize),假设被抽取元素下标为loc1;

将数组最后一个有效元素(下标为totalsize-1的元素)移至loc1,即令startarray[loc1]=startarray[totalsize-1];

使用随机数生成器,从startarray数组随机抽取1个元素,作为第2个候选支撑点,注意本次抽取的数组下标范围为0至totalsize-2(即范围大小为totalsize-1),假设被抽取元素下标为loc2;

将数组最后一个有效元素(下标为totalsize-2的元素)移至loc2,即令startarray[loc2]=startarray[totalsize-2];

依此类推,每次都从剩下的有效元素里随机抽取,然后把当前最后一个有效元素移至被抽取出的地方,直到抽取到m个元素,即一共抽取m次。

执行上述步骤,得到m个候选支撑点,所述m为整数的随机值。

2.通过支撑点p建立数据集的度量空间索引

通过支撑点p建立数据集的度量空间索引的方法,具体包括以下步骤:

步骤2.1将整个数据集的所有对象与支撑点p计算距离,并保存这些距离信息(称为支撑点空间)。

步骤2.2,将这些距离信息按从大到小排序,形成支撑点索引,后续进行离群检测时,即是按照索引顺序。

3.离群检测

3.1剪枝规则

离群检测过程将使用基于距离三角不等性的3个定理作为剪枝规则,减少距离计算次数。现介绍剪枝规则。假设给定d为数据集,c为离群度阈值,p为支撑点,x为离群检测方法拟检测的任意对象,d()为距离函数,nnk(p,d)表示对象p在数据集d中的第k最近邻。

定理1(剪枝规则一):终止规则。

如果

d(x,p)+d(p,nnk(p,d))<c

那么离群检测过程能够终止并得到正确的结果。

定理2(剪枝规则二):排除非k最近邻的对象。

如果

||d(xt,p)-d(xj,p)||>d(xt,nnk(xt,d))

那么xj不可能为xt的k最近邻。

定理3(剪枝规则三):

如果

d(x,nnk(x,d))<0.5*c

那么对象x及其k个最近邻都能够作为非离群点排除。

3.2离群检测方法

如图2所示,以下为本公开实施例的离群检测方法流程,以伪代码描述算法流程如下:

输入:最近邻数量k,拟检测离群点数量n,数据集d

输出:topn离群点

1,读取支撑点索引;

2,划分索引序列为数据块,得到离群检测顺序;

3,离群度阈值初始化为0;

4,按检测顺序逐数据块读取数据集;

5,如果所有数据块都已检测,输出topn离群点检测结果;

6,如果剪枝规则一成立,输出topn离群点检测结果;

7,数据块每个对象(仍假设当前正在检测的对象为x)相对全局数据集以螺旋顺序(螺旋顺序搜索起点为该数据块的中点,假设当前搜索到对象xj)搜索k最近邻(如果剪枝规则二成立,不必计算距离,直接排除),一旦发现离群度低于阈值,如果剪枝规则三成立,那么对象x及其k个最近邻都作为非离群点排除;否则只将对象x从当前数据块移除;(注:搜索k最近邻的过程,实际上就是计算距离,看这个距离值是不是比对象x当前的第k最近邻更小,若更小,则把该对象插入x的k最近邻队列。)

8,更新topn离群点、阈值;

9,所有数据块检测完,得到topn离群点;

其中,离群检测方法在初始化离群度阈值、topn离群点和数据块之后,调用支撑点选取算法选取自适应密度峰值支撑点。随后依据支撑点建立索引,并保存距离信息为支撑点空间。如同iorca算法,按照从远到近的顺序逐数据块检测离群点。在检测过程中,首先判断每个数据块的每个对象是否使剪枝规则一成立,若成立,则终止整个离群检测过程,输出topn离群点检测结果。若不成立,则从索引序列上该数据块的中点对象开始,按照螺旋顺序搜索该数据块所有对象的k最近邻。在搜索k最近邻时,先计算剪枝规则二是否成立,若成立,则该对象不可能成为被检对象的k最近邻,不需要计算其真实距离。实时计算被检对象的当前离群度,如果小于离群度阈值c,如果剪枝规则三成立,则对象x的k个最近邻都作为非离群点排除,否则只从数据块移除对象x。每检测完一个数据块,更新topn离群点和离群度阈值。当所有数据块都检测完或者终止规则成立时,结束检测过程,输出topn离群点。

本公开需要保护的关键技术点总结

1.自适应密度峰值支撑点选取方法。

2.实时检查当前正在检测的对象是否符合终止规则,如果符合,立即终止离群检测程序并得到正确结果。

3.同时使用多个剪枝规则(特别是包括剪枝规则三)尽量排除非k最近邻和非离群点,从而减少距离计算次数。

本公开的实施例的整个过程能够采用其它方法来获得一样的检测结果(topn离群点),例如iorca算法和orca算法

其中,本公开技术方案中出现的名词及其解释如下所示:

支撑点空间坐标:对象与支撑点p的距离,称为支撑点空间坐标,例如d(x,p)为对象x的支撑点空间坐标。

支撑点空间距离:两个对象的支撑点空间坐标的差的绝对值,称为它们的支撑点空间距离,例如||d(xt,p)-d(xj,p)||称为对象xt与对象xj的支撑点空间距离,由距离的三角不等性可得知支撑点空间距离大于等于两个对象的距离,即有||d(xt,p)-d(xj,p)||≥d(xt,xj)。

离群度:一个对象的离群度表示其离群的程度,本发明以该对象与其第k个最近邻的距离值作为离群度。

数据块:离群检测的一个单位,由数据集中的若干个对象组成,例如常用1000个对象作为一个数据块。

topn离群点:整个数据集之中,离群度最大的n个对象(点)。

离群度阈值:topn离群点的第n个离群点的离群度。

螺旋顺序:例如有一个索引序列1、2、3、4、5、6、7、8、9、10,如果以5为起点,它的螺旋顺序就是5、4、6、3、7、2、8……,或者5、6、4、7、3、8、2……,就是一前一后、依此类推的意思。

本公开的实施例提供的一种度量空间离群检测装置,如图3所示为本公开的一种度量空间离群检测装置图,该实施例的一种度量空间离群检测装置包括:处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述一种度量空间离群检测装置实施例中的步骤。

所述装置包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序运行在以下装置的单元中:

支撑点选取单元,用于选取数据集自适应密度峰值的支撑点;

索引建立单元,用于根据支撑点建立数据集的度量空间支撑点索引;

剪枝规则单元,用于定义剪枝规则;

离群检测单元,用于根据剪枝规则与支撑点索引进行离群检测;

结果输出单元,用于输出离群点。

所述一种度量空间离群检测装置能够运行于桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备中。所述一种度量空间离群检测装置,可运行的装置可包括,但不仅限于,处理器、存储器。本领域技术人员能够理解,所述例子仅仅是一种度量空间离群检测装置的示例,并不构成对一种度量空间离群检测装置的限定,能够包括比例子更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述一种度量空间离群检测装置还能够包括输入输出设备、网络接入设备、总线等。

所称处理器能够是中央处理单元(centralprocessingunit,cpu),还能够是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器能够是微处理器或者该处理器也能够是任何常规的处理器等,所述处理器是所述一种度量空间离群检测装置运行装置的控制中心,利用各种接口和线路连接整个一种度量空间离群检测装置可运行装置的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述一种度量空间离群检测装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器能够包括高速随机存取存储器,还能够包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

尽管本公开的描述已经相当详尽且特别对几个所述实施例进行了描述,但其并非旨在局限于任何这些细节或实施例或任何特殊实施例,而是应当将其视作是通过参考所附权利要求考虑到现有技术为这些权利要求提供广义的可能性解释,从而有效地涵盖本公开的预定范围。此外,上文以发明人可预见的实施例对本公开进行描述,其目的是为了提供有用的描述,而那些目前尚未预见的对本公开的非实质性改动仍可代表本公开的等效改动。

本公开提供的方法适用于科研领域,能够作为基于距离的离群点检测速度对比方法,应用方式是编程实现并导入拟检测数据集运行;也适用于工业领域,可应用于各类需要异常检测的场景,例如灾害气象检测预报、环境污染检测与溯源、异常企业检测、异常纳税检测等,应用方式是编程实现并导入拟检测数据集运行。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1