Apriori是一种频繁数据挖掘算法,它在2006年入选由IEEE International Conference on Data Mining所评选的数据挖掘领域的十大经典算法。该算法的主要目的是找出数据集的数据项中频繁出现的项集。
首先定义频繁项:若某项在数据集中出现次数超过阈值$min\_sup$,则该项为频繁项(其中$min\_sup$可以根据实际情况进行设定)。假设需要得到数据集$D$中的频繁项集$S$,初始时集合$S$为空,则使用Apriori算法的求解的主要步骤为:
- 1.遍历总的数据集$D$,统计所有数据项在数据集中出现的次数,删除所有出现次数少于$min\_sup$的项,余下的数据项组成长度为1的频繁项集$C_{0}$,令$S=S\cup C_{0}$;
- 2.根据之前一步所得到的频繁项集$C_{0}$,生成下一个频繁项的候选集$C_{1}$,候选集中的所有项长度$l_{1}$等于之前一步得到的频繁项长度$l_{0}$加一;
- 3.遍历总的数据集$D$,统计候选集中数据项出现的次数;
- 4.删除所有出现次数少于$min\_sup$的项,余下的数据项组成长度为$l_{1}$的频繁项$C_{0}$,令$S=S\cup C_{0}$;
- 5.重复2,3,4步,直至候选集$C_{1}$为空;
- 6.返回得到的所有频繁项的集合$S$,以及集合中各项在数据集中出现的次数集合。
在上述步骤中求下一个候选集时,Apriori算法依赖于频繁项的一个性质:任意频繁项的子集合也是频繁的。因此,可以通过如下具体步骤来求解候选集:
- 1.通过上一步结果得到频繁项集合$C_{0}$,初始化当前候选集合为$C_{1}$;
- 2.将集合$C_{0}$中的各个项进行两两求并,若得到一个长度加一的项,则将其添加到后选$C_{1}$中;
- 3.返回集合$C_{1}$。
上述算法完整Python实现可以在我的GitHub中获取到。
1.参考文档:
[1]. 数据挖掘(概念与技术) Jiawei Han 等著 范明 等译