Apriori算法是挖掘关联规则的算法,是Agrawal等在1993年[1]设计的一个基本算法,其核心方法是基于频集理论的递推方法。这是一个采用两阶段频集的挖掘思想,并且基于多次扫描事务数据库来执行。正如算法名字,Apriori算法使用的是频繁项集性质的先验知识。
Apriori算法的设计可以分解成两个步骤来执行挖掘:
1、 从事务数据库中挖掘出所有频繁项集。
首先挖掘出频繁1-项集。此时,在内存中保存两个表,一个保存每个项到一个整数的映射(如果项是其他非数值的对象),一个保存每个整数即项的计数。扫描整个数据集中的项,没扫描到一个项,在相应的位置计数器加一。最后根据支持度阈值筛选出支持度大于阈值的项组成。
在挖掘频繁2-项集前,需在内存中需要构造数据结构来保存由中的项组合的项对,有两种组织形式,一种是使用三角矩阵,一种是使用三元组。不管使用哪种方式,次步的所需的内存是中项的个数决定,而非由整个数据集中项的个数决定。这便是Apriori算法的精髓所在,第一步和第二步内存的使用见图1。
具体的挖掘频繁项集过程是是遍历每个篮子,在每个篮子的操作中,从中找出包含在频繁项表中的项,组合成项对,遍历完成后找出了所有频繁项对,对每个频繁项对,在项对的数据机构相应位置计数加1,最终从中选择支持度大于阈值的项对作为。
然后,继续采用递推的方式从 来挖掘频繁项集(k>1)。迭代进行,直到某次k-项集为0时终止迭代,返回所有频繁项集。
2、 基于第一步挖掘到的频繁项集,继续挖掘出全部的频繁关键规则
Apriori算法的缺点:
(1)虽然使用Apriori算法已经使得项数有了很大降低,但由频繁k-1项集进行自连接生成候选频繁k项集数量仍然巨大;
(2)在验证候选频繁k项集的时候需要对整个数据库进行扫描,非常耗时。