一种基于滑动窗口的自适应在线异常检测方法与流程

文档序号:16544476发布日期:2019-01-08 20:45阅读:618来源:国知局
一种基于滑动窗口的自适应在线异常检测方法与流程

本发明涉及数据流的异常检测技术,尤其是基于滑动窗口的自适应在线异常检测方法。



背景技术:

异常数据是指观测数据中与大部分数据不一样、不符合期望的数据点,异常检测旨在挖掘出异常数据。随着信息采集技术的迅速发展,在金融、医疗、互联网、物流、气象、天文等各个领域陆续出现了大量动态产生的数据流数据。与传统的静态数据相比,数据流数据具有快速到达、总量无限、一次处理等特征,不仅数据的产生频率和传输速率迅速,而且对数据处理的实时性要求高,数据的时效性特点日益明显。如何在数据流上进行在线异常检测,满足数据流的时效性对数据分析的高效性的迫切需求,受到越来越多的关注,已经成为数据分析领域的热点研究方向。

在数据流环境下,根据检测方法面向的数据集合不同,异常检测可以分为全局异常检测和窗口异常检测两种。全局异常检测旨在发现整个数据流中的异常数据,需要保存全部历史数据,存储开销较大,检测时间较长;窗口异常检测旨在发现滑动窗口中的异常数据,不需保存全部历史数据,存储开销小,检测效率高,可用性好,在各领域得到广泛应用。异常检测对异常点的检测是基于“少而不同”的基本特点的,最具代表性的方法是均值偏差法,就是依据数据与平均值的偏差程度进行异常点判定,简单高效,在许多领域得到广泛应用。由于窗口异常检测是对滑动窗口中的局部数据进行检测,当遇到异常爆发的情况,传统的窗口异常检测方法容易出现检测错误,严重影响异常检测的准确率。

因此,如何针对异常爆发的问题,设计基于滑动窗口的自适应在线异常检测方法,有效提高大规模数据流的异常检测的准确率和效率,已经成为大数据分析领域的热点研究问题。



技术实现要素:

本发明要解决的技术问题是:针对数据流异常检测中的异常爆发问题,提出一种基于滑动窗口的自适应在线异常检测方法,有效提高大规模数据流的异常检测的准确率和效率。

本发明技术方案包括以下步骤:

第一步,构建一个数据流异常检测系统,它由一个控制节点、一个数据节点和一个检测节点组成,每个节点都是一台可独立运行的计算机,各节点通过网络设备互连。

控制节点、数据节点和检测节点上均安装有操作系统、tcp/ip协议软件,配置了网络环境。

控制节点负责与用户交互,接收用户提交的异常检测请求,并向数据节点发送窗口数据初始化请求;负责接收用户提交的异常检测结束请求,停止异常检测;负责接收检测节点发送的检测结果,并将检测结果返回给用户,向数据节点发送窗口数据更新请求。

数据节点负责接收采集设备发送的数据,接收控制节点发送的窗口数据初始化请求,向检测节点发送窗口初始化数据和窗口数据初始化请求;接收控制节点发送的窗口数据更新请求,向检测节点发送窗口更新数据和窗口数据更新请求。

检测节点负责接收数据节点发送的窗口初始化数据和窗口数据初始化请求,对滑动窗口进行初始化;负责在滑动窗口内进行异常检测,并将检测结果发送给控制节点;负责检测滑动窗口中是否出现异常爆发,接收数据节点发送的窗口更新数据和窗口数据更新请求,并根据检测结果选择不同策略对滑动窗口进行数据更新。

控制节点上安装有任务管理程序和结果回收程序。任务管理程序负责接收用户提交的异常检测请求,并向数据节点发送窗口数据初始化请求;负责接收用户提交的异常检测结束请求,停止异常检测。结果回收程序负责接收检测节点发送的检测结果并返回给用户,向数据节点发送窗口数据更新请求。

数据节点上安装有接收程序和发送程序。接收程序负责接收采集设备发送的数据。发送程序一方面接收控制节点发送的窗口数据初始化请求,向检测节点发送窗口初始化数据和窗口数据初始化请求;一方面接收控制节点发送的窗口数据更新请求,向检测节点发送窗口更新数据和窗口数据更新请求。所述采集设备指能够实时获取温度、湿度、压力、震动等各种变化着的物理量并将物理量转换成数值数据进行存储的各种传感器。

检测节点上安装有异常检测程序和窗口管理程序。异常检测程序负责在滑动窗口内进行异常检测,并将检测结果发送给控制节点。窗口管理程序一方面负责接收数据节点发送的窗口初始化数据和窗口数据初始化请求,对滑动窗口进行初始化;一方面负责检测滑动窗口中是否出现异常爆发,接收数据节点发送的窗口更新数据和窗口数据更新请求,并根据检测结果选择不同策略对滑动窗口进行数据更新。

第二步,控制节点的任务管理程序接收用户提交的异常检测请求,并向数据节点发送窗口数据初始化请求。

第三步,数据节点接收控制节点发送的窗口数据初始化请求,向检测节点发送窗口初始化数据和窗口数据初始化请求,具体方法是:

3.1数据节点的发送程序接收控制节点发送的窗口数据初始化请求。

3.2数据节点的接收程序接收采集设备实时采集并发送的w个窗口初始化数据d1,d2,……,di,……,dw(1≤i≤w),w是滑动窗口的大小(即滑动窗口中存储的数据的数量),w是正整数,

3.3数据节点的发送程序向检测节点发送d1,d2,……,di,……,dw和窗口数据初始化请求。

第四步,检测节点的窗口管理程序接收数据节点发送的d1,d2,……,di,……,dw和窗口数据初始化请求,对滑动窗口进行初始化,具体方法是:

4.1检测节点的窗口管理程序接收数据节点发送的d1,d2,……,di,……,dw(1≤i≤w)和窗口数据初始化请求。

4.2采用滑动窗口数组sw[]存储滑动窗口中的数据,即由sw[i]存放di,具体步骤如下:

4.2.1初始化滑动窗口数据序号i=1。

4.2.2sw[i]=di。

4.2.3如果i<w,则令i=i+1,转第4.2.2步,继续初始化滑动窗口;否则,滑动窗口初始化结束,转第五步。

第五步,检测节点的异常检测程序在滑动窗口内进行异常检测,并将检测结果发送给控制节点,具体方法是:

5.1采用检测结果二维数组ad存储被检测出的异常数据及其在滑动窗口中的序号,ad[k][1]表示被检测出的第k个异常数据,ad[k][2]表示被检测出的第k个异常数据在滑动窗口中的序号,1≤k≤w。

5.2初始化检测结果二维数组ad,具体步骤如下:

5.2.1初始化检查结果序号k=1。

5.2.2令ad[k][1]=0,ad[k][2]=w+1。

5.2.3如果k<w,则令k=k+1,转第5.2.2步,继续初始化检测结果二维数组;否则,检测结果二维数组初始化结束,转第5.3步。

5.3采用均值偏差法对滑动窗口中的数据进行异常检测,具体步骤如下:

5.3.1求滑动窗口数据均值,令滑动窗口数据均值

5.3.2求滑动窗口数据标准偏差,令滑动窗口数据标准偏差

5.3.3初始化滑动窗口数据序号i=1。

5.3.4初始化检测结果序号k=1。

5.3.5如果λ≥2,λ为sw[i]与平均值的偏差超过标准偏差的倍数,(在均值偏差法中,通常认为与平均值的偏差超过两倍标准偏差的数据为异常点,即λ=2;与平均值的偏差超过三倍标准偏差的数据为高度异常点,即λ=3),则sw[i]为异常数据,令ad[k][1]=sw[i],ad[k][2]=i,k=k+1。

5.3.6如果i<w,则令i=i+1,转第5.3.5步,继续进行异常检测;否则,异常检测结束,转第5.4步。

5.4将检测结果二维数组ad发送给控制节点。

第六步,控制节点的结果回收程序接收检测节点发送的检测结果二维数组ad并返回给用户。

第七步,如果控制节点的任务管理程序接收到用户提交的异常检测结束请求,则停止异常检测,转第十步;否则,向数据节点发送窗口数据更新请求,转第八步继续进行异常检测。

第八步,数据节点的发送程序接收控制节点发送的窗口数据更新请求,向检测节点发送窗口更新数据和窗口数据更新请求,具体方法是:

8.1数据节点的发送程序接收控制节点发送的窗口数据更新请求。

8.2数据节点的接收程序接收采集设备实时采集并发送的s个数据b1,b2,……,bj,……,bs(1≤j≤s),s是滑动窗口的滑动步长(即滑动窗口中每次更新的数据的数量),s≤w-1。

8.3数据节点的发送程序向检测节点发送b1,b2,……,bj,……,bs和窗口数据更新请求。

第九步,检测节点的窗口管理程序检测滑动窗口中是否出现异常爆发(即在窗口的最后s个数据中包含至少s/2+1个异常数据),接收数据节点发送的b1,b2,……,bj,……,bs和窗口数据更新请求,并根据检测结果选择不同策略对滑动窗口进行数据更新,具体方法是:

9.1检测滑动窗口中是否出现异常爆发,具体步骤如下:

9.1.1初始化检测结果序号k=1。

9.1.2初始化异常数据数目m=0。

9.1.3如果w-s+1≤ad[k][2]≤w,说明ad[k][1]存储的是异常数据,且该异常数据在滑动窗口中的序号ad[k][2]是位于窗口最后的s个数据,令m=m+1。

9.1.4如果ad[k][2]≤w,说明ad[k][1]存储的是异常数据,令k=k+1,转第9.1.3步;否则,转第9.1.5步。

9.1.5如果m≤s/2,则说明没有出现异常爆发,转第9.2步;否则说明出现异常爆发,转第9.3步。

9.2接收数据节点发送的b1,b2,……,bj,……,bs和窗口数据更新请求,按照常规方法更新滑动窗口数据,具体步骤如下:

9.2.1初始化滑动窗口数据序号i=1。

9.2.2令sw[i]=sw[i+s]。

9.2.3如果i≤w-s-1,说明sw[i]还没有到达窗口尾部,继续平移数据,令i=i+1,转第9.2.2步;否则令i=i+1,转第9.2.4步。

9.2.4初始化滑动窗口更新数据序号j=1。

9.2.5令sw[i]=bj。

9.2.6如果i<w,则令i=i+1,j=j+1,转第9.2.5步,继续更新滑动窗口;否则,滑动窗口更新结束,转第五步。

9.3接收数据节点发送的b1,b2,……,bj,……,bs和窗口数据更新请求,按照非常规方法更新滑动窗口数据,具体步骤如下:

9.3.1初始化滑动窗口更新数据序号j=1。

9.3.2初始化滑动窗口数据序号i=w-s+1。

9.3.3令sw[i]=bj。

9.3.4如果i<w,则令i=i+1,j=j+1,转第9.3.3步,继续更新滑动窗口;否则,滑动窗口更新结束,转第五步。

第十步,异常检测结束。

与现有技术相比,本发明具有以下技术优点:

1.本发明第5.3步检测节点的异常检测程序对当前滑动窗口数据实时进行均值计算和标准偏差计算,并以此为基础进行异常检测,而不是根据事先设定的均值进行异常检测,有效保证了数据流在线异常检测的实时性和准确率。

2.本发明第9.1步检测节点的窗口管理程序根据异常数据在滑动窗口中的分布情况实时检测异常爆发,为有效提高大规模数据流的异常检测的准确率和效率奠定了基础。

3.本发明第9.3步,在异常爆发的情况下,检测节点的窗口管理程序利用新接收的滑动窗口更新数据替换滑动窗口中异常爆发的部分数据,以避免异常爆发对后续异常检测的影响,有效提高了大规模数据流的异常检测的准确率和效率。

附图说明

图1是本发明第一步构建的数据流异常检测系统的物理结构图。

图2是本发明数据流异常检测系统的软件部署图。

图3是本发明总体流程图。

具体实施方式

图3是本发明总流程图。具体流程如下:

第一步,构建一个如图1所示的数据流异常检测系统,它由一个控制节点、一个数据节点和一个检测节点组成,每个节点都是一台可独立运行的计算机,各节点通过网络设备互连。控制节点、数据节点和检测节点上均安装有操作系统、tcp/ip协议软件,配置了网络环境。控制节点负责与用户交互,接收用户提交的异常检测请求,并向数据节点发送窗口数据初始化请求;负责接收用户提交的异常检测结束请求,停止异常检测;负责接收检测节点发送的检测结果,并将检测结果返回给用户,向数据节点发送窗口数据更新请求。数据节点负责接收采集设备发送的数据,接收控制节点发送的窗口数据初始化请求,向检测节点发送窗口初始化数据和窗口数据初始化请求;接收控制节点发送的窗口数据更新请求,向检测节点发送窗口更新数据和窗口数据更新请求。检测节点负责接收数据节点发送的窗口初始化数据和窗口数据初始化请求,对滑动窗口进行初始化;负责在滑动窗口内进行异常检测,并将检测结果发送给控制节点;负责检测滑动窗口中是否出现异常爆发,接收数据节点发送的窗口更新数据和窗口数据更新请求,并根据检测结果选择不同策略对滑动窗口进行数据更新。

如图2所示,控制节点上安装有任务管理程序和结果回收程序。任务管理程序负责接收用户提交的异常检测请求,并向数据节点发送窗口数据初始化请求;负责接收用户提交的异常检测结束请求,停止异常检测。结果回收程序负责接收检测节点发送的检测结果并返回给用户,向数据节点发送窗口数据更新请求。数据节点上安装有接收程序和发送程序。接收程序负责接收采集设备发送的数据。发送程序一方面接收控制节点发送的窗口数据初始化请求,向检测节点发送窗口初始化数据和窗口数据初始化请求;一方面接收控制节点发送的窗口数据更新请求,向检测节点发送窗口更新数据和窗口数据更新请求。检测节点上安装有异常检测程序和窗口管理程序。异常检测程序负责在滑动窗口内进行异常检测,并将检测结果发送给控制节点。窗口管理程序一方面接收数据节点发送的窗口初始化数据和窗口数据初始化请求,对滑动窗口进行初始化;一方面检测滑动窗口中是否出现异常爆发,接收数据节点发送的窗口更新数据和窗口数据更新请求,并根据检测结果选择不同策略对滑动窗口进行数据更新。

第二步,控制节点的任务管理程序接收用户提交的异常检测请求,并向数据节点发送窗口数据初始化请求。

第三步,数据节点接收控制节点发送的窗口数据初始化请求,向检测节点发送窗口初始化数据和窗口数据初始化请求,具体方法是:

3.1数据节点的发送程序接收控制节点发送的窗口数据初始化请求。

3.2数据节点的接收程序接收采集设备实时采集并发送的w个窗口初始化数据d1,d2,……,di,……,dw(1≤i≤w)。

3.3数据节点的发送程序向检测节点发送d1,d2,……,di,……,dw和窗口数据初始化请求。

第四步,检测节点的窗口管理程序接收数据节点发送的d1,d2,……,di,……,dw和窗口数据初始化请求,对滑动窗口进行初始化,具体方法是:

4.1检测节点的窗口管理程序接收数据节点发送的d1,d2,……,di,……,dw和窗口数据初始化请求。

4.2采用滑动窗口数组sw[]存储滑动窗口中的数据,即由sw[i]存放di。

第五步,检测节点的异常检测程序在滑动窗口内进行异常检测,并将检测结果发送给控制节点,具体方法是:

5.1采用检测结果二维数组ad存储被检测出的异常数据及其在滑动窗口中的序号,ad[k][1]表示被检测出的第k个异常数据,ad[k][2]表示被检测出的第k个异常数据在滑动窗口中的序号,1≤k≤w。

5.2初始化检测结果二维数组ad,具体步骤如下:

5.2.1初始化检查结果序号k=1。

5.2.2令ad[k][1]=0,ad[k][2]=w+1。

5.2.3如果k<w,则令k=k+1,转第5.2.2步;否则,转第5.3步。

5.3采用均值偏差法对滑动窗口中的数据进行异常检测,具体步骤如下:

5.3.1求滑动窗口数据均值,令滑动窗口数据均值

5.3.2求滑动窗口数据标准偏差,令滑动窗口数据标准偏差

5.3.3初始化滑动窗口数据序号i=1。

5.3.4初始化检测结果序号k=1。

5.3.5如果一般λ≥2,令ad[k][1]=sw[i],ad[k][2]=i,k=k+1。

5.3.6如果i<w,则令i=i+1,转第5.3.5步;否则,转第5.4步。

5.4将检测结果二维数组ad发送给控制节点。

第六步,控制节点的结果回收程序接收检测节点发送的检测结果二维数组ad并返回给用户。

第七步,如果控制节点的任务管理程序接收到用户提交的异常检测结束请求,则停止异常检测,转第十步;否则,向数据节点发送窗口数据更新请求,转第八步。

第八步,数据节点的发送程序接收控制节点发送的窗口数据更新请求,向检测节点发送窗口更新数据和窗口数据更新请求,具体方法是:

8.1数据节点的发送程序接收控制节点发送的窗口数据更新请求。

8.2数据节点的接收程序接收采集设备实时采集并发送的s个数据b1,b2,……,bj,……,bs(1≤j≤s),s≤w-1。

8.3数据节点的发送程序向检测节点发送b1,b2,……,bj,……,bs和窗口数据更新请求。

第九步,检测节点的窗口管理程序检测滑动窗口中是否出现异常爆发,接收数据节点发送的b1,b2,……,bj,……,bs和窗口数据更新请求,并根据检测结果选择不同策略对滑动窗口进行数据更新,具体方法是:

9.1检测滑动窗口中是否出现异常爆发,具体步骤如下:

9.1.1初始化检测结果序号k=1。

9.1.2初始化异常数据数目m=0。

9.1.3如果w-s+1≤ad[k][2]≤w,令m=m+1。

9.1.4如果ad[k][2]≤w,令k=k+1,转第9.1.3步;否则,转第9.1.5步。

9.1.5如果m≤s/2,转第9.2步;否则转第9.3步。

9.2接收数据节点发送的b1,b2,……,bj,……,bs和窗口数据更新请求,按照常规方法更新滑动窗口数据,具体步骤如下:

9.2.1初始化滑动窗口数据序号i=1。

9.2.2令sw[i]=sw[i+s]。

9.2.3如果i≤w-s-1,令i=i+1,转第9.2.2步;否则令i=i+1,转第9.2.4步。

9.2.4初始化滑动窗口更新数据序号j=1。

9.2.5令sw[i]=bj。

9.2.6如果i<w,则令i=i+1,j=j+1,转第9.2.5步;否则,转第五步。

9.3接收数据节点发送的b1,b2,……,bj,……,bs和窗口数据更新请求,按照非常规方法更新滑动窗口数据,具体步骤如下:

9.3.1初始化滑动窗口更新数据序号j=1。

9.3.2初始化滑动窗口数据序号i=w-s+1。

9.3.3令sw[i]=bj。

9.3.4如果i<w,则令i=i+1,j=j+1,转第9.3.3步;否则,转第五步。

第十步,异常检测结束。

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