【数据挖掘】关联分析之先验(Apriori)原理与Apriori算法

本文介绍了关联分析中的先验(Apriori)原理,该原理指出频繁项集的所有子集也是频繁的。Apriori算法利用这一原理进行支持度剪枝,有效地减少计算量。算法通过多次迭代生成频繁项集,直至无新频繁项集产生,适用于数据挖掘中的关联规则挖掘。

阅读本文之前建议先理解关联分析的基本概念与术语传送门

本文简单介绍关联分析中的先验(Apriori)原理与Apriori算法,持续更新与补充。

先验(Apriori)原理

原理简介:
如果一个项集是频繁的,则它的所有子集一定也是频繁的。相反,如果一个项集是非频繁的,则它所有的超集也是非频繁的。
此原理基于支持度的反单调性(anti-monotone):一个项集的支持度绝不会超过它的子集的支持度。
基于此原理,我们就能对项集进行 基于支持度的剪枝(support-based pruning),不用计算支持度就能删除掉某些非频繁项集。
于是便出现了基于先验原理的Apriori算法。

Apriori算法

Apriori算法是第一个关联规则挖掘算法,它开创性地使用基于支持度的剪枝技术,系统地控制候选项集指数增长。
对于文章开头表 6-1 中所示的事务,下图 6-5 给出Apriori算法频繁项集产生部分的一个示例。
在这里插入图片描述
初始时每个项都被看作 候选1-项集。对它们的支持度计数之后,候选项集 {可乐} 和 {鸡蛋} 被丢弃。
在下一次迭代中,就只需使用 频繁1-项集 来产生 候选2-项集 ,由于只有4个 频繁1-项集,因此算法产生的 候选2-项集 的数目为 C ( 4 , 2 ) = 6 C(4, 2) = 6 C(4,2)=6 个。计算它们的支持度之后,发现4个候选项集是频繁的,因此用此4个来产生候选3-项集。
通过此例子可以看出先验剪枝策略的有效性。枚举所有项集到3-项集的暴力策略过程将产生
C ( 6 , 1 ) + C ( 6 , 2 ) + C ( 6 , 3 ) = 6 + 15 + 20 = 41 C(6, 1) + C(6, 2) + C(6, 3)=6+15+20=41 C(6,1)+C(6,2)+C(6,3)=6+15+20=41 个候选项;而使用Apriori算法,只产生
C ( 6 , 1 ) + C ( 6 , 2 ) + 1 = 13 C(6, 1) + C(6, 2) + 1 = 13 C(6,1)+C(6,2)+1=13 个候选。候选项集的数目降低了68%。

.
Apriori算法伪代码:

在这里插入图片描述
其中, C k C_k Ck为 候选k-项集, F k F_k Fk为 频繁k-项集。

  • 该算法初始通过单遍扫描数据集,确定每个项的支持度。产生 频繁1-项集 的集合 F 1 F_1 F1。(步骤1,2)
  • 然后,该算法将使用上一次产生的 频繁(k-1)-项集,产生新的 候选k-项集(步骤5)。
  • 为了计算新候选项集的支持度,算法需要再次扫描一遍数据集(步骤6-10)。使用子集函数发现事务t包含了哪些候选项集。
  • 完成支持度计算后,算法将删去支持度小于支持度阈值minsup的所有候选项集,生成频繁k-项集。
    当没有新的频繁项集或候选项集产生时,算法结束。

Apriori算法的重要特点:

  1. 它是一个逐层 ( level-wise ) 算法,即从频繁1-项集到最长的频繁项集,它每次遍历项集格中的一层;
  2. 它使用产生-测试 ( generate-and-test ) 策略来发现频繁项集。在每次迭代之后,新的候选项集都由前一次迭代发现的频繁项集产生,然后对每个候选的支持度进行计数,并与最小支持度阈值进行比较。该算法的总迭代次数是 k m a x + 1 k_{max} + 1 kmax+1,其中 k m a x k_{max} kmax是频繁项集的最大长度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值