python关联分析足球运动员_关联分析的FP-growth算法 in Python

基于Apriori算法构建的FP-growth算法,利用了巧妙的数据结构,只需要对数据集进行两次扫描,可以更高效的发现频繁项集,通常性能要比前者好两个数量级以上,但注意其不能用于发现关联规则。

1、构建FP-growth树

下面我们随机设定一个数据集,然后逐步构建FP-growth树。

创建一个常用的购物数据集,每行为一条交易记录,每个字母代表一种商品,共有商品7中,分别为a-g。

交易号码商品

#0001 a b c d

#0002 b e d f

#0003 b c d

#0004 a b c e d f

#0005 a c f

#0006 b c f

#0007 a c d

#0008 a b c g d

#0009 a b g d

第一步:首次扫描数据集,对每项交易记录中的商品按频数进行递减排序,并删除频数小于最小支持度minSupport的商品。

设定minSupport为3,扫描得商品频数:d-7,b-7,c-7,a-6,f-4,其他商品频数均小于minSupport被删除。

{d,b,c,a,f}即为频繁1项集,记作F1。

第二步:进行第二次也是最后一次扫描数据集,对于每一条交易记录,按照F1中的顺序重新排序。

交易号码商品

#0001 d b c a

#0002 d b f

#0003 d b c

#0004 b d c a f

#0005 c a f

#0006 b c f

#0007 d c a

#0008 d b c a

#0009 d b a

第三步,将F1中各条记录插入到FP-growth树中。

规则很简单,相同前缀的路径可以共用,并且初始节点的后缀模式为空。

首先,将F1中的第一条记录插{d b c a}入,得到

再插入第二条记录{d b f},得到

再插入第三条记录{d b c},得到

找到规律后,将剩余记录依次插入,可得树

最后再增加一个header table,把FP-tree中相同item连接起来,按降序排序,得到完整的FP-growth树:

2、从FP-growth树发掘频繁项集

这里将利用生成的FP-growth树来实现频繁项集发掘过程,不再需要原始数据集了,总共分为三个基本步骤,我们逐步进行。

第一步,从header table的最下面的item开始,构造每个item的条件模式基。

顺着header table中item的链表,找出所有包含该item的前缀路径,这些前缀路径就是该item的条件模式基CFB。

所有这些CPB的频繁度(计数)为该路径上item的频繁度。

因此,上述FP-growth得到

itemCFB

fdbca:1, db:1, ca:1, bc:1

adb:1, dbc:3, dc:1, c:1

cdb:4, d:1, {}:1, b:1

bd:6, {}:1

d{}:7

第二步,构造条件FP-tree

累加每个CPB上的item的频繁度(计数),过滤低于阈值的item,构建FP-tree

第三步,执行FG-growth算法

递归的挖掘每个条件FP-tree,累加后缀频繁项集,直到找到FP-tree为空或者FP-tree只有一条路径(只有一条路径情况下,所有路径上item的组合都是频繁项集)。

3、进一步说明

3.1FP-Tree中header table按item降序排序原因:不排序会造成不能共用前缀,或者更多的共用前缀,因为频繁的item会在树的上层,可以被更多的共享;升序排序会造成那些频繁出现的item出现在树的分支中,不能更多的共用前缀。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值