数据挖掘的Apriori算法

该算法是经典的频繁项集的挖掘算法,主要用的是一个先验性质,任何频繁项集的自己都是频繁的。反过来说,一个项集的有一个子集不是频繁的,那这个项集也不是频繁的。

算法的输入:(1)事务数据库D 

ID            购买的产品的编号

T100     1,2,3,4

T200     2,3,4,5

T300     1,2,7,5,4

T400   1,2,3,4,5,6,7,8

(2)最小支持度的阈值 min_support

算法的输出:频繁项集L

过程:主要的伪代码,后期会有具体的实现。

L1=find_1_frequent_Itemset(D);//根据数据库找到频繁的1项集。

for(k=2;Lk-1!=null;k++){

  Ck=apriori_gen(Lk-1) ;//通过k-1项集构建k频繁项集,主要包括连接和剪枝的过程 Ck是候选项集

  foreach 事务数据库的每一条记录t{

    Ct=subset(Ck,t);//当前的Ck中的候选集是否是t的子集。

    foreach 候选项c(-Ct{ 

           c.count++;

           } 

   }

Lk={c|c.count>min_support};  //返回满足最小支持度的候选项集

}

return UkLk;  //将所有的频繁项集合并在一起返回。直到不产生频繁的项集


//自连接的过程

void  apriori_gen(Lk-1){

 for l1属于Lk-1

   for l2属于Lk-1

      if(l1[1]==l2[1]&&...&&l1[k-2]==l2[k-2]){

        c=l1连接l2;

       }

    if(has_infrequent_subset(c,Lk-1)){

    delete c;

    }else{

   add c to Ck;

   }

}

//剪枝的过程

void boolean  has_infrequent_subset(c,Lk-1){

for c的每一个k-1子集{

    if(k-1子集不属于Lk-1中){

    return  true;

   }else{

  return  false;

}

 }

}


你可能感兴趣的:(数据挖掘)