数据挖掘中的模式发现(七)GSP算法、SPADE算法、PrefixSpan算法

本文介绍了数据挖掘中的GSP、SPADE和PrefixSpan算法。GSP通过哈希树和时间约束减少扫描候选序列,SPADE利用垂直列表数据库和推导公式提高效率,PrefixSpan采用分治策略挖掘序列模式。每种算法都有详细的演示过程,展示了如何产生候选集和投影数据库。
摘要由CSDN通过智能技术生成

这前两个算法真是出人意料地好理解

GSP算法

GSP算法是AprioriAll算法的扩展算法,其算法的执行过程和AprioriAll类似。

其核心思想是:在每一次扫描(pass)数据库时,利用上一次扫描时产生的大序列生成候选序列,并在扫描的同时计算它们的支持度(support),满足支持度的候选序列作为下次扫描的大序列。第1次扫描时,长度为1的频繁序列模式作为初始的大1—序列。

接下来会演示一下GSP如何产生候选集的。

GSP算法最大的特点就在于,GSP引入了时间约束、滑动时间窗和分类层次技术,增加了扫描的约束条件,有效地减少了需要扫描的候选序列的数量,同时还克服了基本序列模型的局限性,更切合实际,减少多余的无用模式的产生。

另外GSP利用哈希树来存储候选序列,减小了需要扫描的序列数量,同时对数据序列的表示方法进行转换,这样就可以有效地发现一个侯选项是否是数据序列的子序列。

但是这些方法都不算是GSP的核心思想,只是一些剪枝的优化而已,与其他很多算法的方式极其类似,无论是ACM-ICPC还是其他机器学习、深度学习的算法都有类似的优化,所以不再赘述。

演示

我们现在有如下的数据库,并设置最小支持度min_support = 2

图1

我们先进行第一次扫描。

得到如下的序列

图2

这全部的就是候选集,然后没有打叉的就是序列模式。这里的思想和之前讲过的Apriori算法完全一样。

现在我们来产生长度为2的候选集,只是候选集而已。

图3

我们来稍微解释一下,如 <aa> <script type="math/tex" id="MathJax-Element-1"> </script>,这个的意思就是先发生了一次a再发生了一次a,而不是同时发生的。每个a都是一个元素。

图4

这里就不存在类似于 <(aa)> <script type="math/tex" id="MathJax-Element-2"><(aa)></script>这样的序列了,这里是产生只含有一个元素的序列。

我们这里总共产生了候选集 6×6+6×5÷2=51 个。

如果没有使用剪枝,而是直接使用类似于广度优先搜索(bfs)的算法生成,则会有 8×8+8×7÷2=92 个。

然后再进行筛选,直到不能进行了为止。

图6

哈希树

使用数据结构对序列进行存储能够方便管理,节约空间。就有一些类似蛤夫曼树压缩编码那样。

GSP采用哈希树存储候选序列模式。哈希树的节点分为三类:

  • 根节点;
  • 内部节点;
  • 叶子节点。

根节点和内部节点中存放的是一个哈希表,每个哈希表项指向其它的节点。而叶子节点内存放的是一组候选序列模式。

图5

代码请见

SPADE算法

SPADE算法依旧使用传统的先验性质,即连接步+剪枝步的经典组合,思想跟GSP大致相同,但是引入了垂直列表数据库。

SPADE算法寻找1-序列和2-序列频繁项集方法跟GSP完全形同,在之后的3-候选集及之后的频繁项计算中,采取了一种“作弊”的办法获得候选集,该办法套用了三种屡试不爽的公式,如下:

  1. 如果诸如成员PA,PD这样的形式出现在2频繁项集中,则能推导出PBD这样的三成员元素。
  2. 如果出现诸如PB,P->A这样的形式出现在2频繁项集中,则能推导出PB->A这样的三成员元素。
  3. 如果出现诸如P->A,P->F这样的形式出现在2频繁项集中,则能推导出P->AF或P->A->F或P->F->A这样的三成员元素。

同时还要注意,如果想要A和F得出AF,那么A发生的序列号要与F发生的序列号相同,而且A的时间序列号要小于F的时间序列号。想相反的情况也是一样的,要得出FA,则要F的时间序列号要小于A的时间序列号。

演示

现有如下的数据库

图7

其中时间序列号(或称为元素序列号)表示在一个序列中排序的位置,因为越大的排序在越后面。

在本例中AB,AF是两个频繁的2成员项,那么有可能存在且仅存在ABF这样的3成员频繁项,经过10次计算遍历了一遍data发现ABF确实是频繁的。

图8

然后这样也是一点一点做直到没有办法。

PrefixSpan

算法思想:采用分治的思想,不断产生序列数据库的多个更小的投影数据库,然后在各个投影数据库上进行序列模式挖掘。

相关定义

前缀:设每个元素中的所有项目按照字典序排列。给定序列 α=<e1e2en> β=<e1e2em>(mn) ,如果 ei=ei(im1)e

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值