实验过程说明
直接运行 FPMining.py
文件,数据集位于根目录 data
文件夹下。
实验结果:
在多次运行代码后,发现算法执行时间的长短顺序如下:
Apriori
算法执行时间最长,FP-growth
算法执行时间最短,ECLAT
算法执行时间位于前两者之间,且更接近后者。即:FP-growth
算法和 ECLAT
算法的时间性能相对较好,Apriori
算法稍差。而FP-growth
算法相对优于 ECLAT
算法。
算法分析
说明
-
Apriori
算法:- 基于候选项生成和剪枝
- 算法首先扫描数据集,生成频繁1项集,然后通过组合频繁k-1项集生成候选k项集,并通过扫描数据集计算候选项集的支持度,再根据最小支持度进行剪枝,得到频繁k项集。重复这个过程直到无法生成更多频繁项集为止。
- 优点:能够找到所有的频繁项集
- 缺点:在生成候选项集和计算支持度时需要多次扫描数据集,当数据集较大时,性能会受到影响。
-
FP-growth
算法:- 基于FP树
- 算法首先构建一个FP树,其中每个节点表示一个项集,节点之间通过链表连接具有相同项的节点。然后通过递归地构建条件FP树,找到频繁项集。
- 优点:只需要对数据集进行两次扫描,一次用于构建FP树,一次用于挖掘频繁项集,因此在大型数据集上具有较高的效率。
-
ECLAT
算法:- 基于垂直数据格式
- 算法将数据集重新组织为一种垂直格式,其中每个项与包含它的事务列表相关联。然后通过递归地计算交集,找到频繁项集。
- 优点:在计算交集时具有高效性,因为使用了位向量和位运算。
- 缺点:需要对项集进行多次递归操作,当数据集较大时,性能可能会受到影响。
性能差异
-
从上述算法实现原理中可以看出:
- 在小型数据集上,三种算法的性能差异可能不明显,且差异主要取决于实现的优化程度。
- 在大型数据集上,
FP-growth
算法通常具有最高的性能,因为它只需要两次扫描数据集,并且不需要生成候选项集。 Apriori
算法在大型数据集上的性能相对较差,因为需要多次扫描数据集并生成大量的候选项集。ECLAT
算法在性能上介于Apriori
和FP-growth
之间,它具有较好的交集计算性能,但可能需要多次递归操作。
-
从实验结果中可以看出:实际实验情况符合上述分析。