1.对A→B:
(1)支持度:support(A→B)=P(A∪B)
可信度:confidence(A→B)=P(B|A)
期望可信度:P(B)
作用度:P(B|A)/P(B)
(2)候选k项集→(用最小支持度进行过滤)→频繁k项集
某一频繁集生成的所有规则→(用最小置信度进行过滤)→强规则集合
2.Matlab代码如下:
(1)计算支持度的函数compute_sup
function sup=compute_sup(X,D)
[m,n]=size(D);
sup=0;
for i=1:m
if all(D(i,:)-X>=0)==true %结果大于等于零说明D的此项集包含了X,X个数加一
sup=sup+1;
end
end
sup=sup/m;
(2)计算置信度的函数compute_conf
function C=compute_conf(D,R) %R为关联规则矩阵,其中条件为-1,结果为1,其余为0
x=(R==-1);
y=(R==1);
C=compute_sup(x|y,D)/compute_sup(x,D); %(x|y)可直接用(abs(R))
(3)Aprior函数:
function R=Aprior(D,min_sup,min_conf)
[m,n]=size(D);%m为D的行数,n为D的列数
X=[];
C=eye(n);%eye单位矩阵
for i=1:n
L=[];
[c,d]=size(C);
for i=1:c
if compute_sup(C(i,:),D)>=min_sup
L=[L;C(i,:)];%符合条件则加入矩阵L
end
end
X=[X;L];%把频繁项集放入X矩阵,再把C矩阵清空作为下一个候选项集
C=[];
[a,b]=size(L);
for i=1:a
for j=i+1:a
indi=find(L(i,:)==1);
indj=find(L(j,:)==1);
if all(indi(1:end-1)==indj(1:end-1))&&(indi(end)~=indj(end))%前n-1项相同,最后一项不同,才能合并
C=[C;L(i,:)|L(j,:)];
end
end
end
if isempty(C)
break;
end
end
[e,f]=size(X);%已经得到频繁项集了,下面开始求强规则
R=[];
for i=1:e
ind=find(X(i,:)==1);
if length(ind)<=1%所有频繁项集里有只有一个元素的,把它排除,因它生成不了规则
continue;
end
for j=1:length(ind)-1
indd=nchoosek(ind,j);%从ind中选j个数进行组合
[g,h]=size(indd);
for k=1:g
Rk=X(i,:);
Rk(indd(k,:))=-1;
if(compute_conf(D,Rk))>=min_conf
R=[R;Rk];
end
end
end
end