用Apriori算法实现。
1、读取给定的交易数据库test3.txt,将整个交易数据库表示为一个矩阵,每个元组表示成一个行向量, 向量长度为4。其中,一个项目出现在这个元组中,则相应位置设为1,否则为0。如第1个交易{1,2}表示为 向量[ 1 1 0 0]。
2、根据给定的最小支持度阈值(本题为3),确定频繁1项集。
3、计算其余长度的频繁项集,直到Lk为空。
clear
clc
ffid=fopen('test3.txt','r')
i=0;
MAXn=4;
data=[];
while feof(ffid)==0
i=i+1;
tline{i,1}=fgetl(ffid);
newdata=zeros(1,MAXn);
line=str2num(tline{i,1});
newdata(line)=1;
data=[data;newdata];
end
disp('data')
disp(data)
datasum=sum(data);
datasum(datasum<3)=0;
[,col]=find(datasum==0);
data(:,col)=0;
L1=find(datasum(1,:)>0);
disp('L1');
disp(L1);
C2=[];
for j=1:size(L1,2)-1%L1列数
for j1=j+1:size(L1,2)
C2=[C2;L1(j),L1(j1)];
end
end
disp('C2');
disp(C2);
count=0;
L2=[];
for j=1:size(C2,1)%C2行数
count=0;
for i=1:size(data,1)%data行数
if data(i,C2(j,1))==1 && data(i,C2(j,2))==1
count=count+1;
end
end
if count>=3
L2=[L2;C2(j,1),C2(j,2)];
end
end
disp('L2');
disp(L2);
C3=[];
for j=1:size(L2,1)-1
for j1=j+1:size(L2,1)
index1=L2(j,1);
index2=L2(j1,1);
if index1==index2
C3=[C3;index1,L2(j,2),L2(j1,2)];
end
end
end
disp('C3');
disp(C3);
mC3=[];
for j=1:size(C3,1)
index=C3(j,1);
index1=C3(j,2);
index2=C3(j,3);
for j1=1:size(L2,1)
index3=L2(j1,1);
index4=L2(j1,2);
if(index1==index3&&index2==index4)
mC3=[mC3;index,index3,index4];
end
end
end
disp('mC3');
disp(mC3);
L3=[];
for j=1:size(mC3,1)
count=0;
for j1=1:size(data,1)
if data(j1,mC3(j,1))==1&&data(j1,mC3(j,2))==1&&data(j1,mC3(j,3))==1
count=count+1;
end
end
if(count>=3)
L3=[L3;mC3(j,1),mC3(j,2),mC3(j,3)];
end
end
disp('L3');
disp(L3);