普适的事件序列频繁情节挖掘方法与流程

文档序号:15492582发布日期:2018-09-21 20:55阅读:301来源:国知局

本发明涉及一种普适的事件序列频繁情节挖掘方法。



背景技术:

自频繁情节挖掘问题提出以来,众多学者对此展开了持续研究,提出了许多代表性的解决方法,如基于窗口发生的频繁情节挖掘算法winepi和winminer,基于最小发生的频繁情节挖掘算法minepi、ept、pps、clo_episode、ap-epi、up-span、dminepi和mello,基于头发生的频繁情节挖掘算法minepi+和emma,基于总发生的频繁情节挖掘算法t-freq和discoverytotal,基于非交错发生的频繁情节挖掘算法non-interleaved,基于非重叠发生的频繁情节挖掘算法non-winminer、discoverynonover和non-overlapped,基于最小且非重叠发生的频繁情节挖掘算法manepi、fceminer和2pem。可见,基于不同发生计数的支持度定义是挖掘频繁情节时必须考虑的一个尺度。一方面,支持度定义决定着挖掘的结果,针对同一事件序列根据不同支持度定义挖掘的频繁情节不尽相同;另一方面,支持度定义影响着挖掘的过程,有些支持度定义满足单调性(若β是α的任一子情节,则β的发生次数不小于α的发生次数),有些则不然,而单调性是加快频繁情节搜索的重要依据。

上述算法在各自支持度定义下具有较好的挖掘效果,但在支持度定义发生变化时却很难甚至无法直接挖掘频繁情节。为此,学者们提出了一个基于apriori思想逐层发现频繁情节的算法fem-bfs。该算法采用广度优先搜索策略,首先由k(k>0)层的频繁情节产生k+1层的候选频繁情节,然后通过扫描事件序列来跟踪各个候选频繁情节状态机的状态变化,并由参数transit、copy-automaton、join-automaton、increment-freq和retire-automaton分别控制当前状态机是否发生状态转移、当前状态机转移至下一状态前是否要复制一个副本、两个状态机转移至同一状态时是否要删除较早的状态机、当前状态机转移至终止状态时情节发生次数是否增1、情节发生次数增1后是否删除该情节的所有状态机,从而计算每个候选频繁情节在不同支持度定义下的发生次数,进而发现k+1层的频繁情节。该算法虽然兼顾了多种支持度定义,但挖掘过程中需要多遍扫描事件序列,且每遍扫描前都要存储大量的候选频繁情节,这势必导致较为昂贵的时间和空间代价。



技术实现要素:

本发明的目的是提供一种普适的事件序列频繁情节挖掘方法解决现有技术中存在的挖掘过程中需要多遍扫描事件序列,且每遍扫描前都要存储大量的候选频繁情节,导致较为昂贵的时间和空间代价的问题。

本发明的技术解决方案是:

定义1(事件,事件序列):给定事件类型集ε={e1,e2,…,en},一个事件就是一个二元组(e,t),其中,e∈ε,t表示该事件的发生时间。定义在ε上的一个事件序列es是按发生时间先后排列的若干事件,表示为es=<(e1,t1),(e2,t2),…,(em,tm)>,其中ti<tj(1≤i<j≤m)。假设在每个时间点上至多只发生一个事件。

例如,es1=<(a,1),(a,2),(a,4),(b,5),(a,6),(a,7),(c,8),(b,9),(d,11),(c,12),(a,13),(b,14),(c,15),(d,16),(a,17)>就是一个事件序列。

定义2(情节,子情节):情节α是ε中若干事件类型组成的序列,记为α=<e1e2…ek>,其中ei(1≤i≤k)∈ε且对于所有的i和j(1≤i<j≤k)满足ei排列在ej之前。情节α中事件类型的个数称为α的长度(记为|α|),长度为k的情节称为k-情节。若情节β中的事件类型均来自情节α,且与α中这些事件类型的先后顺序一致,则称β是α的子情节,记作

例如,<abc>是一个3-情节,<ab>是<abc>的子情节,而<ba>不是。

定义3(窗口):给定事件序列es=<(e1,t1),(e2,t2),…,(em,tm)>,设ts≥t1,te≤tm,则[ts,te]是es上的一个窗口,该窗口包含了ts到te的所有事件,te-ts称为该窗口的宽度,ts和te分别称为该窗口的起始时间和终止时间。

例如,[2,8]是事件序列es1上一个宽度为6的窗口,其起始时间为2,终止时间为8。

定义4(前缀,后缀,串接):给定情节α=<e1e2…ek>,则<e1e2…ek-1>称为α的前缀,记为prefix(α);<e2…ek>称为α的后缀,记为suffix(α)。给定情节α=<e1e2…en>和β=<e'1e'2...e'm>,则<e1e2...ene'1e'2...e'm>称为α和β的串接,记为concat(α,β)。

例如,<ab>和<bc>分别是情节<abc>的前缀和后缀,concat(<ab>,<bc>)=<abbc>。

定义5(发生,最早转移发生):给定事件序列es和情节α=<e1e2…ek>,若<(e1,t1),(e2,t2),…,(ek,tk)>是从es中删除若干事件后得到,其中ti<ti+1(1≤i≤k-1),则称[t1,t2,…,tk]为α在es上的一次发生,[t1,tk]为发生区间,tk-t1为区间长度。若[t1,t2,…,tk]是情节α=<e1e2…ek>在事件序列es上的一次发生,且ti(2≤i≤k)是继ti-1之后事件类型ei的首次发生时间,则称[t1,t2,…,tk]是α在es上的一次最早转移发生,情节α在es上所有最早转移发生组成的集合记为eto(α)。

例如,在事件序列es1上,[4,9,12]是情节<abc>的一次发生(但不是最早转移发生),该发生区间为[4,12],区间长度为8,eto(<abc>)={[1,5,8],[2,5,8],[4,5,8],[6,9,12],[7,9,12],[13,14,15]}。

性质1(单调性):若β是α的任一子情节,则β的发生次数不小于α的发生次数。

性质2(前缀单调性):prefix(α)的发生次数不小于α的发生次数。显然,

性质3(后缀单调性):suffix(α)的发生次数不小于α的发生次数。显然,

定义6(基于窗口发生的支持度):给定事件序列es=<(e1,t1),(e2,t2),…,(en,tn)>和窗口宽度w,则es上共包含(tn-t1+w+1)个宽度为w的窗口,其中第一个窗口仅包含事件(e1,t1),最后一个窗口仅包含事件(en,tn)。宽度为w且至少包含情节α一次发生的窗口的集合记为wo(α),集合wo(α)的基数|wo(α)|称为情节α基于窗口发生的支持度。基于窗口发生的支持度定义满足性质1。

例如,设窗口宽度w=6,情节α=<abc>,则在事件序列es1上,wo(α)={[2,8],[3,9],[4,10],[6,12],[7,13],[9,15],[10,16],[11,17],[12,18],[13,19]},|wo(α)|=10。

定义7(基于最小发生的支持度):设[t1,t2,…,tk]是情节α=<e1e2…ek>在事件序列es上的一次发生,若es上不存在α的另一次发生[t'1,t'2,...,t'k],使得t1<t'1且tk≤tk,或t1≤t′1且t′k<tk,则称[t1,t2,…,tk]是α的一次最小发生。情节α在es上所有最小发生组成的集合记为mo(α),集合mo(α)的基数|mo(α)|称为情节α基于最小发生的支持度。

例如,设情节α=<abc>,β=<ac>,则在事件序列es1上mo(α)={[4,5,8],[7,9,12],[13,14,15]},|mo(α)|=3,mo(β)={[7,8],[13,15]},|mo(β)|=2。因β是α的子情节,且|mo(β)|<|mo(α)|,所以基于最小发生的支持度定义不满足性质1,但满足性质2和性质3。

定义8(基于头发生的支持度):给定事件序列es=<(e1,t1),(e2,t2),…,(en,tn)>和窗口宽度w,若宽度为w的窗口[ts,te]至少包含了情节α=<e1e2…ek>的一次发生,且ts正好是e1的发生时间,则称[ts,te]是α的一次头发生。情节α在es上所有头发生组成的集合记为ho(α),集合ho(α)的基数|ho(α)|称为情节α基于头发生的支持度。

例如,设窗口宽度w=6,情节α=<abc>,β=<bc>,则在事件序列es1上,ho(α)={[2,8],[4,10],[6,12],[7,13],[13,19]},|ho(α)|=5,ho(β)={[5,11],[9,15],[14,20]},|ho(β)|=3。因为β是α的后缀,且|ho(β)|<|ho(α)|,所以基于头发生的支持度定义不满足性质1和性质3,但满足性质2。

定义9(基于总发生的支持度):设β是α的一个子情节,若不存在α的另一个子情节γ,使得|ho(γ)|<|ho(β)|,则称|ho(β)|为情节α基于总发生的支持度,记为|to(α)|。基于总发生的支持度定义满足性质1。

例如,设窗口宽度w=6,在事件序列es1上,ho(<ac>)={[2,8],[4,10],[6,12],[7,13],[13,19]},ho(<ab>)={[1,7],[2,8],[4,10],[6,12],[7,13],[13,19]},ho(<bc>)={[5,11],[9,15],[14,20]},所以|to(<abc>)|=|ho(<bc>)|=3。

定义10(基于非交错发生的支持度):设[t1,t2,…,tk]和[t'1,t'2,...t'k]是情节α=<e1e2…ek>在事件序列es上的两次发生,若ti≥t′i+1或t′i≥ti+1(1≤i≤k-1),则称[t1,t2,…,tk]和[t'1,t'2,...t'k]是α在es上的非交错发生。情节α在es上非交错发生组成的最大集合记为ni(α),集合ni(α)的基数|ni(α)|称为情节α基于非交错发生的支持度。

例如,设情节α=<abc>,β=<ac>,在事件序列es1上ni(α)={[1,5,8],[6,9,12],[13,14,15]},|ni(α)|=3,ni(β)={[1,8],[13,15]},|ni(β)|=2。因为β是α的子情节,且|ni(β)|<|ni(α)|,所以基于非交错发生的支持度定义不满足性质1,但满足性质2和性质3。

定义11(基于非重叠发生的支持度):设[t1,t2,…,tk]和[t'1,t'2,...t'k]是情节α=<e1e2…ek>在事件序列es上的两次发生,若tk<t′1或t′k<t1,则称[t1,t2,…,tk]和[t'1,t'2,...t'k]是α在es上的非重叠发生。情节α在es上非重叠发生组成的最大集合记为no(α),集合no(α)的基数|no(α)|称为α基于非重叠发生的支持度。基于非重叠发生的支持度定义满足性质1。

例如,在事件序列es1上,no(<abc>)={[1,5,8],[13,14,15]},|no(abc>)|=2。

定义12(基于最小且非重叠发生的支持度):设[t1,t2,…,tk]和[t'1,t'2,...t'k]是情节α=<e1e2…ek>在事件序列es上的两次最小发生,若tk<t′1或t′k<t1,则称[t1,t2,…,tk]和[t'1,t'2,...t'k]是α在es上的最小且非重叠发生。情节α在es上最小且非重叠发生组成的最大集合记为mn(α),集合mn(α)的基数|mn(α)|称为α基于最小且非重叠发生的支持度。基于最小且非重叠发生的支持度定义满足性质1。

例如,在事件序列es1上,mn(<abc>)={[4,5,8],[13,14,15]},|mn(abc>)|=2。

定义13(频繁情节):给定支持度阈值min_sup,若情节α的支持度不小于min_sup,则称α是一个频繁情节。

一种普适的事件序列频繁情节挖掘方法,在给定事件序列、窗口宽度、支持度阈值和支持度定义的前提下,基于深度优先搜索方式和共享前/后缀树存储结构来挖掘事件序列上的所有频繁情节,挖掘过程中兼顾多种支持度定义包括窗口发生、最小发生、头发生、总发生、非交错发生、非重叠发生、最小且非重叠发生,单遍扫描事件序列,且不产生候选频繁情节。

进一步地,具体为,

s1、初始化共享前/后缀树t;

s2、扫描事件序列一遍,依据支持度定义和支持度阈值,发现所有的频繁1-情节并按字典序排列;

s3、对于每个频繁1-情节α,在共享前/后缀树t中生成根结点的孩子结点nα,每个结点包括情节名、情节发生集和孩子指针集三个域,为了兼顾考虑窗口发生、最小发生、头发生、总发生、非交错发生、非重叠发生、最小且非重叠发生的支持度定义,每个情节的发生集为其最早转移发生集;

s4、分别对每个频繁1-情节α,进行如下递归处理:依次取出每个频繁1-情节β对α进行情节增长,令增长后的情节为γ=concat(α,β)或γ=concat(β,α),即γ是以α为前缀或后缀进行增长,每次增长后依据支持度定义计算γ的发生集,若γ是频繁情节,则在树t中添加nα的孩子结点nγ,并对γ进行类似于α的情节增长处理,如此不断迭代,直至没有发现更长的频繁情节为止,得到事件序列上所有频繁情节。

进一步地,步骤s1中,共享前/后缀树t是一棵有向根树,除根结点外,共享前/后缀树t中的每个结点是一个三元组(name,occ,child),其中name表示该结点对应的情节,occ表示该结点对应情节的发生集,child表示该结点的孩子指针集,共享前/后缀树t中父结点的name,要么是子结点name的前缀,要么是子结点name的后缀。

进一步地,步骤s4中,对于总发生的支持度定义,情节增长时采用后缀增长;对于基于窗口发生、头发生、最小发生、非交错发生、非重叠发生、最小且非重叠发生的支持度定义均采用前缀增长。

本发明的有益效果是:该种普适的事件序列频繁情节挖掘方法,融合多种支持度定义,在单遍扫描事件序列和不产生候选频繁情节的前提下,基于深度优先搜索方式和共享前/后缀树存储结构,能够有效发现和存储事件序列上的所有频繁情节。实验验证,随着支持度阈值的增加,本发明方法运行时间、内存开销更快减少;随着窗口宽度或序列长度的增加,本发明方法运行时间、内存开销增加更少;本发明在以上各方面均优于现有方法。

附图说明

图1是实施例中事件序列es1基于窗口发生、最小发生、头发生、非交错发生、非重叠发生、最小且非重叠发生的情形下的频繁情节共享前缀树。

图2是实施例中事件序列es1基于总发生的情形下的频繁情节共享后缀树。

图3是实施例普适的事件序列频繁情节挖掘方法fem-dfs和现有方法fem-bfs实验1的结果对比示意图。

图4是实施例普适的事件序列频繁情节挖掘方法fem-dfs和现有方法fem-bfs实验2的结果对比示意图。

图5是实施例普适的事件序列频繁情节挖掘方法fem-dfs和现有方法fem-bfs实验3的结果对比示意图。

图6是实施例普适的事件序列频繁情节挖掘方法fem-dfs和现有方法fem-bfs实验4的结果对比示意图。

图7是实施例普适的事件序列频繁情节挖掘方法fem-dfs和现有方法fem-bfs实验5的结果对比示意图。

图8是实施例普适的事件序列频繁情节挖掘方法fem-dfs和现有方法fem-bfs实验6的结果对比示意图。

图9是实施例普适的事件序列频繁情节挖掘方法fem-dfs和现有方法fem-bfs实验7的结果对比示意图。

具体实施方式

下面结合附图详细说明本发明的优选实施例。

实施例

针对现有频繁情节挖掘算法存在的不足,实施例提出了一个采用深度优先搜索方式和共享前/后缀树存储结构的频繁情节挖掘算法fem-dfs,满足了实际情况下用户多变的支持度定义需求,实验评估证实了算法fem-dfs能够有效地发现事件序列上的频繁情节。

由于许多频繁情节具有相同的前缀或后缀,所以实施例方法采用共享前/后缀树来存储发现的频繁情节,可以节省存储空间。共享前/后缀树是一棵有向根树,除根结点外,树中的每个结点是一个三元组(name,occ,child),其中name表示该结点对应的情节,occ表示该结点对应情节的发生集,child表示该结点的孩子指针集。树中父结点的name,要么是子结点name的前缀,要么是子结点name的后缀,故取名共享前/后缀树。

为了在频繁情节发现过程中只扫描事件序列一遍,且不产生候选频繁情节,实施例采用深度优先搜索方式来发现频繁情节,并利用下文中性质1、性质2或性质3来压缩频繁情节的搜索空间。

一种普适的事件序列频繁情节挖掘方法,在给定事件序列、窗口宽度、支持度阈值和支持度定义的前提下,基于深度优先搜索方式和共享前/后缀树存储结构来挖掘事件序列上的所有频繁情节,挖掘过程兼顾了窗口发生、最小发生、头发生、总发生、非交错发生、非重叠发生、最小且非重叠发生等多种支持度定义,只需单遍扫描事件序列,且不产生候选频繁情节。

该种普适的事件序列频繁情节挖掘方法,具体包括以下步骤,

1)初始化共享前/后缀树t。共享前/后缀树是一棵有向根树,除根结点外,树中的每个结点是一个三元组(name,occ,child),其中name表示该结点对应的情节,occ表示该结点对应情节的发生集,child表示该结点的孩子指针集。树中父结点的name,要么是子结点name的前缀,要么是子结点name的后缀。

2)扫描事件序列一遍,依据支持度定义和支持度阈值,发现所有的频繁1-情节并按字典序排列。

3)对于每个频繁1-情节α,在树t中生成根结点的孩子结点nα,每个结点包括情节名、情节发生集和孩子指针集三个域。为了兼顾考虑各种支持度定义,每个情节的发生集为其最早转移发生集,这是因为:对于受窗口宽度约束的窗口发生、头发生和总发生而言,由情节的最早转移发生集和窗口宽度,可以计算情节的窗口发生集、头发生集和总发生支持度;对于不受窗口宽度约束的最小发生、非交错发生、非重叠发生、最小且非重叠发生而言,由情节的最早转移发生集,可以计算情节的最小发生集、非交错发生最大集、非重叠发生最大集、最小且非重叠发生最大集。

4)分别对每个频繁1-情节α,进行如下递归处理:依次取出每个频繁1-情节β对α进行情节增长,令增长后的情节为γ=concat(α,β)或γ=concat(β,α),即γ是以α为前缀或后缀进行增长,每次增长后依据支持度定义计算γ的发生集,若γ是频繁情节,则在树t中添加nα的孩子结点nγ,并对γ进行类似于α的情节增长处理,如此不断迭代,直至没有发现更长的频繁情节为止,得到事件序列上所有频繁情节。为了保证不丢失情节支持度的计算依据和不丢失频繁情节,对于总发生的支持度定义,情节增长时选用后缀增长,其他情形下情节增长时选用前缀增长。

该种普适的事件序列频繁情节挖掘方法,通过生成一个只有根结点的共享前/后缀树t;扫描事件序列一遍,依据支持度定义和支持度阈值,发现所有的频繁1-情节并按字典序排列;分别对每个频繁1-情节α,进行如下递归处理:首先在树t中生成根结点的孩子结点nα(每个结点包括情节名、情节最早转移发生集和孩子指针集三个域),然后依次取出每个频繁1-情节β对α进行情节增长:γ=concat(α,β)或γ=concat(β,α),即γ是以α为前缀或后缀进行增长,每次增长后依据支持度定义计算γ的发生集,若γ是频繁情节,则在树t中添加nα的孩子结点nγ,并对γ进行类似于α的情节增长处理,如此不断迭代,直至没有发现更长的频繁情节为止。

该种普适的事件序列频繁情节挖掘方法,融合多种支持度定义,在单遍扫描事件序列和不产生候选频繁情节的前提下,基于深度优先搜索方式和共享前/后缀树存储结构,能够有效发现和存储事件序列上的所有频繁情节。

该种普适的事件序列频繁情节挖掘方法能够解决:给定事件序列es、窗口宽度w、支持度阈值min_sup和支持度定义def_sup,能够1)单遍扫描es;2)挖掘过程中不产生候选频繁情节;3)融合基于窗口发生、最小发生、头发生、总发生、非交错发生、非重叠发生、最小且非重叠发生的支持度定义,来有效挖掘es上所有频繁情节。

具体示例如下:

以事件序列es1=<(a,1),(a,2),(a,4),(b,5),(a,6),(a,7),(c,8),(b,9),(d,11),(c,12),(a,13),(b,14),(c,15),(d,16),(a,17)>和最小支持度阈值min_sup=2为例,发现es1上所有频繁情节的本质就是构建共享前/后缀树的过程,需要解决两个关键问题:一是存储策略,即每个结点存储情节的何种发生集才能保证不丢失情节支持度的计算依据;二是增长策略,即情节增长时是选择前缀增长还是后缀增长才能保证挖掘过程不会丢失频繁情节。为此,实施情节增长时依据不同的支持度定义作如下处理:

情形1:窗口发生

若结点nα存储情节α的窗口发生集wo(α),则无法计算α增长后情节的窗口发生集,这是因为wo(α)的每个窗口并未记载α中各事件类型的发生时间。为此,结点nα需要存储情节α的最早转移发生集eto(α),这样既可以计算情节α的窗口发生集wo(α),也便于与其他支持度定义采取同一存储策略。例如,设窗口宽度w=6,情节α=<abc>,则在事件序列es1上,eto(α)={[1,5,8],[2,5,8],[4,5,8],[6,9,12],[7,9,12],[13,14,15]},由eto(α)中每个区间长度≤w的发生[t1,t2,…,tk],可以得到w-(tk-t1)+1个宽度为w的连续窗口。从以上窗口集中删除重复的窗口后,得wo(α)={[2,8],[3,9],[4,10],[6,12],[7,13],[9,15],[10,16],[11,17],[12,18],[13,19]}。

该支持度定义满足单调性,情节增长时可以选用前缀增长或后缀增长。

情形2:最小发生

最小发生不受窗口宽度的约束。若结点nα存储情节α的最早转移发生集eto(α),则可以由此计算情节α的最小发生集mo(α)。例如,设情节α=<abc>,则在事件序列es1上,eto(α)={[1,5,8],[2,5,8],[4,5,8],[6,9,12],[7,9,12],[13,14,15]},对于eto(α)中相邻的两个发生,若结束时间相同,则前者一定不是最小发生,所以mo(α)={[4,5,8],[7,9,12],[13,14,15]}。

该支持度定义满足前缀单调性(情节α的前缀的发生次数不小于α的发生次数)和后缀单调性(情节α的后缀的发生次数不小于α的发生次数),情节增长时可以选用前缀增长或后缀增长。

情形3:头发生

头发生是一种窗口发生,也受窗口宽度的约束。若结点nα存储情节α的最早转移发生集eto(α),则可以由此计算情节α的头发生集ho(α)。例如,设窗口宽度w=6,则在事件序列es1上,eto(<abc>)={[1,5,8],[2,5,8],[4,5,8],[6,9,12],[7,9,12],[13,14,15]},由eto(α)中每个区间长度≤w的发生[t1,t2,…,tk],可以得到1个长度为w的窗口[t1,t1+w],所有这些窗口组成的集合即为ho(α)={[2,8],[4,10],[6,12],[7,13],[13,19]}。

该支持度定义只满足前缀单调性,情节增长时只能进行前缀增长,否则会丢失频繁情节。

情形4:总发生

基于总发生的支持度计算方法为|to(α)|=min(|ho(α)|,|to(suffix(α))|),这说明情节增长时只能采用后缀增长。设增长后情节为α,增长前|to(suffix(α))|已知,增长后|ho(α)|可由eto(α)计算得到。例如,设窗口宽度w=6,情节α=<abc>,则在事件序列es1上,eto(α)={[1,5,8],[2,5,8],[4,5,8],[6,9,12],[7,9,12],[13,14,15]},|to(suffix(α))|=|to(<bc>)|=3,故有|ho(α)|=|{[2,8],[4,10],[6,12],[7,13],[13,19]}|,|to(α)|=min(|ho(α)|,|to(suffix(α))|)=min(5,3)=3。

情形5:非交错发生

非交错发生也不受窗口宽度的约束。若结点nα存储情节α的最早转移发生集eto(α),则可以由此计算情节α的非交错发生集ni(α)。例如,设情节α=<abc>,则在事件序列es1上,eto(α)={[1,5,8],[2,5,8],[4,5,8],[6,9,12],[7,9,12],[13,14,15]}。初始令ni(α)={[1,5,8]},然后将eto(α)中首先与[1,5,8]非交错的发生[6,9,12]添加至ni(α)中,再将eto(α)中首先与[6,9,12]非交错的发生[13,14,15]添加至ni(α)中,最后有ni(α)={[1,5,8],[6,9,12],[13,14,15]}。

该本支持度定义满足前缀单调性和后缀单调性,情节增长时可以选用前缀增长或后缀增长。

情形6:非重叠发生

非重叠发生(未必是最小发生)也不受窗口宽度的约束。若结点nα存储α的非重叠发生集no(α),则深度优先搜索时可能会丢失频繁情节。例如,在事件序列es1上,no(<aab>)={[1,2,5],[6,7,9]},no(<a>)={[1,1],[2,2],[4,4],[6,6],[7,7],[13,13],[17,17]},从而有no(<aaba>)={[1,2,5,6]},为此认为<aaba>是非频繁的。事实上,<aaba>在es1上有两次非重叠发生{[1,2,5,6],[7,13,14,17]},<aaba>是频繁情节。

若结点nα存储情节α的最早转移发生集eto(α),则不仅可以计算情节α的非重叠发生集no(α),而且也保证挖掘过程中不会丢失频繁情节。例如,在事件序列es1上,eto(<aab>)={[1,2,5],[2,4,5],[4,6,9],[6,7,9],[7,13,14]}。初始令no(<aab>)={[1,2,5]},然后将eto(<aab>)中首先与[1,2,5]非重叠的发生[6,7,9]添加至no(<aab>)中,从而有no(<aab>)={[1,2,5],[6,7,9]}。因为eto(<a>)={[1,1],[2,2],[4,4],[6,6],[7,7],[13,13],[17,17]},所以eto(<aaba>)={[1,2,5,6],[2,4,5,6],[4,6,9,13],[6,7,9,13],[7,13,14,17]},从而有no(<aaba>)={[1,2,5,6],[7,13,14,17]}。

该支持度定义满足单调性,情节增长时可以选用前缀增长或后缀增长。

情形7:最小且非重叠发生

最小且非重叠发生也不受窗口宽度的约束。若结点nα存储α的最小且非重叠发生集mn(α),则挖掘过程也可能会丢失频繁情节。例如,在事件序列es1上,mn(<aab>)={[2,4,5],[6,7,9]},mn(<a>)={[1,1],[2,2],[4,4],[6,6],[7,7],[13,13],[17,17]},从而有mn(<aaba>)={[2,4,5,6]},为此认为<aaba>是非频繁的。事实上,<aaba>在es1上有两次最小且非重叠发生{[2,4,5,6],[7,13,14,17]},<aaba>是频繁情节。

若结点nα存储情节α的最早转移发生集eto(α),则不仅可以计算情节α的最小且非重叠发生集mn(α),而且也保证挖掘过程中不会丢失频繁情节。例如,在事件序列es1上,eto(<aab>)={[1,2,5],[2,4,5],[4,6,9],[6,7,9],[7,13,14]},mo(<aab>)={[2,4,5],[6,7,9],[7,13,14]}。初始令mn(<aab>)={[2,4,5]},然后将mo(<aab>)中首先与[2,4,5]非重叠的发生[6,7,9]添加至mn(<aab>)中,从而有mn(<aab>)={[2,4,5],[6,7,9]}。由eto(<aaba>)={[1,2,5,6],[2,4,5,6],[4,6,9,13],[6,7,9,13],[7,13,14,17]}可得mo(<aaba>)={[2,4,5,6],[6,7,9,13],[7,13,14,17]},从而有mn(<aaba>)={[2,4,5,6],[7,13,14,17]}。

该支持度定义满足单调性,情节增长时可以选用前缀增长或后缀增长。

实施例中的图1事件序列es1,基于窗口发生、最小发生、头发生、非交错发生、非重叠发生、最小且非重叠发生的情形下的频繁情节共享前缀树如图1;基于总发生的情形下的频繁情节共享后缀树,如图2。

实验验证

通过七组实验对比算法fem-dfs和fem-bfs的时空性能,并分析fem-dfs在不同支持度定义下的挖掘结果。实验的硬件环境为3.6ghzintel(r)core(tm)i7-4790cpu,内存8gb,操作系统为windows8,程序采用java实现。

数据集

对于合成数据集,首先使用ibm合成数据生成器questmarket-basket,通过设置d=0.001(交易序列的个数为0.001*1000=1),c=300000(每个交易序列中交易的平均个数为300000),n=20(交易项类型种数为20*1000=20000),s=300000(最长交易序列中交易的平均个数为300000),这样就得到了一个在20000种交易项类型上由300000个交易组成的交易序列,其中每个交易是一个交易项类型。然后,为该交易序列的每个交易依次赋上一个连续的正整数作为交易发生的时间戳,这样就构造了一个20k种事件类型上的由300k个事件组成的事件序列。

对于真实数据集,作为国内最具影响力的知识传播与数字化学习平台,中国知网cnki为全社会提供了最丰富、最全面的文献资源,为了发现cnki中文献之间的引用关系,并为广大学者开展学术研究提供个性化的文献推荐阅读,实施例选用cnki一个web服务器上从2017年11月1日至2017年11月30日的日志数据,该日志数据包括了读者在153729种不同文献上的371227个阅读组成的序列。

实验1运行时间vs支持度阈值

选择300k合成数据集和30天真实数据集,两个数据集的窗口宽度分别设定为200和5天,通过改变支持度阈值,得到如图3所示的两个算法各自在七种支持度定义下的平均运行时间。

由图3可以看出,随着支持度阈值的增加,两个算法的运行时间都在线性减少,且fem-dfs要优于fem-bfs。主要原因是:支持度阈值越大,频繁情节越少;fem-bfs采用广度优先搜索策略,需要多遍扫描事件序列,而fem-dfs采用深度优先搜索策略,只需单遍扫描事件序列。

实验2运行时间vs窗口宽度

选择300k合成数据集和30天真实数据集,两个数据集的支持度阈值分别设定为1200和7,通过改变窗口宽度,得到如图4所示的两个算法各自在窗口发生、头发生和总发生支持度定义下的平均运行时间。

由图4可以看出,可以看出,随着窗口宽度的增加,两个算法的运行时间也在线性增加,这是因为窗口宽度越大,频繁情节越多。另外,fem-dfs要优于fem-bfs,这是因为两者采用了不同的搜索策略。

实验3运行时间vs序列长度

设定合成数据集的支持度阈值和窗口宽度分别为800和200,真实数据集的支持度阈值和窗口宽度分别为7和5天,并选择前100k、前150k、前200k、前250k个和所有300k个合成数据作为五个合成子序列,选择前6天、前12天、前18天、前24天和所有30天真实数据作为五个真实子序列,通过改变序列长度,得到如图5所示的两个算法各自在七种支持度定义下的平均运行时间。

由图5可以看出,两个算法的运行时间都随着序列长度的增加而线性增加,这是因为序列长度越大,频繁情节越多。另外,fem-dfs要优于fem-bfs,这也源于两者不同的搜索策略。

实验4内存开销vs支持度阈值

与实验1的设置相同,通过改变支持度阈值,得到如图6所示的两个算法各自在七种支持度定义下的平均内存开销。

由图6可以看出,随着支持度阈值的增加,两个算法的内存开销都在线性减少,且fem-dfs要优于fem-bfs,原因同实验1。

实验5内存开销vs窗口宽度

与实验2的设置相同,通过改变窗口宽度,得到如图7所示的两个算法各自在窗口发生、头发生和总发生支持度定义下的平均内存开销。

由图7可以看出,随着窗口宽度的增加,两个算法的内存开销都在线性增加,但fem-dfs要优于fem-bfs,原因同实验2。

实验6内存开销vs序列长度

与实验3的设置相同,通过改变序列长度,得到如图5所示的两个算法各自在七种支持度定义下的平均内存开销。

由图8可以看出,两个算法的内存开销都随着序列长度的增加而线性增加,但fem-dfs要优于fem-bfs,原因同实验3。

实验7频繁情节个数vs支持度定义

选择300k合成数据集和30天真实数据集,两个数据集的支持度阈值分别设定为800和7,窗口宽度分别设定为200和5天,通过改变支持度定义,得到如图9所示的算法fem-dfs在不同支持度定义下的频繁情节个数。

由图9可以看出,基于窗口发生、头发生、总发生的三种支持度定义,发现的频繁情节个数依次递减;基于非交错发生、最小发生、非重叠发生的三种支持度定义,发现的频繁情节个数也在依次递减;基于非重叠发生、最小且非重叠发生的两种支持度定义,发现的频繁情节个数相同。主要原因:同一情节的发生次数在不同支持度定义下有着固定的比较关系,这与定理5一致。

综上,实施例方法采用深度优先搜索方式和共享前/后缀树存储结构的频繁情节挖掘算法fem-dfs,满足了实际情况下用户多变的支持度定义需求,实验评估证实了算法fem-dfs能够有效地发现事件序列上的频繁情节。

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