序列模式挖掘是数据挖掘中的重要研究内容之一,目前已经在各个领域中有着广泛的应用,如客户购买行为模式预测、Web访问模式预测、生物医学上DNA遗传鉴定与疾病诊断、网络入侵检测等等方面。Srikant和Agrawal提出的序列模式挖掘算法发现序列集中的序列,尽管存在一些有趣的后续研究,如SPADE[1] (Zaki [Zak01]) 、PrefixSpan[2] (Pei,Han,Mortazavi-Asl等[PHMA+01])和CloSpan[3] (Yan,Han)算法的开发,文献[1]中SPADE通过分解原问题成更小的子问题,使用格点搜索技术与连接操作让它高效的运行于内存中,文献[3]提出挖掘频繁的闭项集算法CloSpan,但以上几种算法中序列模式的基本定义没有改变。然而,假设我们想发现在给定的序列中频繁出现的子序列(即序列模式),其中不允许出现间隙,也就是说,不认为AG是序列ATG的子序列。
运用现有的序列模式挖掘算法在给定的序列中查找满足最小支持度阈值的连续子序列完全集,算法的运行效率低下。就频繁连续子序列模式的挖掘探讨,文献[4,5]对此有过研究,文献[5]在文献[4]的MacosVSpan算法[4]基础上通过减少数据访问次数和避免生成额外数据的方法来提高检索性能,两者都是在生物信息工程中挖掘最大的连续子序列,而非满足最小支持度的连续子序列的完全集。针对此种问题,此论文提出一种较优的挖掘频繁连续子序列完全集的算法IndFCSS(Index-based Frequent ContiguousSubsequence Sets) , 它只完全扫描一次数据集,且不生成额外的候选项,利用索引化技术在挖掘连续子序列集时不断的进行解的空间剪枝,达到较高的算法效率。
为展示该算法的优越性,大量真实的实验运行在基于不同的实验环境测试数据集上。论文以下内容按照如下的方式组织,第二部分给出频繁连续子序列相关的基本概念和一些应用于本论文相关的知识,挖掘频繁连续子序列集算法IndFCSS的原理、设计与实现在第三部分有详细的阐述,第四部分对该算法的运行性能进行了分析与研究,第五部分讨论了相关的工作,呈现了总结与展望。
设I={i1,i2,i3,…,ik}是项的集合,每一项可能代表一个字母、子图、子树等等结构形式。一个序列s=< t1,t2,t3,…,tm>(tiI)。序列s的大小用|s|,表示序列中的所有项的数目。同时序列的长度记作length(s), 是序列中所有项的总共数量,一个序列的长度为l被称作一个l-序列。如果一个集合c有:cs且k=|s|,则c称为s的k项集,或者简称为s的子集。记D为事务T的集合,其中TI。对应的每一个事务有唯一的标识,称作TID。如果序列s中出现集合c的频率,记作支持度Sup(c),大于某个给定的最小阀值min_s,我们称c在序列s中频繁的。
定义1.如果一序列α=<a1, a2, …, an}和另一序列β=<b1,b2,……,bm},存在整数1≤j1<j2<…<jn≤m且ji+1=ji+1, 1≤i≤n-1 使a1=bj1, a2=bj2, a3=bj3,…an=bjn。我们称序列β包含α,αβ,由于α在β中是连续的,所以称α是β的连续子序列CSS,在本论文中使用α=sub(β)。序列α的长度为k,则α也称作β的连续k子序列。
显然序列的连续子序列是该序列的子序列,但序列的子序列SS并非是连续的子序列,有CSSSS。
例如,考虑一序列字母<AUGTGUUAAAAGGAG>,与另一序列b=<GTGU>,可知序列b是前一序列的连续子序列,而序列c=<UTGAAAGAG>,只是第一个序列的子序列,而非连续的子序列。
定义2. 给定序列s和min_s,对于序列s的连续子序列α,若Sup(α)≥ min_s,则α为序列s的频繁连续子序列。其中Sup(α)表示连续子序列α在序列s中的支持度,很明显α也同时是序列s的频繁子序列。
对给定的序列s和给定的支持度min_s,设定所有频繁序列集为FS,连续子序列集合为CSS,频繁的连续子序列集合为FCSS,有FCSSFS且FCSSCSS,有关连续子序列和频繁连续子序列,还具有如下性质:
性质1.如果μ,λs,μ∈CSS,λμ且λ=sub(μ),则λ∈CSS.
性质2.如果μs,μ∈CSS且μFCSS,则μFS.
性质3.如果μ,λs,μ∈FCSS,λμ且λ=sub(μ),则λ∈FCSS.
假定序列s=<AUGTGUUAAAAGGAGG>,最小支持度为2,序列AGG的support(AGG)=2,则AGG是频繁的连续子序列,序列AGG的连续子序列AG同样也是频繁的连续子序列,如性质3所述可得,而AAGG的支持度为1,不属于频繁的连续子序列仅是序列s的连续子序列,根据性质2可知AAGG必定不属于频繁序列。
我们知道为提高频繁项集逐层产生的效率,一种称作Apriori性质(频繁项集的所有非空子集也必须是频繁的)的重要性质用于压缩搜索空间。根据Apriori定义,如果项集I不满足最小支持度阀值min_s,则I不是频繁的,即P(I)<min_s.如果项A添加到项集I,则结果集(即IA)不可能比I更频繁出现。因此,结果集也不是频繁的,即P(IA)<min_s。
如果一个序列s=<AUGTGUUAAAAGGAGG>,在已生成的连续K子序列上分别统计其支持度,如果所有的连续K子序列都是非频繁的,则所有连续N子序列必定是非频繁的(N>K)。同样,如果频繁连续K子序列的序列个数P小于2,即P<2,由性质3可知,所有的连续K*子序列(K*>K)必定是非频繁的序列。根据这些规则,处理算法的步骤中可以不断的缩小问题的空间,达到简化问题的目的,从而提高算法的效率。
本文提出的IndFCSS算法不同于序列模式挖掘相关的频繁项集、闭频繁项集、极大频繁项集、最大频繁连续序列等一系列算法,而是基于有限的连续子序列集合产生频繁的连续子序列集。对于非连续的子序列进行剪枝,压缩搜索空间,减小搜索的计算量,生成的频繁连续子序列集不依赖候低项的候选连续子序列集。
此部分对算法从总体原理、算法流程步骤进行逐一的分析呈现。先从原理上进行相应的剖析,构建运用索引化技术的方案,然后伪代码给读者一个详细的步骤。
IndFCSS算法不生成候选的频繁连续子序列,而是运用索引技术产生索引集,根据连续子序列的各项必须相邻的索引特点,不断的剪枝不相邻的索引项,通过索引化把搜索连续K子序列集转化成查找连续的序列索引过程,项集索引的连续性通过是否递增可以简单的进行判断,从而搜索连续K子序列的问题得到最终的简化。
在本算法索引化方案中运用到一种项结构体,给出相应的基本定义如下:
struct Item{
string item;
int number;
vector<int>cIndex;
};
首先完全扫描数据序列集一次,把相应的每一项集存入结构体集合之中,构建数据库的整体索引结构集,相应的后续操作仅仅在索引结构集当中进行,索引化技术减少产生候选的频繁连续子序列的复杂操作。
IndFCSS算法依据从低到高的连续子序列长度对序列的索引集进行相应的搜索,采用递归过程逐一搜索频繁连续K子序列,基于索引化技术的挖掘频繁连续子序列集算法IndFCSS流程如下:
输入序列集s,最小支持度阀值min_s
输出频繁的连续子序列集
过程:
Step1 完全扫描数据序列,查找满足最小支持度的频繁1-项集OneItemMine(),同时对频繁1-项集Ind-ITEM使用容器CO存储。
Step2 IfCO.size()>0
执行Step3.
Else
结束
Step3 递归搜索频繁连续K子序列RecurseDeepmine
此算法大致上分三个步骤进行,第一阶段运用算法OneItemMine剪枝非频繁的1-项集,并产生容器CO用于后续的搜索频繁连续K子序列。
步骤3中的搜索频繁连续K子序列成为本算法IndFCSS的主体部分,也是最核心部分,在其中有大量的对问题空间的剪枝策略的运用,索引化技术方案的实施,具体伪代码如下:
输入 IndFCSS算法Step1产生容器CO,频繁连续K子序列的计数K,记作item_N
输出频繁的连续子序列集
过程:
Step1 对CO的键集keys进行排序至集合Indices,记DEX
Step2 设previous=0,表示符合最小支持度且位置相近但不连续的个数计数;
Step3 For(each i in length(DEX)-item_N+1) do
isContiguous=true,表item_N长度的子序列是否连续的标志
int temp=DEX[i]
For(each J=i+1 in Item_N+1) do
If temp与当前DEX[J]连续
Temp=DEX[J]
Else
isContiguous置为false,表明非连续
If previous>=Item_N
位于i 至i+item_N-1的将从CO中移除,非连续子序列
previous++;
break;
If isContiguous=true
previous=0;
取连续子序列subStr=sustring(DEX[i],DEX[i]+item_N);
If HT 包含 subStr
subStr对应num++;
Else
把subStr及计数1存入HT中
If HT为空
Return;
设该item_N子序列都不满足最小支持度标志FLAG=true;
For(each str in HT.keys) do
Ifsupport(str)>min_s
FLAG=false;
Else
RemovePart();从CO中移除部分索引
If FLAG=true or Count(sup)<2 说明都不满足最小支持度或满足最小支持度数目较小,由剪枝规则相应处理
Return;
Item_N++;
执行Step3
可以看出IndFCSS算法结合了剪枝策略在递归的过程中进行了剪枝,并在多处设定递归的终止条件,随着数据规模的增大,算法的效率得到明显的提升。
从上面的分析与原理解析,在不同的系统环境下,通过运用大量的数据于本实验算法中,测试产生频繁连续子序列集的性能。本实验的所有的测试运行在Windows平台上,该算法使用c++语言基于上述思想与技术路线实现,数据集上使用了各种不同的数据来源,其中包括UCI KDD Archive数据、科研数据共享平台,DNA序列等等。
IndFCSS算法在同样的最小支持度min_s下随着序列的增长,运行时间慢慢增长,这与序列的频繁连续子序列数目有着密切的关系,当序列的密集性程度较高时,算法的性能将会变差,但总体上不超过O(n2)。在同样的序列s保持不变的情况下,挖掘序列s的频繁连续子序列的时间随着min_s的变大而减少,其中图1显示出在min_s为2和4时,总运行时间的比较图。
从图1,可以知道在600项集序列长度上挖掘最小支持度为2的频繁连续子序列所用时间为40微秒,在可以接受的范围之内。序列的最小支持度为4时算法的消耗时间明显小于最小支持度为2时所用时间,min_s越大,消耗时间更加显著减少。文献[++]列出的算法是在生物数据序列上通过构建固定长度生成树挖掘频繁的最大连续子序列,是本文中算法生成的结果集子集。本文算法的运行时间随最小支持度的变化情况如图2所示。
从大量的UCI和DNA的测试数据序列中挖掘频繁的连续子序列,验证了本算法的高效性,对于DNA的片段检测、Web商务决策有着重要的应用价值。论文就目前的数据挖掘频繁序列模式方面作出频繁连续子序列的探讨,运用剪枝策略压缩了问题的搜索空间,对今后继续研究作了奠定意义。
实验证明,我们的算法得到的结果在一定的时间范围内,如何进行对此算法更加合理完善的优化,是我们正在考虑的一个问题。
[1] MOHAMMED J. ZAKI. “SPADE: An Efficient Algorithm forMining Frequent Sequences” 2001 Kluwer Academic Publishers. Manufactured in The Netherlands .MachineLearning, 42, 31�C60, 2001.
[2] Jian Pei, JiaweiHan, Behzad Mortazavi-As1, Helen Pinto. “Prefixspan,:Mining Sequential Patterns Efficiently by Prefix-Projected Pattern Growth”.InProc.2001 Int.Conf. Data Engineering(ICDE’01) , pages 215-224 , Heidelberg , Germany , April 2001.
[3] Xifeng Yan,Jiawei Han, Ramin Afshar.”CloSpan: Mining Closed Sequential Patterns in LargeDatasets”.2003.
[4] Jin Pan, PengWang Wei Wang Baile Shi and Genxing Yang "Efficient Algotithms for MiningMaximal Frequent Concatenate Sequences in Biological Datasets" Proc. Ofthe Fifth International Conference on Computer and Information Technology(CIT),pp.98-104, 2005.
[5] Tae Ho Kang, JaeSoo Yoo, Hak Yong Kim. "Mining Frequent Contiguous Sequence Patterns in BiologicalSequences" 1-4244-1509-8/07/25.00 02007IEEE
[6] Chen Jianguo, LiuLi, Chen Cheng, Zhang Cheng. A Mining Method of Frequent Tree Sequences. 2011Fourth International Conference on Intelligent Computation Technology andAutomation.DOI 10.1109/ICICTA.2011.543 IEEE.
[7] A.Inokuchi andTakashi Washio. “A Fast Method to Mine Frequent Subsequences from GraphSequence Data”.IEEE Int'l Conf. on Data Mining.2008.
[8] Wing-Kai Hon ,Manish Patil , Rahul Shah , Shih-Bin Wu. “Efficient index for retrieving top-kmost frequent documents”. Journal of Discrete Algorithms 8(2010) 402-417.
本文出自 “算法之道” 博客,转载请与作者联系!