• 判断数据集matlab 实现基本apriori算法


    在写这篇文章之前,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

  • 相关阅读:
    Vim step by step
    Ubuntu解压命令全览
    这样才能使本地Mysql服务允许被外部主机连接(两步)
    [Python] logging.logger
    Python Selenium
    MySQL中char、varchar和text的区别
    Way to MongoDB
    Python误区之strip,lstrip,rstrip
    Android Studio Tips
    Way to tmux
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3084513.html
Copyright © 2020-2023  润新知