用来实现二元表示关联分析的Apriori算法matlab实现

用来实现关联分析的Apriori算法matlab实现

该函数用来处理二元表示问题,经过改动可以用来处理序列模式,这也是我之后要做的一个内容。
该函数由主函数,生成候选项集,剪枝以及二元化四个部分组成。数据使用的是mushroom.

function Ck = candidate_gen(Fk)
% 用于产生候选项集,产生k+1候选项集,Fk为列矩阵,原项集一般情况下为k列
Ck=[];
M=size(Fk,1);%剩余序列个数
k=size(Fk,2);%k序列
w=1;%计数用
for i=1:M-1  %12比,13比。。。1和N比
    for j=i+1:M
        if k==1
            Ck(w,:)=[Fk(i,1:k) Fk(j,k)];%第w行序列
            w=w+1;
        elseif Fk(i,1:k-1)==Fk(j,1:k-1)
            Ck(w,:)=[Fk(i,1:k) Fk(j,k)];%第w行序列
            w=w+1;
        else break;
        end
    end
end
flag=0;
%剪枝步骤:
w=size(Ck,1); %记录w行
for i=1:w
    for j=1:M
        if (ismember(Fk(j,:),Ck(i,:)))
            flag=1;break;
        end
    end
    if flag==0
        Ck(i,:)=[];
    end
    flag=0;
end
end

```csharp
function [ B ] = BooleMatrix(A)
%BooleMatrix.m把数据转化为布尔矩阵,注意读入的数据一定是每行数据的个数一致
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
M=size(A,1); %行
N=size(A,2); %列
B=zeros(M,N);
for i=1:M
    for j=1:N
        B(i,A(i,j))=1;   %%第i个事务,第j个属性是否是A(i,j);这个产生不重要,只是作为练习一用
    end 
end
end
function Ck2=candidate_prune(Ck,T,minSup)
% Ck为候选项集,本次要对其进行剪枝
% 暴力法求解,T为原数据组,开销非常大
% 方法2是枚举事务包含的项集,T为处理过的事务矩阵(1 2 3等),minSup为用于剪枝的支持度
M=size(T,1);%M个事务
m=size(Ck,1);%m个序列
s=zeros(m,1);
Ck2=[];
for i=1:m
    for j=1:M  %对每个事务进行搜索
        if (ismember(Ck(i,:),T(j,:))) %如果第i行包含于T第j个事务
            s(i)=s(i)+1;
        end
    end
end
s=s/M;%计算支持度
s=(s>minSup);
w=1;%另起炉灶
for i=1:m
    if s(i)==1
        Ck2(w,:)=Ck(i,:);
        w=w+1;
    end
end
end
function Apriori(T, minSup)
%T为事务矩阵,minSup为最小支持度阈值
%增加函数candidate_gen(),candidate_prune
k=1;% k为项集,先检测1-项集
M = size(T,1);%事务数
% Number of attributes in the dataset
N = size(T,2);%属性数
F=((sum(T,1)/M)>minSup);%行向量,代表每个属性是否是频繁的
T1=item(T);
w=1;%%w为计数单位
for i=1:N %F1记录1频繁序列属性编号
    if ( F(i)~=0)
        F1(w)=i;
        w=w+1;
    end
end
Ck=F1';%循环初值,并把其转置为列矩阵
while ( ~isempty(Ck))
    k=k+1;
    Fk=Ck;
    Ck=candidate_gen(Fk);%产生候选项集
    Ck=candidate_prune(Ck,T1,minSup);%剪枝候选项集
end
end
%使用方法,在最后一个Ck处做好标记
clear; clc
load mushroom.txt;
MushroomBooleMatrix=BooleMatrix(mushroom);
minSup = 0.8;
Apriori(MushroomBooleMatrix,minSup); %主函数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值