1.该问题最初是对“购物篮”提出来的,著名例子是“尿布与啤酒”。

2.相关概念:

 关联规则的支持度:Support(A,B)=包含A和B的事务数/事务总数

 关联规则的置信度:Confidence(A,B)= 包含A和B的事务数/包含A事务数

 频繁项集:项集的频率大于等于最小支持度。

 强相关规则:同时满足最小支持度和最小置信度。

3.关联规则挖掘的步骤:

 生成频繁项集,然后生成规则

4.Apriori算法:

 思路:第一步先扫描数据库一遍,通过计算每一个1项集的支持度,得到L1(Lk为k频繁集);第二步是反复迭代的方法找到L2,L3...直到不能再找到新的频繁项集时停止迭代。在搜索Lk时,是用Lk-1自连接方法产生候选集Ck,先用一定的剪枝略裁剪候选项;再扫面数据库,计算Ck的支持度,删除非频繁项集,便得到Lk.

 定理1:频繁项集的所有非空子集都是频繁项集。

 定理2:非频繁项集的超集一定是非频繁项集。

5.实例:对于表1-1的交易记录,设定sup=3/10,利用Apriori产生频繁项集.

 表1-1

 

java 实现 关联算法 apriori 代码实现及数据下载_关联规则


(1)由I={bread,beer,cake,cream,milk,tea}的所有项目产生候选项C1,去掉小于sup的项集。得到表1-2.

 表1-2

 

java 实现 关联算法 apriori 代码实现及数据下载_关联规则_02


(2)利用L1中各项组合连接,产生候选项C2,然后扫描记录,得到支持度,然后去掉小于sup的项集,得到L2. 如表1-3所示。

 表1-3

 

java 实现 关联算法 apriori 代码实现及数据下载_Apriori_03


(3)利用L2中的各项组合连接产生候选项C3,扫描记录,获得支持度,去掉小于sup的项集,得到L3,如表1-4所示。

 表1-4

 

java 实现 关联算法 apriori 代码实现及数据下载_数据库_04


(4)重复上述步骤,C4为空,所有频繁项集被找到,算法停止。

6.Apriori算法的优点:空间复杂度小,并有两个先验性质。

 Apriori算法的缺点:需要扫描数据库的次数太多,产生的候选项集Ck很多。


7.FP-growth算法:

 其是对Apriori算法的改进,是基于FP-tree的频繁模式增长算法,其不生成候选项集。

 思想:分而治之。在两次扫描数据库后,把数据库压缩到一棵频繁模式树(FP-tree),再将频繁模式树分成一些条件FP树,每一个条件FP树和一个频繁项集相关联,最后,对所有的条件FP树进行挖掘。

 步骤:

(1)构造FP树,FP树是事务数据库的压缩表示,每个事务都映射到FP树中的一条路径。

 针对上例,利用FP-tree思想,先构造表头和FP-tree,如下图:

 

java 实现 关联算法 apriori 代码实现及数据下载_Apriori_05


(2)利用FP树产生频繁项集;

 FP增长算法以自底向上的方式搜索FP树,从表项(cream:3)出发,可以找到包含cream的路径<milk:8,bread:5,tea:3,cream:2>和<milk:8,bread:5,cream:1>,根据cream的计数,将上述路径化简为关于cream的如下信息:<milk,bread,tea:2>,<milk,bread:1>,然后建立关于cream的FP-tree ,如下图:

 

java 实现 关联算法 apriori 代码实现及数据下载_数据库_06


 包含项目cream的所有频繁项集

 

java 实现 关联算法 apriori 代码实现及数据下载_频繁项集_07


根据上述方法一次建立关于tea,bread,milk的FP-tree.得到所有的频繁项集。

 FP-growth算法的优点:

 只遍历数据库2遍,挖掘时间会比Apriori短。

 FP-growth算法的缺点:

 建立FP-tree,会占用大量的内存空间,当生成和释放海量的条件树时,将占用很多的运算时间和计算机空间。