所谓序列模式,我的定义是:在一组有序的数据列组成的数据集中,经常出现的那些序列组合构成的模式。跟我们所熟知的关联规则挖掘不一样,序列模式挖掘的对象以及结果都是有序的,即数据集中的每个序列的条目在时间或空间上是有序排列的,输出的结果也是有序的。
举个简单的例子来说明,关联规则一个经典的应用是计算超市购物中被共同购买的商品,它把每个顾客的一次交易视作一个transaction,计算在不同transaction中不同item组合的规律性。而如果我们考虑一个用户多次在超市购物的情况,那么这些不同时间点的交易记录就构成了一个购买序列,N个用户的购买序列就组成一个规模为N的序列数据集。考虑这些时间上的因素之后,我们就能得到一些比关联规则更有价值的规律,比如关联挖掘经常能挖掘出如啤酒和尿布的搭配规律,而序列模式挖掘则能挖掘出诸如《育儿指南》->婴儿车这样带有一定因果性质的规律。所以,序列模式挖掘比关联挖掘能得到更深刻的知识。
在实际当中,序列模式挖掘被广泛地应用于各种序列数据集中,如生物信息学上的基因微阵列数据,从中挖掘哪些基因组合模式在某类病人中会频繁出现;以单词作为item的文档序列,研究在不同文档中单词序列的出现模式;用户点击流数据,用于挖掘用户的频繁点击模式,建立用户模型,完善网站功能与UI结构。除此之外还有很多,只要是序列数据集,都可以考虑利用序列模式挖掘获得规律。
图1是一个序列数据库,及其以0.75作为最小阈值(min_sup)的频繁序列模式。借此介绍序列挖掘中的几个主要概念。
- 序列(Sequence):以SID表示,一个序列即是一个完整的信息流。
- 项目(Item):序列中最小组成单位的集合,比如在这个样例中的项目为{A, B, C}。
- 事件(Event):通常用时间戳标志,标识事件之间的前后关系。又叫Itemset,是Item的集合,样例中以EID表示。
- k频繁序列:如果频繁序列的项目个数为k,则称之为k频繁序列,以Fk表示(图1的F1,F2,F3)。
- 序列的包含关系:对于序列x和y,如果存在着一个保序的映射,使得x中的每个事件都被包含于y中的某个事件,则称为x被包含于y(x是y的子序列),例如序列B->AC是序列AB->E->ACD的子序列。
- 支持度(support):某序列x的支持度是指在整个序列集中包含x的序列的频次。
有了以上概念之后,序列模式挖掘的问题就定义为:给定一个序列数据库以及最小支持度min_sup,找出所有支持度大于min_sup的序列模式。
解决这个问题的一个著名的算法叫SPADE,以及加入各种约束限制后的cSPADE,它们来自同一个作者Zaki。SPADE是无约束的序列频繁模式挖掘算法,其基本思想是利用一个S后缀等价类(suffix equivalence class)的概念[S],从F1开始计算,由F1张出以F1中的频繁序列为[S]的F2,再以F2张出以F2中的频繁序列为[S]的F3,以此类推。由于引入了后缀等价类这个概念,使得整个算法对数据库的遍历次数与计算量大大降低,是一个现实中有效的算法。cSPACE在前者的基础上引入了对序列模式的约束,其中包括:
- 序列长度与宽度的约束(序列的长度是指序列中事件的个数,宽度是指最长事件的长度);
- 最小间隔的约束,即事件之间的最小时间间隔;
- 最大间隔的约束,即事件之间的最大时间间隔;
- 时间窗的约束,即整个序列都必须发生在某个时间窗内;
- 其它,如只限制为某些Item,序列数据库存在分类标签。
以上的约束基本已经覆盖了实际应用中所有可能碰到的限制情况,实际上约束并不常用到,通常SPADE算法已经够用了。
由于数学表述过多,而且整个过程比较繁琐,这里不打算详细叙述两个算法的计算流程,有兴趣的可以参看文后附上的参考文献。
很幸运的是,万能的R已经有序列挖掘的包,对SPADE算法与cSPADE算法有了完整的实现,即使对算法并不充分了解,也可以把它们用于自己的场景中。它就是arulesSequences,以下以一个例子简单介绍一下它的用法。
1 2 3 4 5 6 7 |
library(arulesSequences) data(zaki) s1 <- cspade(zaki, parameter = list(support = 0.4), control = list(verbose = TRUE)) summary(s1) as(s1, "data.frame") s2 <- cspade(zaki, parameter = list(support = 0.4, maxwin = 5)) as(s2, "data.frame") |
第2行导入数据库zaki,它的结构类似于图1所示的那种序列-事件集,第3行设定最小支持度为0.4,并用无约束的SPADE算法搜索频繁序列模式,第6行引入了时间窗的限制,用cSPADE算法进行搜索。整个过程十分简洁明了。
更多使用的例子可在R的终端用?cspade命令查看。
参考文献:
Sequence Mining in Categorical Domains: Incorporating Constraints, Mohammed J. Zaki, 2000 ACM
相关推荐
PrefixSpan算法是序列模式挖掘领域中的一个重要方法,它由Jin et al.在2001年提出。序列模式挖掘是数据挖掘的一个分支,旨在发现数据集中频繁出现的顺序模式,这些模式通常存在于时间序列数据、交易记录或者事件序列...
序列模式挖掘是数据挖掘的一种,专注于在时间序列数据中寻找频繁出现的模式或序列。在这种背景下,GSP(Growth-Share-Pruning)算法是一种高效且广泛应用于序列模式挖掘的方法。 GSP算法由Ganesh Ramakrishnan、...
### 序列模式挖掘综述 #### 一、引言 序列模式挖掘是数据挖掘领域的一个重要分支,其目标是从数据库中找出具有特定顺序关系的频繁模式。这项技术的应用非常广泛,包括但不限于市场购物行为分析、计算生物学中的...
针对传统GSP算法需要多次扫描数据库、I/O开销巨大的缺点,提出了一种基于MapReduce编程框架的序列模式挖掘算法MR-GSP(GSP algorithm based on MapReduce)。MR-GSP算法将原序列数据库划分为多个子序列数据库并分发...
序列模式挖掘是数据挖掘领域的一个重要分支,主要关注在时间序列数据中发现频繁出现的模式。这些模式可以是用户购买商品的顺序、网站访问的路径或者任何其他具有时间顺序的事件序列。数据生成器则是为了模拟和创建...
序列模式是给定一个由不同序列组成的集合,其中,每个序列由不同的元素按顺序有序排列,每个元素由不同项目组成,同时给定一个用户指定的最小支持度阈值,序列模式挖掘就是找出所有的频繁子序列,即该子序列在序列...
《序列模式挖掘及其应用研究》这篇毕业论文深入探讨了数据挖掘中的一个重要分支——序列模式挖掘。序列模式挖掘是从时间序列数据中发现频繁出现的模式,这些模式可以揭示数据的潜在结构和规律,对于理解用户行为、...
GSP是序列模式挖掘的一种算法。其主要描述如下: l 根据长度为i 的种子集Li 通过连接操作和剪切操作生成长度为i+1的候选序列模式Ci+1;然后扫描序列数据库,计算每个候选序列模式的支持数,产生长度为i+1的序列模式...
序列模式挖掘是数据挖掘领域中的一个重要分支,它旨在发现数据集中项集的出现顺序或时间序列上的模式。SPAM(Sequential Pattern Mining Algorithm)是由Agrawal等人在1995年提出的一种早期序列模式挖掘算法,其核心...
序列模式挖掘是数据挖掘领域的一个重要分支,主要关注在时间序列数据中发现有趣的频繁出现的模式。这些模式可以是商品购买顺序、用户点击流、疾病发展过程等,为商业决策、用户行为分析、医学研究等领域提供有价值的...
序列模式挖掘算法概述与应用。 序列模式挖掘是指从序列数据库中发现频繁出现的模式或规律,以便预测用户行为、分析交易模式、疾病诊断等。序列模式挖掘算法可以应用于各个领域,例如客户购买行为模式预测、Web 访问...
序列模式挖掘是数据挖掘领域的一个重要分支,主要关注在时间序列数据中发现频繁出现的模式。这些模式可以是用户购买商品的顺序、网络浏览行为序列或者是生物医学信号等。序列模式挖掘的应用广泛,例如推荐系统、市场...
在数据挖掘领域,序列模式挖掘是一项重要的任务,它旨在发现数据集中时间序列上的频繁模式或关联规则。Python作为一门强大的编程语言,因其易读性、丰富的库支持和强大的科学计算能力,被广泛用于数据挖掘任务,包括...
序列模式挖掘是数据挖掘领域的一个重要分支,主要关注在时间序列数据中发现有意义的、频繁出现的模式。这些模式可以是商品购买顺序、用户浏览网页的路径或者生物医学信号的时序模式等。本文件“序列模式挖掘算法综述...
### Web日志序列模式挖掘 #### 一、引言 Web日志是Web服务器记录用户访问网站活动的重要数据源。每当用户访问一个网页时,Web服务器就会在其日志文件中添加一条新的记录。这些记录包含了丰富的信息,比如访问者的...
基于模式增长的高效用序列模式挖掘算法 序列模式挖掘是数据挖掘领域的一项重要研究内容,在风险管理、生物信息学、基因分析等方面具有重要的应用。频繁序列模式挖掘作为其应用的典型代表,突出了序列数据集中的高频...