分类域中的序列挖掘:算法与应用
1. 引言
序列挖掘主要处理以“事件”序列表示的数据,每个事件由一组谓词描述,属于分类序列域。序列数据的例子有文本、DNA序列、网页使用数据、多人游戏、计划执行轨迹等。
序列挖掘的任务是在给定数据库的大量对象中,发现随时间共享的一组属性。例如,书店销售数据库中,对象是顾客,属性是作者或书籍,挖掘出的模式是顾客最常购买的书籍序列,像“70%购买简·奥斯汀《傲慢与偏见》的人会在一个月内购买《爱玛》”,商店可用于促销和货架摆放。网页访问数据库中,对象是网页用户,属性是网页,挖掘出的模式是该网站最常访问的页面序列,可用于网站重构或根据用户访问模式动态插入相关链接。此外,序列挖掘还应用于识别计划失败、选择分类的好特征、查找网络警报模式等领域。
在大型数据库中发现所有频繁序列极具挑战性,搜索空间极大,例如有m个属性时,长度为k的潜在频繁序列有O(mk)个。数据库中有数百万个对象时,最小化I/O问题至关重要。但当前大多数算法是迭代的,需要对数据库进行与最长频繁序列长度相同次数的全扫描,成本高昂。
这里介绍一种新算法SPADE(Sequential PAttern Discovery using Equivalence classes)用于发现所有频繁序列。其关键特性如下:
- 使用垂直id - 列表数据库格式,为每个序列关联一个包含其出现对象的列表及时间戳,所有频繁序列可通过id - 列表的简单时间连接(或交集)枚举。
- 采用格理论方法将原始搜索空间(格)分解为更小的子格,可在主内存中独立处理,通常只需进行几次(一般三次)数据库扫描,或利用一些预处理信息进行单次扫描,从而最小化I/O成本。
- 将问题分解与模式