文档介绍:matlab实现apriori算法源代码
matlab实现apriori算法源代码
一、实验目的
通过实验,加深数据挖掘中一个重要方法——关联分析的认识,其经典算法为apriori算法,了解影响apriori算法性能的因素,掌,{I2,I5}本身就是最大2-{I2,I3,I5}{I2,I3,I5}为侯选3-,生成最大的3-tiemsets L3。此时, 从L3中不能再生成侯选4-itemset 。Apriori算法结束.
算法的图例说明
五、实验结果
:
实验结果如下:
六、实验总结
Apriori算法可以很有效地找出数据集中存在的关联规则且能找出最大项的关联规则,但从以上的算法执行过程可以看到Apriori算法的缺点:
第一,在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;第二,每次计算项集的支持度时,都对数据库D中的全部记录进行了一遍扫描比较,如果是一个大型的数据库的话,这种扫描比较会大大增加计算机系统的I/O开销。而这种代价是随着数据库的记录的增加呈现出几何级数的增加。因此人们开始寻求一种能减少这种系统1/O开销的更为快捷的算法。
七、实验程序
function my_apriori(X,minsup)
clc;
%%%%主函数,输入X数据集,判断产生大于minsup最小支持度的关联规则
%%%%%%%%%%%%%%%%%%%%%%%%%%
file = textread('','%s','delimiter','\n','whitespace','');
[m,n]=size(file);
for i=1:m
words=strread(file{i},'%s','delimiter',' ');
words=words';
X{i}=words;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
minsup=; %预先定义支持度
[m,N]=size(X); %求X的维数
temp=X{1}; %用已暂存变量存储所有不同项集
for i=2:N
temp=union(temp,X{i}); %找出所有不同项(种类)
end
%%%%%%%%%%%%%%%%%%%%找出k-频繁项
L=Sc_candidate(temp); %找出2-项候选项集
sum=1; %统计满足条件的最多项集
while(~isempty(L{1})) %循环终止条件为第k次频繁项集为空
sum=sum+1;
C=count_support(L,X,minsup); %挑选出满足最小支持度的k-频繁项
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sprintf('%s%d%s','满足要求的',sum,'次频繁项集依次为') %显
for i=1:size(C,1) %示
disp(C{i,1}); %部
end %分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% L=gen_rule(C); %依次产生k-频繁项(依据apriori算法规则)
End
%%%%%%%%%%%%%%%%%%%%%%%%各个子程序如下
function y=cell_union(X,Y) %实现两cell元组合并功能,由k-1项集增加到k项集函数
[m,n]=size(X);
if(~iscellstr(X)) %判断X是否元组
L{1}=X;
L{1,2}=Y;
else
L=X;
L{1,n+1}=Y;
end
y=L;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=count_support(L,X,minsup)
%找出符合大于支持度sup的候选集,L为候选集,X为总数据集
X=X';%转置
%%%%%%%%%%%%%%%%%统计频繁项
[m,n]=size(L);
[M,N]