FPTree 建树及挖掘

本文为学习 https://www.cnblogs.com/pinard/p/6307064.html 的笔记

FP Tree 又叫FP Growth算法

结构

项头表和FP Tree:
项头表存储的是所有的1频繁项集,并且按照支持度递减, pointer是一个链表,串着元素相同的1频繁项集。
在这里插入图片描述

项头表与数据预排序

将所有的频繁1项集按照支持度排序,删除低于阈值的1项集,并将这些1项集放入项头表。将每条数据中的元素按照其单个支持度排序,大的元素放在前。
在这里插入图片描述

建树

根结点为null,然后一条条插入数据, 每个节点对应的数字为这条路径上该1项集出现的次数(有点像字典树)。
(1)插入ACEBF
在这里插入图片描述
(2)插入ACG, 因为我们之前对每条数据进行预排序了,所以利用公共的节点。
在已有的路径上进行插入,出现不能完全重合的路径就产生分支。
插入第三条数据E的时候即为null的右子树。
在这里插入图片描述
(3)插入ACEC
注意, 每次插入一条数据后,对应的叶节点要连在项头表链表中对应元素的后面。
在这里插入图片描述

挖掘

FP Tree建好以后, 对其进行挖掘。对于项头表中的每一个元素,从下往上,在FP Tree中找到以该点为叶子节点所有路径(比如下面以D结尾的路径有两条),将每条路径上每个点的计数设为叶子节点的计数,然后求出以该节点为终节点的所有1~n项集。
比如求D的频繁项集时,其FP Tree如下,因为D有两个叶子节点,所有分两次进行,
在这里插入图片描述
首先修改以D为叶子节点的路径上节点的计数,A和C的而都是由累加的得到的,删除该Tree中总计数频次小于阈值的节点(E和G),将其变成直线:
在这里插入图片描述
这样我们可以得到 A=2 --C=2–D=2的路径(两条路径合并后的结果),然后分别求以D结尾的频繁n项集。
假如E G没用被删,那么将形成 ACEGD和ACD两条路径,频率都为1,拆分成1~n项集再合并。

优点

改进了Apriori算法扫描过多次的瓶颈,该算法只需要扫描两次数据集,第一次建立项头表,第二次建数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值