本文主要是介绍数据挖掘的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;
}
}
}
这篇关于数据挖掘的Apriori算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!