Apriori算法

来源:互联网 发布:开发app的软件 编辑:程序博客网 时间:2024/06/06 01:40

算法描述
从一个事物数据集中发现频繁集、推导关联规则时数据挖掘算法中最受欢迎的算法之一。由于集合的组合数量激增,发现频繁集(某集合的出现频率大于等于用户给定的最小支持度的集合)时一件很重要的事情。一旦得到频繁集,得到置信度大于等于用户指定的最小置信度的关联规则就是非常简单的事情。
Apriori算法是一个开创性算法,它首次使用候选集生产的方法发现频繁集。该算法的特点是逐层搜索来完成搜索,它还使用了频繁集的反单调性,即:如果一个集合不是频繁集,那么它的任何超集都是非频繁集。按照惯例,Apriori算法假设一个事物或者集合中的项是按字典顺序排序的。一个k项集合为频繁集Fk,候选频繁集是Ck。Apriori算法首先检查数据库,寻找项数为1的的频繁集,只有每一项的出现的频率满足最小支持度的的集合才能成为频繁集;接下来该算法按照如下三部进行迭代从而获取所有的频繁集:
1.从度为k的频繁集产生度为k+1的候选频繁集;
2.检查数据库,计算每一个候选频繁集的支持度;
3.将满足最小支持度的集合添加到频繁集中。
获得k+1项候选频繁集需要经历如下两步:
1.扩增过程。取两个频繁k项集满足k-1项元素相同,仅有一项不同,将两者取并集
Pk={I1,I2,I3,I4,…,Ik-1,IK};
Qk={I1,I2,I3,I4,…,Ik-1,Ik’}
Rk+1=PkUQk={I1,I2,I3,…,Ik-1,Ik,Ik’}
2.修剪过程。对于所有得到的k+1项候选频繁集Rk+1检查其频繁度是否满足给定的要求,删除不满足要求的候选集(原因:非频繁集的任何超集都是非频繁集)

**算法伪代码****Apriori algorithm**//满足条件的一项频繁集(基数)Fk=(frequent itemsets of size 1);for(k=1;Fk!=null;k++) do begin    //根据k项集生成的k+1项候选频繁集    Ck+1=apriori-generate(Fk);    for all transactions t属于Database do begin        //包含事物t的候选集        Cl'=subset(Ck+1,t);        for all candidate c属于Cl' do            c.count++;        end        Fk+1={C属于Ck+1 | c.count>=minsupport}    endendAnswerUFk

算法分析
当频繁集较多,数据集合较大,或者支持度较小时,算法效率较低,一般说来,获得n个频繁集,需要产生2^n个候选集,下图详细的描述了k+1项候选频繁集的产生与删除不满足条件的剪纸过程。下图这里写图片描述