Apriori算法代码及实例

Apriori算法的伪代码及实例:

<span style="font-size:18px;">伪代码描述:  
 // 找出频繁 1 项集  
     L1 =find_frequent_1-itemsets(D);   
     For(k=2;Lk-1 !=null;k++){  
// 产生候选,并剪枝  
        Ck =apriori_gen(Lk-1 );   
// 扫描 D 进行候选计数  
        For each 事务t  in D{   
            Ct =subset(Ck,t); // 得到 t 的子集  
            For each 候选 c 属于 Ct  
                c.count++;  
        }  
        //返回候选项集中不小于最小支持度的项集  
        Lk ={c 属于 Ck | c.count>=min_sup}  
}  
Return L= 所有的频繁集;  
第一步:连接(join)  
Procedure apriori_gen (Lk-1 :frequent(k-1)-itemsets)  
      For each 项集 l1 属于 Lk-1  
         For each 项集 l2 属于 Lk-1  
            If( (l1 [1]=l2 [1])&&( l1 [2]=l2 [2])&& ……&& (l1 [k-2]=l2 [k-2])&&(l1 [k-1]<l2 [k-1]) )   
then{  
                    c = l1 连接 l2    // 连接步:产生候选  
                  //若k-1项集中已经存在子集c则进行剪枝  
                   if has_infrequent_subset(c, Lk-1 ) then  
                       delete c; // 剪枝步:删除非频繁候选  
                   else add c to Ck;  
                   }  
          Return Ck;  
第二步:剪枝(prune)   
 Procedure has_infrequent_sub (c:candidate k-itemset; Lk-1 :frequent(k-1)-itemsets)  
         For each (k-1)-subset s of c  
            If s 不属于 Lk-1 then  
               Return true;  
        Return false;  </span>
Apriori算法的例子:


总结:

①Apriori算法的缺点:(1)由频繁k-1项集进行自连接生成的候选频繁k项集数量巨大。(2)在验证候选频繁k项集的时候需要对整个数据库进行扫描,非常耗时。

  ②网上提到的频集算法的几种优化方法:1. 基于划分的方法。2. 基于hash的方法。3. 基于采样的方法。4. 减少交易的个数。

   我重点看了“基于划分的方法”改进算法,现在简单介绍一下实现思想:

基于划分(partition)的算法,这个算法先把数据库从逻辑上分成几个互不相交的块,每次单独考虑一个分块并 对它生成所有的频集,然后把产生的频集合并,用来生成所有可能的频集,最后计算这些项集的支持度。

其中,partition算法要注意的是分片的大小选取,要保证每个分片可以被放入到内存。当每个分片产生频集后,再合并产生产生全局的候选k-项集。若在多个处理器分片,可以通过处理器之间共享一个杂凑树来产生频集。


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员springmeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值