最近刚上了数据挖掘这门课,老师讲了两个算法,即Apriori算法和FP-growth算法,然后布置了上机作业,挖掘一个有8万行的记录的retail.dat,需要从中找出强规则,即同时满足最小支持度和最小置信度的规则。
Apriori算法
在这里给出一个实现找出所有频繁模式集的c++代码,其中主要使用的存储结构是二维数组,有点简陋,凑合着看看。
另外,这个版本是刚写出来初始版本,自连接之后没有修剪步骤,而是直接扫描数据库,所以效率偏低。
这个版本测试时用的最小支持度是2000,这个支持度比较大,所以输出结果还是较快的。不过如果最小支持度设为1000以下的话,那么运行速度就差了很多。
改进之后增加了修剪步骤的算法运行速度在最小支持度较低时运行速度明显加快,但是还是耗时较长。
可以看到,在最小支持度在500时,改进后的算法提升了一分多钟,因此修剪对于Apriori算法来说是很重要的一步。
12.02更新
这两天本来打算补完修剪部分,就去研究一下FP-growth算法的。结果发现树的知识还不会,准备先把数据结构的树部分的OJ题刷完再写。于是这两天一直在优化Apriori算法,终于在参考了韩家伟教授的《数据挖掘:概念与技术》一书后,明白了可以用散列函数来处理2项集,效率一下子就提上来了。在这里给出书中的描述。