当前位置:文档之家› Apriori算法,matlab

Apriori算法,matlab


function [Sup,L,R,SupR,Conf]=Apriori(D,min_sup,min_conf)%最终结果输出频繁集L,L的支持度系数,强关联规则R,R的支持度,R的置信度
[m,n]=size(D);
L=[];
C=[];
Lk=[];
Ck=[];
Sup=[];%频繁集L的支持度系数矩阵

for k=1:n,
if (k==1)
Ck=eye(n);
else
p=size(Lk,1);%1,获取矩阵的行数
Ck=[];
for i=1:p-1%find()位置的判定:在矩阵中,第一列开始,自上而下,依次为1,2,3...,然后再从第二列,第三列依次往后数)
for j=i+1:p
indi=find(Lk(i,:)==1);
indj=find(Lk(j,:)==1);
if all(indi(1:end-1)==indj(1:end-1)) & (indi(end)~=indj(end))
Ck=[Ck;Lk(i,:) | Lk(j,:)];
end;
end;
end
end;

q=size(Ck,1);%获取矩阵的行数,即C1的项集
Supk=zeros([q,1]);%产生q×1的零矩阵
for i=1:q%CK的行数
for j=1:m%D的行数
if all(D(j,:)-Ck(i,:)>=0)%D的行-CK的行,若大于0则说明包含
Supk(i)=Supk(i)+1;%supk的第i行加1
end;
end;
end;

ind=find(Supk>=min_sup*m);
Sup=[Sup;Supk(ind,:)];%把支持度系数放到Sup矩阵中,第二个算法要用到
Lk=Ck(ind,:);
L=[L;Lk];
end;

%L
%Sup

[R,SupR,Conf]=find_rule(D,L,Sup,min_conf);

%[sup,conf]=compute_sc(R,D);


%finish the following two functions.

function [R,SupR,Conf]=find_rule(D,L,Sup,min_conf)
R=[];
Conf=[];
SupR=[];
[m,n]=size(L);
[g,h]=size(D);
for i=1:m%i是L的第i行,比如i=13,[1,1,0,0,1]
rowLi=sum(L(i,:)>0);%rowLi是L第i行含1的个数 rowLi=3
if(rowLi>1)
ind=find(L(i,:)==1);%ind是L第i行含1的下标矩阵 ind=[1,2,5]
for j=1:rowLi-1 %j=1,j=2
nchoosei=nchoosek(ind,j);%[1,2,5][12,15,25]
[a,b]=size(nchoosei);%a=3,b=1/a=3,b=2
for x=1:a
line_temp=zeros(1,n);%一个1×5的零矩阵,
lineL=L(i,:);%L的第i行
for y=1:b
lineL(1,nchoosei(x,y))=-1;%每次循环将L的第i个集项的一个非空子集当成条件改成-1
line_temp(1,nchoosei(x,y))=1;%把零矩阵中条件项所在的位置改成1,用于接下来算该规则的置信度
end
for z=1:m
if all(line_temp-L(z,:)==0)%找在条件在频繁集中的所在的行数
confi=Sup(i,1)/Sup(z,1);%因为Sup矩阵和L各项的位置一一对应,用找到的行数从频繁集的支持度系数矩阵中找到条件集项的支持度
if(confi>=min_conf)%判断算出的置信度是否满足最小置信度
R=[R;lineL];%若是,将lineL加入R中
Conf=[Conf;confi];%将置信度加入Conf中

SupR=[SupR;Sup(i,1)/g];%将支持度加入SupR中

end
end
end
end
end
end
end

% hints: use the internal function 'nchoosek'

function [sup,conf]=compute_sc(R,D)
% compute the support and confidence of each rule in R
sup=0;
conf=0;

相关主题
文本预览
相关文档 最新文档