zoukankan      html  css  js  c++  java
  • 判断数据集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

  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3084513.html
Copyright © 2011-2022 走看看