Apriori算法是数据挖掘中用于关联规则学习的经典算法,由Rakesh Agrawal等人于1994年提出。它主要用于从事务数据库中找出频繁项集,并基于这些频繁项集生成关联规则。以下是Apriori算法的基本原理和工作流程:
基本原理:
- 频繁项集:项集在事务数据库中出现的次数超过某个最小支持度阈值,称为频繁项集。
- 关联规则:如果一个项集A出现在事务中,那么另一个项集B也有很大可能同时出现,这种关系可以用置信度和提升度来衡量。
- Apriori原理:如果一个项集不是频繁的,那么它的任何超集(包含它的更大项集)也不可能是频繁的。
工作流程:
设置最小支持度阈值:确定一个最小支持度阈值,用来过滤掉不常见的项集。
找出所有频繁一项集:扫描数据库一次,找出所有项的支持度,保留满足最小支持度的项。
生成候选集:使用频繁一项集生成候选二项集。
找出频繁项集:扫描数据库,计算候选二项集的支持度,保留满足最小支持度的项集。
迭代过程:重复步骤3和4,使用当前的频繁项集生成更大项集的候选集,然后找出这些候选集中的频繁项集,直到无法生成新的候选集或达到最大项集长度。
生成关联规则:对于每个频繁项集,生成关联规则,并使用最小置信度阈值过滤掉弱规则。
算法步骤:
- 初始化:创建一个空的频繁项集列表L0。
- 迭代:对于当前的频繁项集列表Lk:
- 使用Lk生成候选集Ck+1。
- 扫描数据库,计算Ck+1中每个候选项集的支持度。
- 将满足最小支持度的候选项集添加到Lk+1。
- 结束条件:当无法生成新的候选项集或达到最大项集长度时,停止迭代。
缺点:
- 多次扫描数据库:每次生成新的候选集后都需要扫描整个数据库来计算支持度。
- 生成大量候选集:尤其是在项集数量较多时,可能会生成大量的候选集,增加了计算负担。
应用示例:
假设有一个超市的事务数据库,记录了顾客的购买行为。使用Apriori算法可以发现以下频繁项集和关联规则:
- 频繁项集:{牛奶, 面包}
- 关联规则:如果顾客购买了牛奶,那么他们很可能也会购买面包。
Apriori算法虽然在某些情况下效率较低,但它的直观性和易于理解的特点使其成为学习和教学关联规则挖掘的常用算法。此外,它的变种和优化版本,如AprioriTid和AprioriHybrid,也在实际应用中得到了广泛使用。