function [Lk,L1,L2] = para_Apriori(filename1,filename2,minsup)
% %调用方式: [Lk,L1,L2] = para_Apriori('test3.txt','test5.txt',0.4)
global MAXITEM
MAXITEM =10;
data1 = getdatafromfile(filename1);
data2 = getdatafromfile(filename2);
%large 1-items
b = sum(data1,1); %按列求和
C1a = find( b > 0);
b = sum(data2,1); %按列求和
C1b = find( b > 0);
C1 = [C1a,C1b];
C1 = unique(C1)'; %!!!!加了转置运算,按列存放
% disp(C1);
count1 = Count(C1,data1);
count2 = Count(C1,data2);
totalcount = count1 + count2;
% disp(totalcount);
L1 = C1(totalcount>=(size(data1,1)+size(data2,1))*minsup,:);
% disp(L1);
Lk = {L1};
%large 2_items and more
%需要补充
[L2,idx]=apriori(data1,data2,minsup);
L2=L2(~ismember(L2,L1),:);
Lk=[Lk,L2(idx,:)];
%disp(Lk);
return
function [data] = getdatafromfile(filename)
global MAXITEM
fid = fopen(filename);%打开
data = [];
i = 0;
while ~feof(fid)%循环读取每一行
i = i+1;
tline{i,1} = fgetl(fid);%按行读取
line = str2num(tline{i,1});%转数值矩阵
temp = zeros(1,MAXITEM);%建立全零矩阵
temp(line) = 1;%一个项目出现在这个元组中,则相应位置设为1,否则为0
data = [data;temp];
end
fclose(fid);
return
function count1 = Count(Ck,data)
%需要补充
count1=zeros(1,size(Ck,1));
for i=1,size(data,1)
for j=1,size(Ck,1)
if data(i) == Ck(j)
count1(j,:) = count1(j,:) + 1;
break;
end
end
end
return
运行结果:
[Lk,L1,L2] = para_Apriori('test3.txt','test5.txt',0.4)
ans =
5
ans =
10
ans =
7
ans =
10
未定义函数或变量 'apriori'。
出错 para_Apriori (line 24)
[L2,idx]=apriori(data1,data2,minsup);