Apriori-Algorithmus

105 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

基本算法流程

下列参数作为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个项集的规则数量。通过这个公式我们可以十分容易的写出其所有的关联规则:

 

{西瓜,猪肉}→{西红柿}{西瓜}→{西红柿,猪肉}
{西瓜,西红柿}→{猪肉}{西红柿}→{西瓜,猪肉}
{猪肉,西红柿}→{西瓜}{猪肉}→{西红柿,西瓜}

 

规则生成算法:

  1. 输入含N≥2个元素的频繁项集

  2. 生成所有1到N-1个后件的关联规则

  3. 计算所有的关联规则的支持度和置信度

  4. 选择所有满足minsupp,而且满足minconf的关联规则形成的集合输出