多维时空数据的多层次异常检测方法与流程

文档序号:13072817阅读:505来源:国知局

本发明涉及数据挖掘和异常数据分析,具体的讲是多维时空数据的多层次异常检测方法。



背景技术:

传感器是常用于对环境状态属性数据感知的设备,其具有价格低廉、体积小、无需人工维护等特点。使用者在环境中部署传感器网络来达到监控环境的各种状态的目的。而通常检测的环境不是一直处于静止状态,是存在变化的,环境的变化最终会体现在传感器感知的数值的变化上。但是对于传感器来说,传感器读数的变化通常有两方面的原因所致:

(1)环境中发生了某些事情引起了环境数值变化。环境属性的数值变化会因为在环境中发生了不同事件,如火灾引起温度升高,降雨影响检测环境的湿度等。事件变化从而引起属性数值偏离了正常范围,是由于发生了事件导致的异常数据。这些是属性环境的正常变化,传感器采集是具有意义的正确数据。

(2)传感器受到各种干扰引起数值变化。具体来说有两方面原因:一方面是外界原因,一般来说所有的传感器都是直接部署的实际的物理环境当中,由于实际物理环境的复杂多变,容易受到外界的直接干扰,如噪音干扰,粉尘干扰;还有来自人为的故意干扰,这样就会造成传感器采集的数据有一定的错误;另一方面是自身原因,由于传感器具有一定的寿命,随着使用时间的增加,或不断经受外界的风吹日晒雨淋,传感器采集数据的精度以及采集数据的准确性都会有不同程度的减少。这样传感器采集的数据有一部分是错误数据。这类数据是没有用的,不能代表环境的状态。

对数据进行异常检测,区分出正确数据,事件异常数据和错误数据是非常重要的。目前传感器的数据异常检测可以分为基于欧式距离的异常检测和基于数据时空属性的检测两大类,它们在应用在多维相关性数据的异常检测上都有一定的不足性。其中:

(1)基于欧式距离的异常检测

其主要的思想就是利用大数据聚类的方法对采集的数据进行类的划分,根据每一个类划分数据的多少,然后找出离群点。判断一条采集的数据是属于哪一个类,依据就是这一条数据离类中心点的欧式距离的大小,离哪一个类的距离最少,就会把这条采集的数据划到那一个类。采用的是欧式距离,没有考虑当收集的是多维数据时,数据之间的关联性。

在实际情况中,一个系统对环境的检测会从多个方面采集数据,如温度、湿度、光照强度、大气压等。一条完整的数据会包含多个方面的信息,数据之间会有一定的关联性,如温度的高低就会对气体压强大小产生影响。例如在对温室大棚的监控中,会收集大棚里面的温度数据和压强数据,根据物理学的pv=nrt,在体积一定的情况下,气体压强和温度成正比。假设在一个系统中部署了大量的温度传感器和压强传感器,采集了一系列的温度和压强的数据集<t,p>:<26,110.5>,<26,110.6>,<26,110.4>,<26,110.3>,<24,110.4>,同时假设已经选取了中心点<25.100>。根据欧式距离的计算公式可以算出每一条数据的距离中心点的距离,它们距离中心点的欧式距离分别为:111.25,112.36,109.16,107.09,109.16。可以看出距离相差不大,因此这些数据会划分为同一类。但是可以看出数据<24,110.4>明显和其他数据对不相同,因为当气压在110左右时,根据规律温度的数值应该是26,因此这个数据应该是干扰产生的异常数据,是一个错误的数据,但是通过欧式距离的离群点检测没有检测出来。

(2)基于数据时空属性的检测

其主要的思想就是在传感器网络中,在针对一个区域的监控时,会部署大量的相同类型的传感器,并且由于通信距离的限制,部署位置的间隔距离不是很长;同时物理环境的变化时连续的,不会有突变的情况。基于上述的客观事实,对于单个传感器来说,在一个数据采集周期内连续采集的多个数据应该具有一定的相似性;并且在一定范围内的多个同类型的传感器由于都是采集的这个范围内的数据,这些传感器在同一时刻采集的数据应该具有一定会的相似性。根据这一特性针对上述采集的温度压强数据集<26,110.5>,<26,110.6>,<26,110.4>,<26,110.3>,<24,110.4>,根据数据的相似性可以判别出<24,110.4>这一数据是存在异常的。但是这种基于时空相关性检测的方法只有在异常数据出现的次数特别少的情况才有效。在实际情况中如果一个传感器受到干扰,可能在一个采用周期内异常的数据比正常的数据相差不大,甚至是异常数据占得比例更加多,如果通过基于时间相关来检测,就不能有效的检测出异常的数据,甚至会把异常的数据当作正常的数据来处理;同时传感器也可能大面积受到敌对方的故意干扰等情况,存在大面积传感器采集数据异常的可能性,导致地理位置相邻的传感器都有错误,这样通过数据的空间相关性检测不能有效检测出来,并且数据时空属性检查的都是单属性数据,没有考虑属性与属性之间的相关性。



技术实现要素:

本发明提供了一种多维时空数据的多层次异常检测方法,通过对异常数据进行属性之间的相关性检测,以能更准确的检测出异常数据,使其能够适用于高实时性要求的系统。

本发明的多维时空数据的多层次异常检测方法,包括:

a.具有传感数据层:包含了各种类型的传感器,用于采集各种属性的数据;

下沉层:收集同类型传感器上传的数据,每一种类型的传感器对应于下沉层的一个节点;

网关层:收集下沉层所有节点上传的数据;

b.通过数据挖掘技术在事先测量的历史事件异常数据中挖掘出具有相关性的属性,得到相关属性集合;针对相关属性集合的每一个元素,计算各属性的均值,通过均值计算得到关联属性数据的关联数据矩阵m,以及相关系数矩阵r;

c.在传感数据层上对各传感器进行基于数据时间相关性的异常检测:采集各传感器的数据,根据同一传感器的相邻数据计算数据的波动差值,根据波动差值的大小得到该传感器在该周期内采集的数据是否异常;将所有传感器的数据和检测结果传到下沉层的对应节点;

d.通过在下沉层的节点收集同类型传感器上传的数据和检测结果,进行基于数据空间相关性的异常检测和数据融合,将融合结果和异常检测结果上传到网关层:计算每个节点根据步骤c中对应的检测结果中异常数据所占该节点接收的总数据的比例,根据所述比例与阈值的大小关系对该节点的数据进行是否异常的标识;例如,如果异常数据的比例高于阈值c(c是基于空间相关性异常的阈值,取值为[0.7~0.9]中的任意一个数值),则说明异常数据占据主导地位,将该节点的数据标识为“异常”;如果比例低于阈值c,则说明正常数据占据主导地位,将该节点的数据标识为“正常”;

e.网关层收集下沉层所有节点上传的数据和异常检测结果,根据异常检测结果提取出异常属性集合。

本发现是先通过数据挖掘技术挖掘出多维属性之间具有相关性的属性,得到相关属性集合,然后针对传感器采集的各种数据,根据数据的时空相关性作数据异常检测,最后根据时空相关异常检测的结果作属性之间的关联异常检测。

具体的,步骤b包括:

b1.收集历史的事件异常数据集,提取出每一条事件异常数据里的异常属性和异常属性的数值,形成异常属性集合;

b2.根据异常属性集合,通过数据挖掘技术中的关联分析算法(如apriori算法),挖掘出异常属性集合中所有的相关属性,形成关联属性集合。

b3.针对每一条关联属性,根据属性的类别在步骤b1所述的事件异常数据集中找出对应的数值,形成关联数据矩阵m。

b4.针对每一条关联属性的数值,计算关联数据矩阵m的相关系数矩阵r。

进一步的,步骤b3中,计算从所述事件异常数据集中找出的对应数值的均值,通过均值计算得到所述的关联数据矩阵m。

具体的,步骤e包括:

e1.收集下沉层所有节点上传的属性数据和异常检测结果,构建属性数据集合和异常检测结果;

e2.根据异常检测结果中的属性提取出数据集合中对应的异常数据,形成异常数据集合;

e3.如果异常数据集合为空,则步骤c采集的所有数据为正确数据;如果异常数据集合不为空,判断形成的异常数据集合对应的属性是否在步骤b所述的相关属性集合中,如果不在,判断该属性对应的数据是错误数据;如果在,计算异常数据集合对应的相关系数矩阵;

e4.将所述相关系数矩阵和通过历史数据计算的对应属性的相关系数矩阵作相似性计算,把两个矩阵的每一行看作是一个向量,计算各向量夹角的余弦值,如果每一个余弦值都在预设范围(如范围为[d,1],其中d为设定的余弦阈值,d的取值为[0.7,0.9]内的任意一个数值)内,则两个关系矩阵是相似的,判断步骤c采集的数据是事件异常数据,如果至少有一个余弦值不在预设范围内,则两个关系矩阵不相似,判断步骤c采集的数据是错误数据。

本发明的多维时空数据的多层次异常检测方法,计算过程简单,通过计算数据的波动在时间上能够快速发现异常事件,再对数据的属性进行相关性检测,有效提高了异常数据的检出准确性。

以下结合实施例的具体实施方式,对本发明的上述内容再作进一步的详细说明。但不应将此理解为本发明上述主题的范围仅限于以下的实例。在不脱离本发明上述技术思想情况下,根据本领域普通技术知识和惯用手段做出的各种替换或变更,均应包括在本发明的范围内。

附图说明

图1为本发明短时交通流预测的方法的流程图。

具体实施方式

如图1所示本发明多维时空数据的多层次异常检测方法,设:属性集合a={a1,a2,a3……an},代表n种检测属性。每一次检测数据包含所有的属性数值信息,用数据集d表示,d={d1,d2,d3……dn},di表示属性ai的数值;同时每一条数据集d都会对应一个异常标记集合e,e={e1,e2,e3……en},ei表示数据di的异常状态,共3种状态,分别为正常数据、事件异常数据和错误数据,分别用整数0、1、2来表示。在一条数据集d中只要有一个数据是错误数据,那么这一条数据集d就是错误数据;如果一条数据集d中含有事件异常数据但是不含有错误数据,那么这是一条事件异常数据;如果只有正常数据,那么这是一条正常的数据。

检测方法的步骤包括:

a.具有传感数据层:包含了各种类型的传感器,用于采集各种属性的数据;

下沉层:收集同类型传感器上传的数据,每一种类型的传感器对应于下沉层的一个节点;

网关层:收集下沉层所有节点上传的数据;

b1.收集历史的事件异常数据集,提取出每一条事件异常数据里的异常属性和异常属性的数值,形成异常属性集合;

b2.根据异常属性集合,通过数据挖掘技术中的apriori关联分析算法,挖掘出异常属性集合中所有的相关属性,形成关联属性集合。

b3.针对每一条关联属性,根据属性的类别在步骤b1所述的事件异常数据集中找出对应的数值,并通过这些数值的均值形成关联数据矩阵m。

b4.针对每一条关联属性的数值,计算关联数据矩阵m的相关系数矩阵r。

以5种属性为例来说明b1~b4步骤:一条完整的数据集d={d1,d2,d3,d4,d5},包含5个数据,分别为5种属性值,会对应一个异常集合e={e1,e2,e3,e4,e5}。首先找出历史数据中事件异常数据,根据异常集合提取出异常属性集合。假如在一个异常集合中e1,e3,e5的值指示为事件异常,那么可以提取出异常属性集合{a1,a3,a5}。以此类推,对所有的事件异常数据处理完毕后,可以形成一个属性集a,其基本形式为:

a={

{a1,a3,a5},{a4,a5},{a1,a3},{ai,aj,ak,…}…….

}

在属性集a中的每一个单独的项就是一个事物,事物中的各种属性就是数据项,根据关联规则挖掘算法的apriori算法以及用户输入的最小支持度minsup(minsup的值为70%~90%中的一个任意值)可以得出属性集a中所有的频繁项目集合,频繁项目集合就是相关属性集合,形成相关属性数据库db_ra。

相关属性集合的形式和属性集合形式一样,然后对于相关属性集合中的任意一条相关属性{ai,aj,ak,……},计算这个集合的相关系数矩阵。假设一条关联属性有n个相关的属性(a1,a2,a3,……an),在历史事件异常数据中共有m条数据包含这n个相关属性,其基本步骤如下:

1.根据相关属性从事件异常数据中提取出对应的数据。从第一条数据中提取出这n个相关属性数据:{x11,x12,x13……x1n},从第二条数据中提取出这n个相关属性数据:{x21,x22,x23……x2n},从第m条数据中提取出的n个相关属性数据:{xm1,xm2,xm3……xm4}

2.所有提取出来的数据构建关联数据矩阵m为:

关联数据矩阵m的每一行代表了一个样本数据,每一列代表了一个属性的m个特征数据。第i列就代表属性ai的第m个数据,用xi来表示:xi=[x1i,x2i,x3i….xmi];

3.计算相关系数矩阵r:

其中代表的是属性ai和aj的相关程度。d(xi)代表的是向量xi的方差,cov(xi,xj)为xi和xj的协方差,计算公式如下:

cov(xi,xj)=e((xi-e(xi))(xj-e(xj)))

其中e(x)代表的是一组向量数据的期望。对所有的相关属性集合经过上述计算后,都有一个相关系数矩阵r对应,所有的相关系数矩阵r构成了相关系数矩阵数据库db_rm。

c.在传感数据层上对各传感器进行基于数据时间相关性的异常检测:采集各传感器的数据,根据同一传感器的相邻数据计算数据的波动差值,根据波动差值的大小得到该传感器在该周期内采集的数据是否异常;将所有传感器的数据和检测结果传到下沉层的对应节点。具体过程为:

假设一个传感器在一个周期内采集了n个数据,分别为d1,d2……dn。基于数据时间相关性的异常检测步如下:

1.初始化波动次数计数count=0,波动次数阈值b=n/3,设置幅度阈值a。

2.计算di和di+1的差值,(i<n)。diff=|di-di+1|。

3.如果diff>a,波动次数计数count=count+1。

4.如果i<n,回步骤2继续计算,否则转步骤5。

5.如果count>b,该传感数据层的异常检测标识e=1,代表数据异常,否则e=0,代表正常数据。

6.把n个数据经过数据融合算法(如求平均值的方法)合成一个数据d。

7.把融合后的数据d,异常检测标识e,传感器标号si,数据采集周期的起止时间tbegin和tend。五者组合成一个数据对t1,t1={si,d,e,tbegin,tend},把t1上传到si对应的下沉层节点。

d.通过在下沉层的节点收集同类型传感器上传的数据和检测结果,进行基于数据空间相关性的异常检测和数据融合,将融合结果和异常检测结果上传到网关层:计算每个节点根据步骤c中对应的检测结果中异常数据所占该节点接收的总数据的比例,根据所述比例与阈值的大小关系对该节点的数据进行是否异常的标识;如果异常数据的比例高于阈值c(c是基于空间相关性异常的阈值,取值为[0.7~0.9]中的任意一个数值),则说明异常数据占据主导地位,将该节点的数据标识为“异常”;如果比例低于阈值c,则说明正常数据占据主导地位,将该节点的数据标识为“正常”。具体为:

每一个下沉层的节点负责收集一种属性的数据对t1,下沉层节点的标号记为ski,代表收集第i个属性数据的节点。然后进行异常检测,检测结果为ei,i代表第i类属性,针对每一个节点,其进行基于数据空间相关性的异常检测和数据融合的步骤如下:

1.各节点收集对应的传感数据层上传的数据对t1。

2.根据时间标签tbegin和tend,选择具有相同时间标签的数据对t1,提取出里面的数据d以及异常检测标识e。

3.根据数据d构建数据集{d1,d2,d3,….,di},以及异常结果集{e_1,e_2,e_3,……e_i},di代表的是si传感器的数据,e_i代表的是传感器si上传数据中基于时间相关性的异常检测结果。

4.在异常结果集{e_1,e_2,e_3,……e_i}中,统计标识正常的检测个数count1以及标识数据异常的检测个数count2。

5.计算异常数据的比例p,p=count2/(count1+count2)。

6.如果p大于阈值c(c为[0.7~0.9]中的任意一个数值),那么基于空间相关性的异常检测标识ei的值设为1,否者设为0。

7.如果ei=1,选择数据集{d1,d2,d3,….,di}中标识异常的数据构建数据集xi,如果ei=0,选择数据集{d1,d2,d3,….,di}中标识正常的数据构建数据集xi。xi=[x1i,x2i,x3i…,xmi]。

8.把数据集xi,异常检测结果ei,节点的标号ski,以及数据集t1中的起止时间tbegin和tend。五者组合为数据对t2,t2={ski,xi,ei,tbegin,tend},把数据对t2上传到网关层。

e1.网关层收集下沉层所有节点上传的属性数据和异常检测结果,构建属性数据集合和异常检测结果;

e2.根据异常检测结果中的属性提取出数据集合中对应的异常数据,形成异常数据集合;

e3.如果异常数据集合为空,则步骤c采集的所有数据为正确数据;如果异常数据集合不为空,判断形成的异常数据集合对应的属性是否在步骤b所述的相关属性集合中,如果不在,判断该属性对应的数据是错误数据;如果在,计算异常数据集合对应的相关系数矩阵;e4.将所述相关系数矩阵和通过历史数据计算的对应属性的相关系数矩阵作相似性计算,把两个矩阵的每一行看作是一个向量,计算各向量夹角的余弦值,如果每一个余弦值都在预设范围[d,1]内,则两个关系矩阵是相似的,判断步骤c采集的数据是事件异常数据,如果至少有一个余弦值不在预设范围内,则两个关系矩阵不相似,判断步骤c采集的数据是错误数据。其中d为设定的余弦阈值,d的取值为[0.7,0.9]内的任意一个数值。

具体步骤为:

1.收集所有下沉层节点上传的t2类型的数据集。

2.根据时间标签tbegin和tend,提取出数据集d,d={x1,x2,x3,……},以及异常集合e,e={e1,e2,e3,…..}。两者是对应关系,di的异常检测结果由ei来指示。

3.如果ei指示异常,那么提出对应的异常属性ai。根据异常集合e,可以提取出异常属性集合ea,ea={ai,aj,ak……}。

4.如果异常属性集合ea为空集,那么数据集d判断为正常的数据集,转步骤9。如果异常属性集合ea不为空,判断异常属性集合ea是否在相关属性数据库db_ra内,如果不在相关属性数据库db_ra内,那么判断数据集d为错误数据,删除数据集d,转步骤10;如果异常属性集合ea在相关属性数据库db_ra内,转步骤5。

5.根据异常属性集合ea,在数据集d中提取出每一个异常属性对应的数据向量,构成异常数据矩阵ed,ed={xi,xj,xk….}。

6.根据异常数据矩阵ed,计算它的相关系数矩阵r’,其中n为相关属性的个数。

7.在所述的相关系数矩阵数据库db_rm中找出对应的相关系数矩阵r,计算相关系数矩阵r中每一行的cos的值。

得到cos集合,cos={cosai,cosaj,cosak}。

8.对cos集合中,每一个cos值和余弦阈值d做比较,如果存在cos值大于余弦阈值d的,则判断数据集d为错误数据,删除数据集d;如果cos值都小于阈值d,那么判断数据集d是一条事件异常数据。

9.把每一个xi向量数据融合成一个属性数据di,最后d={d1,d2,d3……}。

10.结束。

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