描述型多维度事件序列的并行频繁情节挖掘方法与系统与流程

文档序号:11952271阅读:167来源:国知局
描述型多维度事件序列的并行频繁情节挖掘方法与系统与流程
本发明涉及互联网
技术领域
,特别涉及描述型多维度事件序列的并行频繁情节挖掘方法与系统。
背景技术
:本发明的主要技术是频繁情节挖掘技术,首先给出相关定义,其中简单事件序列是一种同一时间有且仅有一个事件发生的事件序列,与复杂事件序列相区分,后者是指可以有多个事件在同一时间发生,表示为S=<(ε1,T1),…(εn,Tn)>,其中εi由所有发生在时间Ti上的事件组成,它是一个事件的组合,例如图1展示了一个复杂事件序列,在本发明中,没有特殊说明的情况下,本发明只讨论复杂事件序列。情节是一个非空的完全有序的事件集合,它是事件序列的一个子序列,表示为α=<ε1,ε2,…,εn>,一个情节的长度即该情节中所有事件的数量,长度为m的情节称作m-情节;当情节的第一个事件发生在时间TS且最后一个事件发生在时间Te,且Te-Ts≤MTD,那么时间区间[Ts,Te]被称作该情节的一次发生,其中MTD是自定义的数值,称为最大时间间隔,考虑两个时间区间[Ts,Te]和[Ts′,Te′],其中Ts≤Ts′且Te′≤Te,则[Ts,Te]覆盖了[Ts′,Te′],在此基础上,如果某情节的一次发生不能覆盖该情节的其它任意发生,则称为最小发生,本发明只考虑情节的最小发生。一个情节的支持度是其所有支持度度量的个数,本发明中即情节最小发生的次数,结合以上定义和说明,总结频繁情节挖掘问题,是指在单条长的事件序列上挖掘频繁出现的有序事件的子序列,具体描述是给定一条事件序列,一个用户指定的最小支持度阈值σ和一个用户指定的最大时间间隔阈值MTD,频繁情节挖掘的目的是挖掘出所有支持度不低于最小支持度阈值且发生的时间跨度不大于最大时间间隔阈值的所有事件情节。传统的以发现全部频繁情节为任务的挖掘算法主要可分为两类,分别是宽度优先枚举和深度优先枚举。宽度优先枚举是一种基于Apriori思想的方法,即由任意的两个频繁的长度为k的情节连接生成一个候选的长度为k+1的情节,这两个短情节的每一次连接完成就是较长情节的一次发生,之后检验该次是否可以作为支持度的度量,如果可以作为支持度度量,那么更新较长情节集合的信息,否则这次发生被丢弃。深度优先枚举是一类对前缀进行扩展的方法,即将每个频繁的长度为1的情节每次发生作为前缀在满足约束的窗口中进行扩展,先找到一个长度为2的候选情节的所有发生,再根据用户自定义的支持度度量判断它是否是频繁的,若频繁,则以该2-情节扩展候选长度为3的情节,以此类推,直到没有新的频繁情节生成。深度优先枚举与宽度优先枚举相比,减少了重复的序列扫描,一定程度上提高了效率。大多数情景模式发现算法研究的数据基于单一维度,即事件,但在许多应用中,数据常常来源于一个多维度环境,例如:在基于日志的服务器故障分析中,其故障原因与设备的型号、软硬件配置、所处的网络环境等因素密切相关,这些多维度的信息对挖掘有用的情景模式十分有帮助,例如:一台安装Linux操作系统的戴尔牌服务器的故障模式很可能和一台安装Windows操作系统的HP服务器不同,在多维度环境中,事件的属性包括描述型和效益型,例如:购物篮分析中,购买苹果手机的用户在未来六个月会购买Beats耳机和苹果笔记本电脑,而不会购买三星平板电脑,商品的品牌就是一种描述型属性,而这些商品分别给商户带来的利润则是效益型属性。直接使用传统的频繁情节挖掘方法不适合处理多维属性事件序列中的频繁情节,传统的频繁情节挖掘方法把所有的事件个体看做具有相同的重要性或具有相同的效益值,这种思路不能正确反应真实生活中情节的特征,很多有用的信息在挖掘过程中丢失,如图2所示的一条多维度复杂事件序列,其中,数字代表时间戳,字母集合{A,B,C}代表事件类型的集合,而字母集合{I1,I2,I3}则代表事件所含的描述型属性的集合,在这条示例序列中,对于最小支持度阈值σ=4,最大时间间隔MTD=4,如果采用传统情节挖掘算法,那么最终挖掘结果中,情节<A,B,C>的最小发生集合为{[1,3],[6,8],[12,14]},支持度小于4,不是频繁情节,而实际上,基于多属性的挖掘结果应该是{[1,3],[5,8],[6,9],[11,14]},其支持度等于4,是频繁情节,很明显,后者才是我们真正需要的答案,所以说传统的频繁情节挖掘并不适用于多维度复杂事件序列挖掘。对于包含描述型属性的多维度复杂事件序列中的频繁情节挖掘,一种可能的解决方案是按属性类别将一条事件序列划分为若干子序列,然后对所有子序列分别进行独立的频繁情节挖掘,但这样可能导致如下的两个问题,一是某个情节在所有子序列中是不频繁的,但却在原始序列中频繁,这个问题的后果是在最终的挖掘结果中丢失了该频繁情节;另一个是某个情节在某些子序列中不频繁,但在原始序列中却是频繁的,这个问题会导致在最终的挖掘结果中该情节的计算支持度小于真实值。技术实现要素:针对现有技术的不足,本发明提出描述型多维度事件序列的并行频繁情节挖掘方法与系统。本发明提出一种描述型多维度事件序列的并行频繁情节挖掘方法,包括:步骤1,按照事件属性将所述事件序列分为多个事件子序列,对每个事件子序列进行挖掘,并将挖掘结果进行存储,将相同的事件子序列进行计数累加,将计数结果小于预设阈值的事件子序列过滤,生成事件子序列集合;步骤2,以待扩展情节为前缀,连接所述事件子序列集合中任一项所述事件子序列,生成新的情结,计算所述新的情结的发生,并存储到发生集合,通过递归对所述新的情结进行扩展。所述步骤1包括对所述事件子序列进行扫描,获取所述事件子序列包括的所有事件类型。所述步骤1还包括获取所述事件子序列集合的发生MO_list。所述步骤2包括判断所述待扩展情节的长度是否已达到最长阈值,如果达到则停止,否则以所述待扩展情节为前缀,连接所述事件子序列集合中任一项所述事件子序列,生成新的情结。设置两个指针iterator1与iterator2分别指向所述新的情结与所述发生集合,iterator2不断向后移动,直到在所述发生集合中寻找到某一发生,所述某一发生的时间满足不大于所述指针iterator1指向的发生的结束时间,判断新的扩展情节是否小于最大窗口长度,如果满足,则判断所述某一发生是否为最小发生,如果所述某一发生为最小发生,将所述某一发生加入到所述新的扩展情节的最小发生集合中。本发明还提出一种描述型多维度事件序列的并行频繁情节挖掘系统,包括:生成事件子序列集合模块,用于按照事件属性将所述事件序列分为多个事件子序列,对每个事件子序列进行挖掘,并将挖掘结果进行存储,将相同的事件子序列进行计数累加,将计数结果小于预设阈值的事件子序列过滤,生成事件子序列集合;扩展模块,用于以待扩展情节为前缀,连接所述事件子序列集合中任一项所述事件子序列,生成新的情结,计算所述新的情结的发生,并存储到发生集合,通过递归对所述新的情结进行扩展。所述生成事件子序列集合模块包括对所述事件子序列进行扫描,获取所述事件子序列包括的所有事件类型。所述生成事件子序列集合模块还包括获取所述事件子序列集合的发生MO_list。所述扩展模块包括判断所述待扩展情节的长度是否已达到最长阈值,如果达到则停止,否则以所述待扩展情节为前缀,连接所述事件子序列集合中任一项所述事件子序列,生成新的情结。设置两个指针iterator1与iterator2分别指向所述新的情结与所述发生集合,iterator2不断向后移动,直到在所述发生集合中寻找到某一发生,所述某一发生的时间满足不大于所述指针iterator1指向的发生的结束时间,判断新的扩展情节是否小于最大窗口长度,如果满足,则判断所述某一发生是否为最小发生,如果所述某一发生为最小发生,将所述某一发生加入到所述新的扩展情节的最小发生集合中。由以上方案可知,本发明的优点在于:本发明的描述型多维度事件序列的并行频繁情节挖掘方法与系统,解决了传统频繁情节挖掘算法无法处理多维度复杂事件序列的问题,并在并行内存计算框架中改善挖掘效率较低的问题,实现了子序列之间挖掘的完全并行,即在多节点同时计算各子序列的所有情节及其发生集合,最终合并所有子序列的挖掘结果获得全局频繁情节。附图说明图1为复杂事件序列图;图2为多维度复杂事件序列图;图3为本发明算法运行流程框图;图4为本发明算法1的示意图;图5为本发明算法2的示意图;图6为本发明算法3的示意图;图7为本发明算法4的示意图;图8为本发明的系统结构图。具体实施方式以下为本发明具体实施例,如下所示:图3给出了算法运行的流程框图,在Spark框架下对多维属性的事件进行划分,使用描述型属性作为key进行划分,在各属性类别内部,事件按照一定的偏序关系从小到大排列形成一条事件序列,在大部分情况下按照事件发生的时间顺序从先到后排列。然后,对每一条事件子序列进行情节挖掘,由于各事件子序列之间已经不存在相互关系,本步骤可以完全并行地在各节点之间独立执行,提升了算法的运行速度,当所有事件子序列的挖掘结果完成之后,算法将汇总所有不同的情节并统计各情节的发生次数,即支持度,最后,当一个情节的支持度不小于用户自定义的支持度阈值时,该情节被判定为一条频繁情节并被存储,否则被判定为非频繁情节继而丢弃。算法参数说明如下:-s:存储原始数据文件的路径及文件名。-r:存储最终结果的目录路径及文件名。-p:用户自定义的最小支持度阈值。-w:用户自定义的最大窗口,发生在窗口内的事件才可能组成一个场景。-d:最长情节长度,只取不大于该值的情节。算法如下:如图4所示,算法1为本发明的主框架,它首先按照事件属性将原序列划分为若干事件子序列(行3),然后调用算法2对每一事件子序列进行挖掘,将挖掘情节的结果放在FE集合(FE集合是一个临时数据存储的结构,用于存放各条事件子序列挖掘的临时结果)中(行4-7),最后将相同的情节的计数累加(行8),最后计数小于minsup(minsup是用户自定义的一个变量,是用户的兴趣度量值,当情节出现次数小于该值时,用户对该情节不感兴趣)的情节被过滤(行9)。如图5所示,算法2是各个事件子序列挖掘频繁情节的算法,它先扫描一遍序列获得该序列包含的所有事件类型(行2),由此可得所有的1-情节集合F1及其发生MO_list(MO_list是一个时间窗口的集合,里面存放的时间窗口也叫作发生,用于记录一个情节在哪些时间段内出现过)(行4-7),对于F1的每一项E(E发生在序列上的所有单个事件组成了F1集合,E是这是所有单个事件的泛称),调用算法3获得以待扩展情节为前缀的情节(行8-10)。如图6所示,算法3是一个递归算法,先判断待扩展情节的长度是否已达到最长阈值,如果达到则停止(行2),如果没有则进行扩展,扩展方法如下:以待扩展情节为前缀,连接F1中的任一项E获得新的情节,调用算法4计算新情节的发生,将结果加入集合F(F集合是在挖掘一条事件子序列过程中使用的临时变量,用于存放递归计算中临时获得的挖掘结果)中(行4-7),递归的对新情节进行扩展(行8)。如图7所示,算法4讲述根据当前情节αp及其发生,计算由其扩展的情节α=αp→E的过程。首先设置两个指针iterator1和iterator2分别指向αp和E的发生集合(行5-6),iterator2不断向后移动直到在E的发生集合中寻找到一个发生,它的时间满足TE≤Te,即不大于iterator1指向的发生的结束时间点(行8-10)。接着,判断新的扩展情节α是否小于最大窗口长度,如果满足,则判断该次发生是否最小发生,这需要iterator1向后移动一次,观察αp的下一个发生是否与当前E的发生更近(行13-17)。最后,如果该次发生是最小发生,加入α的最小发生集合中(行18),将iterator1指向它的下一次发生(行20)。如图8所示,本发明还提出一种描述型多维度事件序列的并行频繁情节挖掘系统,包括:生成事件子序列集合模块,用于按照事件属性将所述事件序列分为多个事件子序列,对每个事件子序列进行挖掘,并将挖掘结果进行存储,将相同的事件子序列进行计数累加,将计数结果小于预设阈值的事件子序列过滤,生成事件子序列集合;扩展模块,用于以待扩展情节为前缀,连接所述事件子序列集合中任一项所述事件子序列,生成新的情结,计算所述新的情结的发生,并存储到发生集合,通过递归对所述新的情结进行扩展。所述生成事件子序列集合模块包括对所述事件子序列进行扫描,获取所述事件子序列包括的所有事件类型。所述生成事件子序列集合模块还包括获取所述事件子序列集合的发生MO_list。所述扩展模块包括判断所述待扩展情节的长度是否已达到最长阈值,如果达到则停止,否则以所述待扩展情节为前缀,连接所述事件子序列集合中任一项所述事件子序列,生成新的情结。设置两个指针iterator1与iterator2分别指向所述新的情结与所述发生集合,iterator2不断向后移动,直到在所述发生集合中寻找到某一发生,所述某一发生的时间满足不大于所述指针iterator1指向的发生的结束时间,判断新的扩展情节是否小于最大窗口长度,如果满足,则判断所述某一发生是否为最小发生,如果所述某一发生为最小发生,将所述某一发生加入到所述新的扩展情节的最小发生集合中。以下为本发明的具体实施例,如下所示:接下来通过一个实例,说明本发明的正确性和具体运行过程。我们在本发明的研究过程中,提取到一段某网站主机遭受的攻击数据,为了方便表达和阐述,我们符号化这些攻击类型和攻击源地址并只截取其中的一小段数据,得到如表1的事件序列。我们需要获得关于攻击类型的模式。表1事件序列参数列表如下所示:表2参数设置按照攻击源进行划分,划分后的攻击事件用(时间,攻击类型)表示,有类I1:{(1,A),(2,B),(4,C),(9,A),(10,B),(11,C)},类I2:{(8,A),(9,B),(12,C),(27,D)},类I3:{(20,A),(22,B),(24,C)},类I4:{(14,D),(23,C)}。对这四条事件子序列分别进行情节挖掘,以I1为例,由事件序列对攻击类型分类,可得到如下的攻击-时间表:攻击类型攻击发生A1,9B2,10C4,11显然,1-情节包括A,B,C,支持度都为2;由1-情节扩展,计算情节[A,B]的发生,当时间窗口大于自定义的最大值时,判定这不是一次发生并丢弃该窗口,当一次发生出现时,需要判断该次发生是否最小发生,即该次发生内部是否存在窗口更小的与之相同的情节,例如情节[A,B]的一次发生[1,2]出现后,需要指向A的指针向后继续读取,直到读取到一次大于2的数值时停止。以此类推,根据k-情节发现所有(k+1)-情节,并统计支持度。直到没有新的情节出现或最长情节长度已经达到用户定义的阈值。在该例中,I1的发生集合为{(A):2,(B):2,(C):2,(A,B):2,(A,C):2,(B,C):2,(A,B,C):2},I2的发生集合为{(A):1,(B):1,(C):1,(D):1,(A,B):1,(A,C):1,(B,C):1,(A,B,C):1},I3的发生集合为{(A):1,(B):1,(C):1,(A,B):1,(A,C):1,(B,C):1,(A,B,C):1},I4的发生集合为{(C):1,(D):1}。接着,合并所有发生集合,计算情节支持度,利用Spark可以非常容易完成该步骤,本例中为{{(A):4,(B):4,(C):4,D(2),(A,B):4,(A,C):4,(B,C):4,(A,B,C):4}}。最后,当情节的支持度不小于用户自定义支持度4时,判定其为频繁情节并将其按参数定义的保存路径记录下来,而像情节(D)的支持度为2小于4,被过滤掉。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1