Apriori算法

来源:互联网 发布:淘宝众筹 淘宝怎么不管 编辑:程序博客网 时间:2024/05/01 17:16
Apriori算法的基本思想:
过程分为两个步骤:第一步通过迭代,检索出事务数据库中的所有频繁项集,即支持度不低于用户设定的阈值的项集;第二步利用频繁项集构造出满足用户最小信任度的规则。具体做法就是:首先找出频繁1-项集,记为L1;然后利用L1来产生候选项集C2,对C2中的项进行判定挖掘出L2,即频繁2-项集;不断如此循环下去直到无法发现更多的频繁k-项集为止。每挖掘一层Lk就需要扫描整个数据库一遍。算法利用了一个性质:Apriori 性质:任一频繁项集的所有非空子集也必须是频繁的。意思就是说,生成一个k-itemset的候选项时,如果这个候选项有子集不在(k-1)-itemset(已经确定是frequent的)中时,那么这个候选项就不用拿去和支持度判断了,直接删除。具体而言:
1) 连接步
为找出Lk(所有的频繁k项集的集合),通过将Lk-1(所有的频繁k-1项集的集合)与自身连接产生候选k项集的集合。候选集合记作Ck。设l1和l2是Lk-1中的成员。记li[j]表示li中的第j项。假设Apriori算法对事务或项集中的项按字典次序排序,即对于(k-1)项集li,li[1]<li[2]<……….<li[k-1]。将Lk-1与自身连接,如果(l1[1]=l2[1])&&( l1[2]=l2[2])&&……..&& (l1[k-2]=l2[k-2])&&(l1[k-1]<l2[k-1]),那认为l1和l2是可连接。连接l1和l2 产生的结果是{l1[1],l1[2],……,l1[k-1],l2[k-1]}。
2) 剪枝步
CK是LK的超集,也就是说,CK的成员可能是也可能不是频繁的。通过扫描所有的事务(交易),确定CK中每个候选的计数,判断是否小于最小支持度计数,如果不是,则认为该候选是频繁的。为了压缩Ck,可以利用Apriori性质:任一频繁项集的所有非空子集也必须是频繁的,反之,如果某个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从CK中删除。
算法伪代码如下:
//算法:Apriori//输入:D - 事务数据库;min_sup - 最小支持度计数阈值//输出:L - D中的频繁项集//方法:     L1=find_frequent_1-itemsets(D); // 找出所有频繁1项集     For(k=2;Lk-1!=null;k++){        Ck=apriori_gen(Lk-1); // 产生候选,并剪枝        For each 事务t in D{ // 扫描D进行候选计数            Ct =subset(Ck,t); // 得到t的子集            For each 候选c 属于 Ct                         c.count++;        }        Lk={c属于Ck | c.count>=min_sup}}Return L=所有的频繁集;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 //连接步:产生候选                   if has_infrequent_subset(c,Lk-1) then                       delete c; //剪枝步:删除非频繁候选                   else add c to Ck;                  }          Return Ck;     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;

具体R语言包中数据实现:

1、安装包arules并加载

install.packages("arules")

library(arules)

2、数据统计,查看数据中每一列的数据分布情况

install.packages("Hmisc")   //安装下载包时需要翻墙加载

library(Hmisc)

可以看到有很多缺失值:


统计缺失值:




3.缺失值处理:


用众数进行填充,也可以用其他比如:平均数,中位数等等

4.数据转换

R语言关联规则数据格式:transactions


5.建立模型(apriori算法)

Apriori算法:apriori(data,parameter =NULL,appearance = NULL,control = NULL)

函数参数介绍:

Data;输入的数据,要求是transactions类型的数据;

Paramenter:关联规则中最大项数和最小项数、最小支持度、置信度;

Appearance:指定最后对规则的筛选、其中主要指定规则的左边和右边的变量分别是哪些。Default指定那些剩下的变量是出于左边还是右边,也可以不需要这些参数;

Control:指定对于输出形式的一些设置,中值算法的性能


其中的【1】、【2】、【3】......就是规则






从上图可以看出存在很多冗余,去除冗余:


最后的出的关系图如下:





以上都是自己的实验报告!转载请标明出处!

1 0
原创粉丝点击