paper: https://www.researchgate.net/publication/221654035_FreeSpan_Frequent_pattern-projected_sequential_pattern_mining
FreeSpan: Frequent pattern projected sequential pattern mining
基于频繁模式投影的序列模式挖掘
FreeSpan算法
基于频繁模式投影的序列模式挖掘算法,该算法主要利用投影,每次选出长度为2的频繁序列,再递归的对其产生的投影进行挖掘,最终挖掘出所有的序列模式。
算法流程:
(1)生成频繁项
给定序列数据库S,以及最小支持度sup。第一扫描S找到其中所有的频繁1项,按照降序排列。
比如如下的S,可以生成频繁1项集
(2) 生成频繁矩阵
扫描S,构建频繁项矩阵,是一个三角矩阵
(其中x, y为频繁项)由一个三元组(A,B,C), A表示x发生在y前面的次数(一条数据为1次),如
B表示y发生在x前面的次数,如
, C表示x和y发生在同一个项集的次数,比如
.
这个矩阵是按行看的。
个人理解在扫描每条数据的时候,对于每条数据应该是
的时间复杂度,才能找到所有可能的组合。
(3)生成长度为2的序列模式项
,因为
包含了由x 和y组成的三个序列序列模式项,首先根据计数值和最小支持度筛选小于支持度的组合,然后将这些组合写出来,比如
对应的三个项为
。
这一步生成的是table3中的第二列,其中第一列是跟根据频繁一项集的支持度来进排序的。
(4)生成重复项标记
重复项标记是根据第二列的结果生成的符号标记,第二列中不包含重复的例如
这样的项, 如果
支持度也满足条件,那就要在对应符号标记中记为
.
注意符号标记项中的
和
表示意义不同,
类的标记是不可变的,而
是可以任意组合的,比如
可以表示为
(根据重复模式生成pattern需要扫描数据集)。标记项为了将重复的和非重复的模式项都找出来。
(5)生成投影数据库
对于第一列中有2-sequence,求其前缀投影得到第四列,如果没有前缀,那么其对应的序列模式在第三部就已经被求出来了。
否则对第四列进行递归操作得到,每次将投影数据库的项与已求出的频繁序列进行拼接,进行递归操作。
上述过程中一共就扫描了三次数据集,第一次生成的频繁1项集,第二次生成频繁矩阵,第三次生成重复模式和投影数据库。