GSP算法与SPADE算法

转载:https://blog.csdn.net/u013007900/article/details/54890950#commentBox

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><aa>,这个的意思就是先发生了一次a再发生了一次a,而不是同时发生的。每个a都是一个元素。

å¾4

这里就不存在类似于<(aa)><(aa)>这样的序列了,这里是产生只含有一个元素的序列。

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

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

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

å¾6

哈希树


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

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

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

å¾5

代码请见

SPADE算法


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

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

如果诸如成员PA,PD这样的形式出现在2频繁项集中,则能推导出PAD这样的三成员元素。
如果出现诸如PB,P->A这样的形式出现在2频繁项集中,则能推导出PB->A这样的三成员元素。
如果出现诸如P->A,P->F这样的形式出现在2频繁项集中,则能推导出P->AF或P->A->F或P->F->A这样的三成员元素。
同时还要注意,如果想要A和F得出AF,那么A发生的序列号要与F发生的序列号相同,而且A的时间序列号要小于F的时间序列号。想相反的情况也是一样的,要得出FA,则要F的时间序列号要小于A的时间序列号。

演示
现有如下的数据库

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

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

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值