【Matlab】Aprior算法的实现

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值