本发明属于大数据管理技术领域,特别涉及一种基于并行Kalman算法的数据流异常检测方法。
背景技术:
对数据流的异常检测方法通常都需要繁杂的计算,还需要对数据进行修改和融合,这是一个复杂的过程,所以如何保证检测的准确性和效率至关重要。
现有技术中虽然也有Kalman算法,但是并没有考虑到时间、空间和其他起源信息,同时只是进行单项的计算以及检测。使得对于整体的数据流异常检测的精度不高,会造成检测过程中出现误差。
技术实现要素:
发明目的:本发明提供一种基于并行Kalman算法的数据流异常检测方法,能够解决数据流中异常检测的不准确性和效率低等问题。
本发明公开了一种基于并行Kalman算法的数据流异常检测方法,包含以下步骤:
步骤一:获取一段传感器的测量数据,主要为实时水位测量值;
步骤二:将传感器当前的测量值与前一段时间的测量值进行比较,判断测量值是否稳定无变化;如果测量值在一段时间内没有变化,那就将数据进行概要提取,然后将数据存入数据库;如果测量值与前一段时间的数据有一个不同,那就进入步骤三;
步骤三:将步骤二中的测量值通过Kalman算法计算出估计值,并将估计值与测量值之间差的绝对值与给定的阈值进行比较,如果小于阀值则判定为正常值并进行概要提前然后存入数据库,反之判定为异常值并进入步骤四;
步骤四:根据传感器前一段时间的测量值计算时间影响因子,如果时间影响因子小于阈值,则判定为错误值,异常类型为单值异常,然后记录并修正替换异常值然后存入数据库,否则进入步骤五;
步骤五:根据与传感器位置相关联的传感器的测量值计算空间影响因子,如果空间影响因子小于阈值,则判定为错误值,异常类型为单个传感器连续异常,记录异常并修正然后存入数据库,根据传感器状态处理,否则进入步骤六;
步骤六:根据包括汛期、天气和人为因素的其他影响异常检测的因素来判定该异常值的产生原因,异常类型为多个传感器连续异常,最后将该异常值的异常原因进行记录并将信息存放到数据库中。
本发明根据流数据特点给出一种基于多维影响因子的并行Kalman方法。算法将时间、空间和其他起源信息这三个维度信息作为影响因子,提高了异常检测结果的准确度;然后将任务分解进行并行处理,提升算法效率;最后对算法进行了实验,验证了算法的可行性。
进一步的,所述步骤三中利用Kalman算法计算出估计值,并将估计值与测量值之间的差值与给定阈值进行比较判断的具体操作步骤如下:
步骤3.1:输入初始状态估计值、初始均方误差估计值和初始协方差;
步骤3.2:对当前时刻之前的一段测量数据使用小波变换对数据进行分解,将系数小于阈值的高频部分提取出来作为测量的噪声,得到一个测量值;
步骤3.3:对这段时间内的测量值加上一个与时间相关的权值;
步骤3.4:根据上一时刻的测量值预估当前时刻的测量值,再根据当前时刻的测量值来实时地修正状态估计,将更新测量噪声、预测任务和修正任务三个任务进行并行化处理,综合计算得到一个估计值;
步骤3.5:将步骤3.1与步骤3.3得到的计算结果进行估计值与测量值差的判断,如果估计值与测量值差的绝对值大于阈值,进入步骤四;否则判定为正常值。
进一步的,所述步骤3.4中更新测量噪声、预测任务和修正任务三个任务进行并行化处理,并最后综合计算得到一个估计值的具体步骤如下:
3.4.1:更新测量噪声
对长度为L的测量值序列进行小波分解,输入数量为L的测量值y(t-L-1)、y(t-L)、…、y(t-1),而输出为t时刻的测量噪声的协方差Qw(t);其中更新测量噪声的公式为:
QW(t-1)=Ew(t-1)wT(t-1)
其中,小波提取噪声的过程为:w(t-1)=WaveDec(y(t-1));
然后加入遗忘因子:
Qw(t-1)=(1-λt)Qw(t-1)
+λt[w(t-1)wT(t-1)-C(t-1)P(t|t-1)CT(t-1)]
其中,λt=(1-λ)/(1-λt),并且0<λ<1;
3.4.2:预测任务
预测环节的任务是计算状态估计和均方误差估计;因此预测任务的输入是t-1时刻的状态估计值和t-1时刻的误差估计值P(t-1),而输出是t时刻的状态预估以及t时刻的误差预估P(t|t-1);
计算一步状态估计:
计算一步均方误差估计:
P(t|t-1)=F(t-1)P(t-1)FT(t-1)+Qv(t-1)
其中,Qv(t-1)为t-1时刻的系统噪声方差,这里的Qv(t)是不变的;
3.4.3:修正任务
修正任务主要是计算Kalman滤波增益,然后根据Kalman增益和测量值来修正状态估计和误差估计;在修正环节中的输入为t时刻的误差预估P(t|t-1)、t-1时刻的测量噪声方差Qw(t-1)、t时刻的状态预估以及t时刻的测量值y(t),而输出为t时刻的状态估计和t时刻的误差估计P(t);
根据均方误差估计,计算滤波增益:
根据一步状态估计和滤波增益,更新状态估计:
更新均方误差:
P(t)=[1-K(t)C(t-1)]P(t|t-1)
3.4.4:综合计算测量估计值:
进一步的,所述步骤四中计算时间影响因子的方法如下:
其中:λt(t)为t时刻的时间维度影响因子,yi(t-j)为t-j时刻节点i的测量值,为t-j时刻节点i的预估值。
进一步的,所述步骤五中计算空间影响因子的方法如下:
其中:λs(t)为t时刻的空间维度影响因子,yi(t)为t时刻节点i的测量值,为t时刻节点i的预估值。
进一步的,所述步骤六中的其他影响异常检测的因素主要为汛期,其中汛期影响因子的计算方法如下:
其中:λf(t)为t时刻的汛期影响因子;N、M分别为非汛期时段和汛期时段的采样数;PN,t、PM,t分别为非汛期时段和汛期时段的t时刻采样水位值。
本发明针对数据流异常检测问题,为提高准确度,引入时间、空间和其他起源信息,提出一种基于多维影响因子的Kalman方法;在此基础上,为提高算法的效率,对任务进行并行化处理,提出一种基于多维影响因子的并行Kalman方法;最后对提出的算法进行了实验,验证了算法的可行、有效。
附图说明
图1为现有的Kalman算法流程图;
图2为本发明所述的数据流异常检测方法的流程图;
图3为本发明改进后的Kalman算法流程图;
图4为权值函数示意图;
图5为实施例中AKF、WKF、MDF-KF算法运行时间对比图;
图6为实施例中AKF、WKF、MDF-KF和PKF算法时间对比图;
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
基于多维影响因子的并行Kalman算法,首先,对数据流的异常检测,为提升异常检测结果的准确度,并且能够判定异常的类型和产生原因,加入了时间、空间和其他起源信息三个维度的影响因子,提出了一种基于多维影响因子的Kalman方法;然后,为提高算法效率,将算法进行任务分解,进行任务并行化,提出一种基于多维影响因子的并行Kalman算法。
基于多维影响因子的Kalman算法:
1、算法改进
(1)改进小波变换提取测量噪声
Kalman算法本质上是一个不断循环的过程,不断地通过测量值y(t)来修正估计值从而提高预测的准确性。但是由于基本的Kalman滤波算法只适用于测量噪声已知的系统中,所以在实际应用中的效果并不理想。所以本发明的基于多维影响因子的Kalman算法在获取测量噪声方面进行了改进,改进前的Kalman算法流程图如图1所示。
本发明所述的基于多维影响因子的Kalman算法对于获取测量噪声进行了改进,并将获取测量噪声分为两个步骤:
①该算法在进行异常检测之前,先选取当前时刻之前的长度为L的一段测量数据,使用小波变换对其进行分解,将系数小于阈值的高频部分提取出来作为测量噪声。基于多维影响因子的Kalman算法中使用到的是基于阈值的方法,提取噪声的过程可以细分为小波分解、阈值筛选、小波重建、提取噪声4个步骤。
②在利用小波变换实时提取出测量噪声之后,本文算法还对这段时间内的测量噪声加上一个与时间相关的权值,从而进一步提高测量噪声估计的准确性。假设在时间长度为L的数据段内,经过小波变换得到的测量噪声值分别为w1,w2,…,wL,则L+1时刻的噪声值为:
其中:λt=(1-λ)/(1-λt)为t时刻测量噪声wt的权值,λ∈(0,1)。图4是权值函数示意图,其中,第一幅图是根据小波变换求得的k时刻以及之前L-1个时刻的测量噪声值,原来的方法是根据这L个测量噪声值求平均作为t+1时刻的测量噪声值。很明显,这样做会有很大的误差,因为越早时刻的测量噪声对于当前时刻的测量噪声影响越小。第二幅图是权值函数的图形,可以看出,距离当前时刻越近,权值越大;相反,离当前时刻越远,权值越小。这一特性正好与不同时刻噪声对当前噪声的影响相符,因此,把权值函数加入到小波变换求测量噪声的过程中,从而提高其准确性。第三幅图就是加入权值之后的结果。
(2)加入多维影响因子
在无线传感器网络环境下,现有的数据融合操作主要在时间维度和空间维度对数据进行融合,时间维度指的是对于同一个传感器节点,在不同时刻的数据融合;空间维度指的是在同一时刻,对于邻近节点之间的数据融合。在此基础上,将数据起源加入到异常检测算法中,提出了时间、空间和其他起源信息这3个维度的影响异常检测的因素。
对于时间维度,基于多维影响因子的Kalman算法在对当前时刻进行异常检测的同时,还会结合该节点前几个时刻的测量值检测情况,得到时间影响因子。需要比较的时间范围可以根据需要动态调整,从而提高算法在实际应用中的适应能力。时间影响因子的定义如下:
其中:λt(t)为t时刻的时间维度影响因子,yi(t-j)为t-j时刻节点i的测量值,为t-j时刻节点i的预估值。
对于空间维度,基于多维影响因子的Kalman算法考虑和当前节点具有邻近、或者是上下游等关系的节点的异常检测情况对于当前节点检测情况的影响,对这些空间相关的节点进行数据融合。空间维度的影响因子定义如下:
其中:λs(t)为t时刻的空间维度影响因子,yi(t)为t时刻节点i的测量值,为t时刻节点i的预估值。
其他起源信息维度的数据融合指的是根据Kalman算法的预测值和其他影响异常检测的起源信息,包括天气、汛期、传感器使用情况和人为活动等,针对河流在汛期时段的水位值变化与非汛期时段的水位值变化情况有明显差异的特点,提出了汛期影响因子的概念,其定义如下:
其中:λf(t)为t时刻的汛期影响因子;N、M分别为非汛期时段和汛期时段的采样数;PN,t、PM,t分别为非汛期时段和汛期时段的t时刻采样水位值。
2.算法实现
(1)首先,每一个传感器节点分别对自己的数据进行Kalman算法检测,如果检测出当前时刻的值为异常值,则根据前一段时间的数据计算出时间维度影响因子λt(t)。如果得出λt(t)大于或等于阈值ξt,则将当前时刻的预测值与测量值之差以及λt(t)记录,并进入第二步;否则认为该异常点为单个异常点,用预测值取代该异常值,并将判定结果记录到数据库中。
(2)然后,根据各个相关传感器传过来的特征值和λt(t)计算出空间维度影响因子λs(t),如果得出λs(t)大于或等于阈值ξs,则将λs(t)记录,并进入第三步;否则认为该异常为传感器测量值异常,将判定结果记录到数据库中。
(3)最后,根据系统传入的λs(t)和汛期、传感器工作状态等其他起源信息,判定异常类型。
基于多维影响因子的并行Kalman算法
1.并行化改进
在传感器网络中,将Kalman算法进行并行化处理可以充分利用好传感器中的节点,提高算法的效率。
常用的Kalman算法并行化方法有两种:
(1)矩阵分解方法。在Kalman算法的迭代过程中,使用了大量的矩阵相加相乘的操作,有人对这些矩阵运算进行分解和简化,使这些计算可以同时进行,从而实现多机的效果。
(2)任务分解方法。Kalman算法主要有预测和修正两个环节,在单机Kalman算法中,CPU必须等预测过程计算完毕之后才能进行修正过程,这样会严重影响计算效率。在分布式环境中,可以将这两个过程进行分解,然后通过处理器之间的通信来传递计算结果。
本算法最终分解成更新测量噪声、预测任务、修正任务和三维影响因子的计算四个任务,其中更新测量噪声、预测任务和修正任务可以并行执行:
(1)更新测量噪声
在前文中介绍了基于多维影响因子的改进Kalman算法提取测量噪声的方法,在这个过程中,需要对长度为L的测量值序列进行小波分解。因此这个任务的输入为数量为L的测量值y(t-L-1)、y(t-L)、…、y(t-1),而输出为t时刻的测量噪声的协方差Qw(t)。更新测量噪声的公式为:
QW(t-1)=Ew(t-1)wT(t-1) (公式5)
其中,w(t-1)=WaveDec(y(t-1)),是小波提取噪声的过程。
其中,λt=(1-λ)/(1-λt),并且0<λ<1。
(2)预测任务
在图1出了现有的Kalman算法的流程图,其中预测环节的任务是计算状态估计和误差方差阵。因此预测任务的输入是t-1时刻的状态估计值和t-1时刻的误差估计值P(t-1),而输出是t时刻的状态预估以及t时刻的误差预估P(t|t-1)。预测任务的公式为:
P(t|t-1)=F(t-1)P(t-1)FT(t-1)+Qv(t-1) (公式8)
其中,Qv(t-1)为t-1时刻的系统噪声方差,由于本发明的应用场景是河流中的水文传感器网络,在短时间内可以看成是一个时不变的系统,所以Qv(t)是不变的。
(3)修正任务
修正任务主要是计算Kalman滤波增益,然后根据Kalman增益和测量值来修正状态估计和误差估计。在修正环节中的输入为t时刻的误差预估P(t|t-1)、t-1时刻的测量噪声方差Qw(t-1)、t时刻的状态预估以及t时刻的测量值y(t),而输出为t时刻的状态估计和t时刻的误差估计P(t)。修正环节的公式有:
P(t)=[1-K(t)C(t-1)]P(t|t-1) (公式11)
从上面三个任务的介绍中可以看出,每个任务的输出都是另一个任务的输入,如果想要实现并行化,就必须对这三个环节进行调整。这里使用的方法是将修正环节滞后,预测环节提前一个时长,即修正环节不变,而预测环节的公式变为:
这样,上面介绍的三个任务就可以分别用三台不同的处理器同时进行计算,从而节约了计算时间。
除了上述三个同步执行的任务之外,还有一个通过三个维度影响因子进一步计算异常结果的任务。由于这个任务需要使用改进Kalman算法的结果才能进行,无法与上面三个任务同时进行,所以将它放在三个并行任务之后进行。
2.并行化实现
在实现过程中,首先给出系统的初始化参数,然后使用三台处理器分别对上面介绍的三个任务进行计算。由于对修正任务进行了滞后处理,所以这三个任务之间不需要相互等待,只需要在计算完成之后进行必要的通信来传递计算结果。最后,将测量估计值输出,进行下一步的处理。图3给出了改进后的并行化算法流程图。
结合基于多维影响因子的Kalman算法和基于多维影响因子的并行Kalman算法,加入时间影响因子、空间影响因子和其他起源因袭(这里指汛期因素),并将提取测量噪声、状态估计和状态修正三个任务进行并行化处理。总的检测方法流程如图2所示:
由于提取测量噪声需要根据当前时刻前一段时间内的测量值进行小波分解,这个过程所消耗的时间要远高于状态预估和状态修正,所以需要将提取测量噪声的任务再进一步划分。因为各个时刻提取噪声的过程并没有耦合关系,所以可以直接将其进行分解。
实验验证
1、基于多维影响因子的Kalman算法实验结果及分析
分析基于多维影响因子的Kalman算法检测准确性。分别使用基于时间遗忘因子的Kalman算法(Amnesic Kalman Filtering)、基于小波变换的Kalman算法(Wavelet Kalman Filtering)以及基于多维影响因子的Kalman算法(MDF-KF)对相同数据进行检测,对比分析三种算法对不同类型异常点的检测效果。根据某河流的遥测水位实时数据集,选取其5月份中的连续1000条记录。首先,随机在这1000条数据中选择不连续的5条记录,分别加上或减去事先设定的阈值,以此作为单个异常数据;然后,从这1000条数据中再选择10条连续的数据段分别加上阈值,作为连续异常点的情况;最后,再选取5条连续的数据,将其修改成连续递减的数据,作为测量值骤减的异常情况。经过多次实验分析,本实验得出的结论是:和其他两个算法相比,AKF算法的错误率最高,漏检和误检的情况比较严重,对连续异常点的检测效果也较差;WKF算法的错误率稍好于AKF算法,漏检数较少,对于单个和连续不变异常值的检测效果稍好,但是对连续骤变的异常情况检测效果较差,并且误检率也较高;基于多维影响因子的Kalman算法结合前面两个算法的优点,连续异常值的检出数有了明显的提高,同时还降低了漏检数和误检数,提高了检测的准确率。
分析基于多维影响因子的Kalman算法的执行时间。对上述选取的遥测数据,分别取100条到5000条记录之间的8个采样点,对三个算法的运行时间(秒)进行对比,图5为不同数据量时算法运行时间的折线图。由实验可知,随着数据量的增长,AKF算法的运行时间增长并不明显,因为AKF算法不需要实时提取测量噪声,计算过程最简单。而WKF算法和基于多维影响因子的Kalman算法中需要使用小波变换提取一个时间段内的测量噪声,所以随着数据量的增长,这两个算法的运行时间也会较快地增加。基于多维影响因子的Kalman算法的运行效率虽然比AKF算法高,比WKF算法也高出少许,但异常检测的准确率却明显高于前人的算法。表1为算法检测错误率对比(表中MDF-KF为Kalman算法的简称)。
表1算法检测错误率对比表
2、基于多维影响因子的并行Kalman算法实验结果及分析
本发明主要针对异常数据的在线检测,整个无线传感器网络中的数据量并不是很多,因此在实验中,最多只选择5000条数据。同样使用遥测水位数据集,分别选取100条到5000条数据之间的8个采样点,对并行化之后的算法与AKF算法、WKF算法和基于多维影响因子的Kalman算法(MDF-KF)这三种算法的运行时间(秒)进行对比,图6为算法执行时间的对比图。
AKF算法的运行时间最短,而WKF算法和基于多维影响因子的Kalman算法运行时间较长。并行化之后的基于多维影响因子的并行Kalman算法(PKF)在较低数据量时效果较差,因为Storm在进行数据处理之前,首先要花费一定的时间进行资源分配。数据量较低时,分配任务和分配资源所消耗的时间在总消耗时间中所占的比例较大,因此并行化效果并不理想;当数据量增大到一定程度之后,分配任务和资源所消耗的时间影响变小,这时并行化的优势也体现出来。从图6可以看出,当数据量达到1000条之后,并行化处理之后的算法所需的时间小于并行化之前的算法。表2给出了分别使用这些影响因子进行异常检测时的错误率。从结果中可以看出,时间维度的影响因子能够降低漏检数并且提升连续异常值的检出个数,空间维度的影响因子能够降低误检数,而其他起源信息维度的影响因子可以降低误检数。
表2不同维度错误率对比表