关联规则 Apriori算法 和FP-tree算法

 

关联规则

参考书:陈志泊 数据仓库与数据挖掘 清华大学出版社 2009.5

P89

1993年R.Agrawal等人首先提出关联规则,并设计了一个基本算法。

关联规则最早是由R.Agrawal等人针对超市购物篮分析问题提出的,其目的是发现超市交易数据库中不同商品之间的关联关系。

关联规则体现了顾客购物的行为模式,这可以为经营决策、市场预测和策划等方面提供依据。关联规则挖掘系统已经被成功应用于市场营销、银行业、零售业、保险业、电信业和公司经营管理等各个方面。关联规则还可以应用于文本挖掘、商品广告有机分析和网络故障分析等领域。

经典的关联规则挖掘算法包括Apriori算法和FP-growth算法(J.Han等人提出)。前者多次扫描数据库,每次利用候选频繁集产生频繁集;后者则利用树形结构直接得到频繁集,减少了扫描数据库的次数,从而提高了算法的效率。但是前者的扩展性好,可用于并行计算等领域。

 

Apriori算法 R.Agrawal等人

“产生候选集”

首先产生1-频繁集L1,然后连接、修剪产生2-频繁集L2,重复此过程,直到无法产生新的频繁集为止。

输入:数据库,最小支持度supmin

输出:可产生规则的所有频繁集Lk

1)  扫描数据库,产生1-候选集C1,并计算C1中各个项目的支持度。

2)  去除支持度小于supmin的项集,形成1-频繁集L1

3)  将L1中的各个项目组合连接,产生2-候选集C2,扫描C2以计算各个项集的支持度。

4)  去除支持度小于supmin的项集,形成2-频繁集L2

5)  重复3)和4)直到候选集为Ck

 

FP-growth算法 J.Han等人

“不产生候选集”

第一次扫描数据库之后,利用一颗频繁模式树(FP-tree)表示频繁集,从而产生条件模式库,再生成规则。

分为两部分:

第一部分:根据数据库建立一棵FP-tree

输入:数据库,最小支持度supmin

输出:FP-tree

1)  扫描数据库,得到频繁项的集合F和每个频繁项的支持度。

2)  将频繁项的集合F按照支持度降序排列,得到L。

3)  将数据库中的项目按照L中的顺序表示出来。

4)  创建树的根节点,标记为null。

5)  扫描数据库中的项目,若树的节点含有此项目,则count++;否则,创建该项目节点,并设count为1。

6)  重复步骤5)直到数据库扫描结束。

第二部分:根据FP-tree产生频繁集

输入:FP-tree

输出:所有的频繁集

1)  从下向上依次找到包含各个项目的频繁集。 

 

示例

假定某超市销售的商品包括bread、beer、cake、cream、milk和tea共六种,超市的每笔交易数据如下:

交易号TID

顾客购买商品Items

T1

bread cream milk tea

T2

bread cream milk

T3

cake milk

T4

milk tea

T5

bread cake milk

T6

bread tea

T7

beer milk tea

T8

bread tea

T9

bread cream milk tea

T10

bread milk tea

方法一:使用Apriori算法

扫描数据库,产生1-候选集C1,并计算C1中各个项目的支持度。

去除支持度小于supmin的项集,形成1-频繁集L1

将L1中的各个项目组合连接,产生2-候选集C2,扫描C2以计算各个项集的支持度。

去除支持度小于supmin的项集,形成2-频繁集L2

重复3)和4)直到候选集为Ck

(1-候选集)项目Item

支持度sup  supmin=2

bread

7

beer

1

cake

2

cream

3

milk

8

tea

7

 6选1 初始,什么都不去除


(1-频繁集)项目Item

支持度sup   supmin=2

bread

7

cream

3

milk

8

tea

7

 不能有beer

不能有cake

余下4个长度为1的项目集

种类=4


(2-候选集)项目Item

4选2

支持度sup  supmin=2

bread cream

3

bread milk

5

bread tea

5

cream milk

3

cream tea

2

milk tea

5

 

(2-频繁集)项目Item

cream和tea不能同时存在

余下5个长度为2的项目集

种类=4

支持度sup   supmin=2

bread cream

3

bread milk

5

bread tea

5

cream milk

3

milk tea

5

 

(3-候选集)项目Item

4选3

支持度sup   supmin=2

bread cream milk

3

bread cream tea

2

bread milk tea

3

cream milk tea

2

总结:

计算集合中元素的总个数n

分别计算C1n C2nC3n……以及各个组合的支持度

按照支持度排序C1n去除小于supmin的,即得到条件1

按照支持度排序C2n去除小于supmin的,即得到条件2

按照支持度排序C3n去除小于supmin的,即得到条件3

……

在所有组合中,根据条件1,条件2,条件3,……,去除组合,最后得到的就是需要的

 

方法二:使用FP-growth算法

扫描数据库,得到频繁项的集合F和每个频繁项的支持度。

将频繁项的集合F按照支持度降序排列,得到L。

将数据库中的项目按照L中的顺序表示出来。

创建树的根节点,标记为null。

扫描数据库中的项目,若树的节点含有此项目,则count++;否则,创建该项目节点,并设count为1。

重复步骤5)直到数据库扫描结束。

按照支持度排序项目

项目Item

支持度sup

milk

8

bread

7

tea

7

cream

3

cake

2

beer

1

按照项目名称排序原始数据库

交易号TID

顾客购买商品Items

T1

milk bread tea cream

T2

milk bread cream

T3

milk cake

T4

milk tea

T5

milk bread cake

T6

bread tea

T7

milk tea beer

T8

bread tea

T9

milk bread tea cream

T10

milk bread tea

 

总结:

两次排序,一次构造树。

从叶子沿着枝干向上找频繁集

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值