本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
基本算法流程
下列参数作为Apriori-算法的输入参数:
l 数据库D.
l 最小的支持度minsupp
l 最低置信度minconf
输出是一个关联规则集合,这些规则不仅满足minsupp,而且满足minconf。
该算法分两步使用:
l 找到频繁集
l 生成关联规则
频繁集的寻找
频繁项目集的搜索从1个元素集开始,并且以迭代形式用n个元素集继续,直到找不到具有足够支持的项集。
在这种情况下,在每次迭代中,通过Apriori-Gen生成一组候选集,并检查每个集的minsupp属性。 如果找不到新的集合,算法将停止并输出找到的集合。
l 计算所有带有支持度>=minsupp的1元素项目集L1。
l k-1→k
l 借助Apriori-Gen从集合Lk-1中计算候选集Ck。
l 计算Ck中所有集合的实际支持度。
l 选择Ck中带有支持度>=minsupp的集合形成Lk
返回的集合包含所有频繁项目集。
Apriori-Gen :
Apriori-Gen既用于频繁集的计算,也用于关联规则的生成。不是直接计算所有可能项目集的支持度,而是通过Apriori-Gen 基于已经找到的频繁项目集生成一个候选项目集以供进一步审查。
Apriori-Gen接收一组频繁的k-1项集(L_k-1)作为输入,并返回一组k项集(C_k)作为可能的候选。它基于以下原则:频繁项集的所有子集都是频繁的,但一个非频繁项集的所有超集也是非频繁的。 这样,会避免许多不必要的支持度计算。
l 通过合并两个k-1项集来生成k项集,并将它们添加到C_ k。 此步骤保证一次只能将一个元素添加到新集合中。
l 对于C_k中的每个集合X,检查其所有k-1子集是否都在L_k-1中。 如果没有,请从C_k中删除X.
生成关联规则
对于算法的这一步骤,只考虑本身已经是频繁的项集。这些项目集是在Apriori算法的步骤1中已经计算出的。比如频繁项集{西瓜,西红柿,猪肉},那么一个可能的关联规则如下:
{西瓜,猪肉}→{西红柿}
这里我们称左边的集合称为规则“前件”,右边集合称为规则“后件”。但要注意的是如果该规则成立,那么它的反向规则,即前件和后件交换位置后形成的规则,未必成立。
一个具有N个元素的频繁项集,共有M个可能的关联规则:
其中意味着后件为i个项集的规则数量。通过这个公式我们可以十分容易的写出其所有的关联规则:
| {西瓜,猪肉}→{西红柿} | {西瓜}→{西红柿,猪肉} |
|---|---|
| {西瓜,西红柿}→{猪肉} | {西红柿}→{西瓜,猪肉} |
| {猪肉,西红柿}→{西瓜} | {猪肉}→{西红柿,西瓜} |
规则生成算法:
-
输入含N≥2个元素的频繁项集
-
生成所有1到N-1个后件的关联规则
-
计算所有的关联规则的支持度和置信度
-
选择所有满足minsupp,而且满足minconf的关联规则形成的集合输出