Apriori算法中使用Hash树进行支持度计数

Apriori算法中使用Hash树进行支持度计数

为什么使用Hash树来进行支持度计数

Hash树进行支持度计数的一个应用实例

建立一棵Hash树

对一个事务来说,其可能的子项集

使用Hash树进行支持度计数

为什么使用Hash树来进行支持度计数

在这里插入图片描述
在Apriori算法中,当查看一个候选集是否是频繁项集,需要将该候选集与DB中的每个事务进行比较,如果该候选集在这个事务中出现了,就将其支持度加1。当DB中有5个事务,而候选项集为3个的时候,其总的比较次数就是3×5=15次。
为了减少比较的次数,通过以Hash树的结构来存储候选集,每一个事务不再和每个候选集进行比较,而是和Hash树中特定的候选集进行比较。我们通过下面的一个例子来理解。

Hash树进行支持度计数的一个应用实例

假设我们已经有了候选三项集(共15个),候选集如下所示:在这里插入图片描述

建立一棵Hash树

针对这个候选集,我们需要建立一棵Hash树,根据以下规则建立
1.Hash函数,如以mod3为例,

在这里插入图片描述
2.最大叶节点数,如果一个叶子节点所包含的数据树大于最大叶节点数,该叶节点需要进一步进行分裂。这里我们的Max_leaf_size选择为3。
现在我们开始针对候选集来建立Hash树
对于项集{1,4,5}来说,对第一项 1 来说根据hash函数,应该放在左边。
在这里插入图片描述
对于项集{1,2,4}来说,其第一项为1,也放在左边。
在这里插入图片描述
对于项集{4,5,7}来说,第一项为4,放在左边,但这时因为左边有3个候选集,需要进行分裂,这时我们根据候选集的第二项进行hash
在这里插入图片描述
对于项集{1,2,5},加入其中,先对第一项1进行hash,应放在左边,在对中间项2进行hash,放在中间,和{1,2,4},{4,5,7}放在一起,此时超出了最大叶节点数,引起新的分裂,这时需要对项集中第3项来进行hash,{1,2,4},{4,5,7}应该放在左边,而{1,2,5}应放在中间。
在这里插入图片描述
依次不断加入新的项集,构成的候选集的hash树。如图所示:
在这里插入图片描述
注:如果这时加入新的项集{1,2,11},应该加入项集{1,2,5},{4,5,8}这个叶子结点,此时应该分裂,但是对项集{1,2,11},{1,2,5},{4,5,8}他们的三个元素均进行过hash,因此通常的做法是加入其中,形成线性表的形式。(类似于Hash表中处理冲突的常见做法)

对一个事务来说,其可能的子项集

这一步是求一个事务可能的子项集,以事务{1,2,3,5,6}为例,求该事务可能存在的三项集。可能的三项集数目应该是C53(5为下标,3为上标)共10个。
分3步来求其子项集,
1.先求第一个项,对该事务,项集第一个只能是1或2或3。
2.求第二项,在项为1的前提下,其第二项只能是2或3或5。
3.在前两项为1,2的前提下,第三项是3或5或6。因此得到项集{1,2,3},{1,2,5},{1,2,6}。

在这里插入图片描述

使用Hash树进行支持度计数

怎么通过Hash树来减少支持度计数呢?
前两步的基础上,对于事务{1,2,3,5,6}开始进行候选三项集的支持度计数。
对于事务{1,2,3,5,6},首项为1的项集,应该投递在左边,而首项为2的投递在中间,首项为3的投递在右边。
在这里插入图片描述
然后进行下一步投递,对于首项为1,第2项为2投递在左,第2项为3的投递在右,第二项为5的投递在中间。
在这里插入图片描述
进行最后一步的投递,对于前两项为1,2。其可能的项集为{1,2,3},{1,2,5},{1,2,6},项集{1,2,3},{1,2,6}应该投递在右,与{1,5,9}叶子节点中数据进行比较,没有相同的。项集{1,2,5}应该投递在中间,与{1,2,5},{4,5,8}结点进行比较,存在项集{1,2,5},因此{1,2,5}的支持度计数加一。
而对于项集前两项为1,3的前提下,因为只有一个叶子节点,因此不需要再对第三项进行投递,因此直接和{1,3,6}叶子节点进行比较。
画红框的是需要比较的结点。
在这里插入图片描述
从以上结果可以得到一共需要比较9次(共5个红框,9个项集),而如果不采用Hash表的结构,因为一共15个候选3项集,每一个候选集都要与该事务进行比较,因此需要进行15次比较。
支持度计数的过程和求事务的项集的子项集是很类似的。思想主要是将事务进行拆分,进行投递,然后进行比较,如果有相同的,支持度加1。

  • 53
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值