实现Apriori算法(数据挖掘经典关联算法)


一、算法描述

摘自http://baike.baidu.com/view/2230129.htm

首先找出所有的频集,这些项集出现的频繁性至少和预定义的最小支持度一样。然后由频集产生强关联规则,这些规则必须满足最小支持度和最小可信度。然后使用第1步找到的频集产生期望的规则,产生只包含集合的项的所有规则,其中每一条规则的右部只有一项,这里采用的是中规则的定义。一旦这些规则被生成,那么只有那些大于用户给定的最小可信度的规则才被留下来。为了生成所有频集,使用了递推的方法。

      (1) L1 = find_frequent_1-itemsets(D);

      (2) for (k=2;Lk-1 ≠Φ ;k++) {

  (3) Ck = apriori_gen(Lk-1 ,min_sup);

  (4) for each transaction t ∈ D {//scan D for counts

  (5) Ct = subset(Ck,t);//get the subsets of t that are candidates

  (6) for each candidate c ∈ Ct

  (7) c.count++;

  (8) }

  (9) Lk ={c ∈ Ck|c.count≥min_sup}

  (10) }

  (11) return L= ∪ k Lk;


二、主要步骤

1) 统计出样本共有几个item

2) apriori算法主体

  • 统计出长度为1个item的所有非频集(指支持度大于指定最小支持度的itemset) 
  • 从长度为2个item开始直到最大的长度 

              生成所有可能的候选集(根据长度)

              剔除所有含有“长度减一非频集”的候选集

              检查候选集的支持度,把频集加入结果当中,把非频集加入非频集的集合当中

  • 返回结果 

3) 输出结果(所有真正的候选集)


三、关键变量描述

vector<vector<string>> sample; 记录所有的样本

vector<vector<int>> result  记录候选集的item的编号,对应的是items的下标

vector<string> items 记录所有的item


四、运行截图

样本

输出所有候选集(最小频率为3)



不知道是不是我理解错了,觉得这个算法很简单。。。Apriori算法最大的缺点就是产生的候选集太多。。。果然很多。。。。= =!


代码下载地址: https://files.cnblogs.com/sandywong/Apriori_by_sandy.rar

posted @ 2011-06-23 23:30  free_swallow  阅读(594)  评论(0编辑  收藏  举报