【2】若X为非频繁项目集,则X的所有超集均为非频繁项目集。
Apriori 算法的处理流程为:宽度优先搜索整个项集空间,从 k =0 开始,迭代产生长度为 k+1 的候选项集的集合 Ck+1 。候选项集是其所有子集都是频繁项集的项集。 C1 由 I 0 中所有的项构成,在第 k 层产生所有长度为 k+1 的项集。这由两步完成:第一步, Fk 自连接。将 Fk 中具有相同 (k-1)- 前缀的项集连接成长度为 k 的候选项集。第二步是剪枝,如果项集的所有长度为 k 的子集都在 Fk 中,该项集才能作为候选项集被加入 Ck+1 中。为了计算所有长度为 k 的候选项集的支持度,在数据库水平表示方式下,需要扫描数据库一遍。在每次扫描中,对数据库中的每条交易记录,为其中所包含的所有候选 k - 项集的支持度计数加 1 。所有频繁的 k - 项集被加入 Fk 中。此过程直至 Ck+1 等于空集时结束。 算法
Input:
Output:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13) Answer
Procedure Search_frequent_1-itemsets( D )
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
Procedure apriori_gen(Lk)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
Procedure Is_include_infrenquent_subset(c,Lk)
(1)begin
(2)
(3)
(4)
(5)
(6)end
在主程序中,第一步首先扫描整个交易数据库D,统计每个项目(item)的支持数,计算其支持度,将支持度大于等于最小支持度minsup的项目构成的集合放入到L1
apriori_gen过程完成两种操作:并(join)和剪枝(prune)。在并运算步骤中,Lk-1
为了清楚的阐述Apriori算法的挖掘过程,现举例如下:
【例1】设事务数据库D如表2.1所示,D中包含4个事务,即|D|=4,最小支持数mincount=2,即最小支持度minsup=2/4=50%。挖掘频繁项目集的具体过程如下所述:C1={{A},{B},{C},{D},{F}},第一次循环产生L1={{A},{B},{C},{F}},由Apriori_gen(L1)生成C2,扫描数据库,计算C2中每个候选集得到L2。依此循环,得到L3。整个挖掘过程如图2.1所示。
表1
Tid | 事务 |
100 200 300 400 | B,C,F A,C,D B,F A,B,C,F |
图1 Apriori算法的执行过程
在找到了事务数据库中的所有频繁项集后,利用这些频繁项集可以产生关联规则,产生关联规则的步骤如下:
(1)
(2)
例如,在上例中产生的频繁项目集l={B,C,F},l的非空子集有{B,C}、{B,F}、{C,F}、{B}、{C}和{F},则运用上述产生关联规则的方法可以得到以下关联规则:
参考来源: