在写这篇文章之前,xxx已经写过了几篇关于改判断数据集主题的文章,想要了解的朋友可以去翻一下之前的文章
刚刚学了数据挖掘的这个算法,马上实现下,怕忘掉了。。感觉matlab的好处就是矩阵可以一起停止逻辑运算,不过我没有停止预处理,输入的数据集保存在txt文件里,且都是以0-1矩阵形成的,不斟酌涌现次数。输出只实现了得到k-频仍项集,没有计算最终的关联规则。。那个感觉要遍历什么的,用矩阵枚举???还没想到怎么弄。。。。
当初就贴贴代码,可能存在很多地方没有斟酌到,,希望各位大神指导。。。。。感谢。。
从k频仍项集得到k+1频仍项集,通过两个k频仍项向量停止或运算得到。。
剪枝判断k+1-候选项的子串是否在k频仍项会合存在,通过向量 异或 xor来判断
统计支持度 提取数据会合指定列 停止与运算 再通过 sum 求和计算 支持度。。
%修改 原来判断两向量是否相称 matlab可以直接用==来判断 如向量 a,b 若用 a==b 等到新的向量 其中若对应位置相称 则为1 否则为0 。。所以好像可以改下下(http://zhidao.baidu.com/question/131185458.html)
% 求真子集 matlab可以用combntns函数 等改 。。
1、init.m
初始化函数,得到1-频仍项集及支持度,输入数据集和最小支持度
function [L A]=init(D,min_sup) %D表现数据集 min_sup 最小支持度 [m n]=size(D); A=eye(m,n); B=(sum(D))\'; i=1; while(i<=m) if B(i)<min_sup B(i)=[]; A(i,:)=[]; m=m-1; else i=i+1; end end L=[A B];
2、apriori_gen.m
function [C]=apriori_gen(A,k)%发生Ck(实现组内连接及剪枝 ) %A表现第k-1次的频仍项集 k表现第k-频仍项集 [m n]=size(A); C=zeros(0,n); %组内连接 for i=1:1:m for j=i+1:1:m flag=1; for t=1:1:k-1 if ~(A(i,t)==A(j,t)) flag=0; break; end end if flag==0 break; end c=A(i,:)|A(j,:); flag=isExit(c,A); %剪枝 if(flag==1)C=[C;c]; end end end
3、 isExit.m
function flag=isExit(c,A)%判断c串的子串在A中是否存在 [m n]=size(A); b=c; for i=1:1:n c=b; if c(i)==0 continue end c(i)=0; flag=0; for j=1:1:m A(j,:); a=sum(xor(c,A(j,:))); if a==0 flag=1; break; end end if flag==0 return end end
4、get_k_itemset.m
function [L C]=get_k_itemset(D,C,min_sup)%D为数据集 C为第K次剪枝后的候选集 取得第k次的频仍项集 m=size(C,1); M=zeros(m,1); t=size(D,1); i=1; while i<=m C(i,:); H=ones(t,1); ind=find(C(i,:)==1); n=size(ind,2); for j=1:1:n D(:,ind(j)); H=H&D(:,ind(j)); end x=sum(H\'); if x<min_sup C(i,:)=[]; M(i)=[]; m=m-1; else M(i)=x; i=i+1; end end L=[C M];
5、主函数 apriori.m
function [L]=apriori(D,min_sup) [L A]=init(D,min_sup)%A为1-频仍项集 L中为包含1-频仍项集以及对应的支持度 k=1; C=apriori_gen(A,k) %发生2项的集合 while ~(size(C,1)==0) [M C]=get_k_itemset(D,C,min_sup)%发生k-频仍项集 M是带支持度 C不带 if ~(size(M,1)==0)L=[L;M] end k=k+1; C=apriori_gen(C,k)%发生组合及剪枝后的候选集 end
举例数据集
abc =
1 1 1 1 0
0 1 1 0 1
1 1 1 0 1
0 1 0 1 1
1 1 1 1 0
输入:apriori(abc,3)
输出:
频仍项集+支持度
文章结束给大家分享下程序员的一些笑话语录:
手机终究会变成PC,所以ip会比wm更加畅销,但是有一天手机强大到一定程度了就会发现只有wm的支持才能完美享受。就好比树和草,草长得再高也是草,时间到了条件成熟了树就会窜天高了。www.ishuo.cn