Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集。
算法原理我一定不如 点击打开链接 说的明白,就只贴代码好了。
购物篮应该是放在数据库中,我把它写在文件D:/item.txt中。
有一点不同:
代码中用了以下映射:
totalID(项名-->整体编码的映射)
freID(整体编码-->频繁项编码的映射)
freID2item(频繁项编码-->项名的映射)
这样做的目的是,用频繁项编码代替频繁项的项名参与计算,当项名很长时,可以节省空间开销。
另外有以下对Apriori的改进算法,可以进一步节省空间开销:
PCY算法:
利用第一遍扫描中可能有大量空闲内存这一观察结果,设置一个哈希函数,将项哈希到不同桶中。如果某个桶中的计数值不低于支持度阈值,该桶成为频繁桶。那么非频繁桶中的项不可能为频繁项,后续扫描中可以不对其计数以节省空间开销。
多阶段算法:
在PCY的基础上,多做几次哈希,每次扫描中只有一个哈希函数。后续只对这样的项计数:它们在每次哈希中都被哈希到一个频繁桶。
多哈希算法:
同PCY的一样只做一次哈希扫描,但是有有多个哈希函数,。后续只对这样的项计数:每个哈希函数都把它哈希到一个频繁桶。
多阶段多哈希可以结合,即多个阶段,每个阶段多个哈希函数。但貌似阶段数和哈希函数个数要认真斟酌,过多或过少都会导致在在减少候选项(计数项)上效果不高。