由于Apriori算法需要多次扫描事务数据库,需要生成候选项集,大大增加了时间与空间的代价,FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,它不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对。为了达到这样的效果,它采用了一种简洁的数据结构,叫做frequent-pattern tree(频繁模式树)。FP-growth算法比Apriori算法快一个数量级,在空间复杂度方面也比Apriori也有数量级级别的优化。对于海量数据,FP-growth的时空复杂度仍然很高,可以采用的改进方法包括数据库划分,数据采样等等。
FPGrowth算法的介绍与实例说明可以参考下面这个连接,里面讲的很详细。
http://hi.baidu.com/nefzpohtpndhovr/item/9d5c371ba2dbdc0ed1d66dca
Apriori和FP-Tree都是寻找频繁项集的算法,后面根据频繁项集产生关联规则都是一样的,就不再这里重复了。
FPGrowth算法Java简单实现:
public class FPGrowthBuilder {
/** 最小支持度 */
private int minSupport = 2;
/** 频繁集集合*/
private List<List<ItemSet>> frequencies = new ArrayList<List<ItemSet>>();
//创建头表
public List<FPTreeNode> buildHeadTables(Data data) {
//统计各项出现频次
Map<String, Integer> map = new HashMap<String, Integer>();
for (Instance instance : data.getInstances()) {
for (String value