GSP算法

来源:互联网 发布:免费的u盘数据恢复软件 编辑:程序博客网 时间:2024/06/05 07:00

GSP算法(Generalized Sequential Pattern mining algorithm)

https://wenku.baidu.com/view/19ee9abd960590c69ec376c6.html
http://www.doc88.com/p-999957186220.html
Mining Sequential Patterns: Generalizations and Performance Improvements(参考文献)

一、算法基本思想

给定一个事务数据库,GSP算法需要对事务数据库进行多遍扫描,GSP算法挖掘序列模式的基本架构如下:

   第一遍扫描确定该数据库中每一项的支持度,即确定该事务数据库中包含每一项的数据序列的数目。在第一遍扫描结束后,该算法知道哪些项是频繁的,即产生了频繁1项集,而每个频繁1项集即形成了频繁1序列。由频繁k序列集合Lk可产生候选(k+1)序列集合Ck+1,候选(k+1)序列集合中的每条候选序列均包含相同个数的项,且其项的个数均比其对应的种子频繁序列集合Lk中项的个数大1。在产生每一条候选(k+1)序列的同时对其计数,当所有的候选(k+1)序列均已产生后,算法根据每条候选(k+1)序列的计数确定哪些候选(k+1)序列形成频繁(k+1)序列,并作为下一步的种子集合。当由某个种子集合Lk产生的候选序列集合为空时,算法结束。

GSP算法在原有aporiori的基础上,引入3个新的概念来定义频繁模式子序列:

1) 加入时间约束,指定模式中相邻元素之间的最小和最大时间间隔,使得原有的apriori关注的连续变成了只要满足min_gap和max_gap约束的序列,都算是连续的。2) 加入time_window_size。放宽了序列模式元素中项必须来自同一个事务的限制,而是允许项存在事务时间在用户指定的时间窗内的一组事务中。使得transaction有新的定义,只要在window_size内的item,都可以认为是在同一个itemset。3) 加入分类标准。

GSP算法是一个典型的序列模式挖掘算法,它通过采用产生并检测一个候选序列的方法,是基于优先级原则的一个算法。

类似于树的广度优先搜索。

二、算法原理

1)根据所输入的序列,找出所有的单项集,即1频繁模式,这里会经过最小支持度阈值的判断。2)根据1频繁模式进行连接运算,产生2频繁模式,这里会有进行最小阈值的判断。3)根据2频繁模式连接产生3频繁模式,会经过最小支持度判断和剪枝操作,剪枝操作的原理在于判断他的所有子集是否也全是频繁模式。4)3频繁模式不断的挖掘直到不能够产生出候选集为止。

三、产生候选序列模式的步骤

1)连接阶段:如果去掉序列模式S1的第一个项目与去掉序列模式S2的最后一个项目所得到的序列相同,则可以将S1与S2进行连接,即将S2的最后一个项目添加到S1中。2)剪切阶段:若某候选序列模式的某个子序列不是序列模式,则此候选序列不可能是序列模式,将它从候选序列模式中删除。

这里写图片描述
在连接步中,种子序列<(1,2) 3>和<2 (3,4)>连接可产生候选4序列<(1,2) (3,4)>;种子序列<2 3 5>连接可产生候选4序列<(1,2) 3 5>。其余的序列均不满足连接条件。在剪枝步中,候选4序列<(1,2) 3 5>被剪去,因为其连续子序列<1,3,5>不包含在频繁3序列集合L3中。

四、后选集计数

对于事务数据库中的每个数据序列,需对其每一项进行哈希,从而确定应该考察哈希树那些叶子节点中的候选k序列。对于叶子节点中的每个候选k序列,需考察其是否包含在该数据序列中;对每个包含在该数据序列中的候选序列,其计数值加1。在考察某个数据序列d是否包含某个候选k序列时,需分成两个阶段:

1)向前阶段:在d中寻找从s的首项开始的连续子序列xi-xj(j>i)直至time(xj)-time(xi)>maxgap,此时转入向后阶段;否则,如在d中不能找到s的某个元素,则s不是d的子序列。2)向后阶段:由于此时time(xj)-time(xi)>maxgap,故此时应从时间值为time(xj)-maxgap后重新搜索xj-1,但同时应保持xj-2位置不变。当新找到的xj-1仍不满足time(xj)-time(xi)<=maxgap时,从时间值为time(xj)-maxgap后重新搜索xj-2,同时保持xi-3位置不变,直至某位置元素xj-i满足条件或x1不能保持位置不变,此时,返回前向阶段。   A.当xj-1满足time(xj-i)-time(xj-(i+1))<=maxgap时(此时,x1保持位置不变),向前阶段应从xj-i位置后重新搜索xj-i+1及后续元素;   B.当x1不能保持位置不变时,先前阶段应从原x1位置后重新搜索x1及后续元素。   在考察某个数据序列d是否包含某个候选k序列s的两个阶段中,需要在数据序列d中不断寻找候选序列s中的单个元素。故将数据序列d作如下转换:对d中的每一项建立一个此项出现时间的链表。此时,若欲寻找某些x在事务时间t后的第一次出现位置对应的事务时间,只需对x的事务时间链表遍历直至出现某个大于t的事务时间。若欲找出候选序列s的某个元素Si=(X1...Xn)在事务时间t后的第一次出现,只需遍历其中每项Xi(1<=i<=n)的事务时间链表以找出Xi在事务时间t后第一次出现的事务时间;若time(Xn)-time(X1)<=ws,则已经在数据序列d中找到Si,可以继续在d中寻找s的下一个元素;否则,令t=time(Xn)- ws并重复此过程。

五、案例分析

现假设最大事务时间间隔maxgap=30,最小事务时间间隔mingap=5,滑动时间窗口ws=0,考察候选数据序列s=<(1,2)(3)(4)>是否包含在该数据序列中。

这里写图片描述

这里写图片描述

解析过程:

首先寻找s的第一个元素(1,2)在该数据序列中第一次出现的位置,对应的事务时间为10。由于最小事务时间间隔mingap=5,故应在事务时间15之后寻找s的下一个元素(3)。由表2看出,45-10>30,故转入向后阶段,重新寻找元素(1,2)第一次的出现位置,则事务时间为50,故下一步应该在事务时间55后寻找元素(3),时间65,满足约束。此时寻找(3)的下一个元素(4),时间90,90-65=25<=30,满足约束,考察结束。

六、GSP算法分析

与AprioriAll算法相比,GSP算法计算较少的候选集,并且在数据转换中不需要事先计算频繁集。GSP算法时间复杂度与序列中的元素个数成线性比例关系,执行时间随数据序列中字段的增加而增加,但增加不明显。

七、GSP算法问题

1)如果序列数据库规模较大,则有可能产生大量的候选序列模式;2)需要对序列数据库进行循环扫描;3)对于序列模式的长度比较长的情况,算法难以处理。

这里写图片描述

原创粉丝点击