PrefixSpan算法详解

本文介绍了 PrefixSpan 算法在序列模式挖掘中的作用,详细解析了序列模式的概念、事务数据库实例、前缀和后缀的概念,以及算法的具体步骤,并通过示例展示了如何运用 PrefixSpan 发现频繁序列模式。

一、序列模式挖掘简介

序列模式的概念最早是由Agrawal和Srikant 提出的。

动机:大型连锁超市的交易数据有一系列的用户事务数据库,每一条记录包括用户的ID,事务发生的时间和事务涉及的项目。

如果能在其中挖掘涉及事务间关联关系的模式,即用户几次购买行为间的联系,可以采取更有针对性的营销措施。

二、事务数据库实例

例:一个事务数据库,一个事务代表一笔交易,一个单项代表交易的商品,单项属性中的数字记录的是商品ID

一般为了方便处理,需要把数据库转化为序列数据库。方法是把用户ID相同的记录合并,

有时每个事务的发生时间可以忽略,仅保持事务间的偏序关系。


三、prefixspan

前缀

假设所有的项在一个元素中按照字母表的顺序排列出来。给定一个序列α=<e1e2…en>

(在这里每一个e都和在S中给定的连续的元素相一致)和一个序列β=<e1’e2’…em’>(m≤n).只有如果:

1、ei’=ei(i≤m-1),2、em’∈em  ,3、所有在(em—em’)的连续项在em’中都是按照字母表顺序排列的,

那么我们就说β是α的一个前缀。

例如:<a>,<aa>,<a(ab)>和<a(abc)>都是序列s=<a(abc)(ac)d(cf)>的前缀,但是如果每个项都在S中的序列s是连续的,

那么<ab>和<a(bc)>都认为是<a(abc)>的一个前缀。

后缀

序列α关于子序列β = <e1e2… em-1em’>的投影为α’ = <e1e2… en> (n >= m),则序列α关于子序列β的后缀为<em”em+1… en>, 

其中em” = (em - em’)。

例如:对于序列s=<a(abc)(ac)d(cf)>,<(abc)(ac)d(cf)>就被认识为是关于前缀<a>的后缀,

<(-bc)(ac)d(cf)>就被认为是关于前缀<aa>的后缀,<(-c)(ac)d(cf)>就被被认为是关于前缀<a(ab)>的后缀。

投影

投影即投影数据库,是序列数据库S中所有相对于α前缀的后缀序列的集合。

算法步骤:


1)对投影数据库S|α进行一次扫描,找到一组连续的项b,其中b可以集合成为α的最后一个元素或者<b>可以被追加到α上,形成一个序列模式。
2)对于每一个连续的项b,把他添加到α上形成一个序列α’,并且输出α’。
3)对于每一个α’,创建一个α’-投影数据库S|α’,并调用PrefixSpan(α’,l+1,S|α’).

例子:


1、使用之前的序列数据库进行简单的说明(给定的最小支持度是2):

扫描序列数据库S,产生长度为1的序列模式有:<a> : 4, <b>:4, <c> : 4, <d> : 3, <e> : 3, <f> : 3
序列模式的全集必然可以分为分别以<a>,<b>,<c>,<d>,<e>和<f>为前缀的序列模式的集合,

构造不同前缀所对应的投影数据库,结果如下页图所示:

2、分别以<a>和<f>为前缀的序列进行分析说明

<f>:

pre <f>Sequence
1<(ab)(df)(cb)>
2<cbc>
<fb>:

pre <fb>Sequence
1<(df)cb>
2<c>

<fc>:

pre <fc>
Sequence
1
<b>
2
<bc>

可以得出前缀是f的序列模式为 <f> <fb> <fc> <fbc> <fcb> 

<a>:

pre <a>Sequence
1<(abc)(ac)d(cf)>
2<(_d)c(bc)(ae)>
3<(_b)(df)cb>
4<(_f)cbc>

对于a的映射数据库进行查找局部频繁项(长度为一),可以得出<a> : 2,  <b> : 4, <c> : 4,<d> : 2, <f> : 2, < _b> : 2

(要注意,第一项中的ab和_b是表示同样的元素)

(对于组合项的后缀提取,可以分为2个情况,1个是从_X中寻找,一个从后面找出连续的项集)

<ab>:

pre <ab>
Sequence
1<(_c)(ac)d(cf)>
2<(_c)(ae)>
3<c>
对于<ab>的映射数据库进行查找局部频繁项,可以得出<(_c)> : 2,  <a> : 2, <c> : 2
<a(bc)>:
pre <a(bc)>
Sequence
1<(ac)d(cf)>
2<(ae)>
<abc>:
pre <(ab)d>
Sequence
1<d(cf)>
<aba>:
pre <aba>
Sequence
1<(_c)d(cf)>
2<(_e)>
<(ab)>:
pre <(ab)>
Sequence
1<(_c)(ac)d(cf)>
2<(df)cb>
对于<(ab)>的映射数据库进行查找局部频繁项,可以得出<a> : 2,  <d> : 2, <c> : 2
<(ab)d>:
pre <(ab)d>
Sequence
1<(cf)>
2<(_f)cb>
到此以<a>和<f>为前缀的序列模式全部找出

以下是支持度为2的所有结果





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值