⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apriori.java

📁 用java实现的数据挖掘的关联规则的Apriori
💻 JAVA
字号:
// Decompiled by DJ v3.9.9.91 Copyright 2005 Atanas Neshkov  Date: 2007-5-16 21:08:33
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   Apriori.java

import java.io.*;

class Apriori
{

    public Apriori()
    {
        minSup = 0.20000000000000001D;
        minCon = 0.40000000000000002D;
        ruleSrc = new FastVector();
        ruleDest = new FastVector();
        confidence = new FastVector();
        support = new FastVector();
        try
        {
            jbInit();
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
    }

    public void WriteBig(FastVector fastvector)
        throws FileNotFoundException, IOException
    {
        FileOutputStream fileoutputstream = new FileOutputStream("c:/frequence.txt");
        int i = fastvector.size();
        for(int k = 0; k < i; k++)
        {
            int j = ((FastVector)(FastVector)fastvector.elementAt(k)).size();
            for(int l = 0; l < j; l++)
            {
                FastVector fastvector1 = (FastVector)fastvector.elementAt(k);
                Item item = (Item)fastvector1.elementAt(l);
                fileoutputstream.write(item.Key());
                fileoutputstream.write(44);
            }

            fileoutputstream.write(59);
        }

    }

    public void Write(FastVector fastvector)
        throws FileNotFoundException, IOException
    {
        FileOutputStream fileoutputstream = new FileOutputStream("c:/vector.txt");
        int i = fastvector.size();
        for(int j = 0; j < i; j++)
        {
            Item item = (Item)fastvector.elementAt(j);
            fileoutputstream.write(item.Key());
            fileoutputstream.write(32);
        }

        fileoutputstream.write(59);
    }

    public void Print(FastVector fastvector)
    {
        int i = fastvector.size();
        for(int j = 0; j < i; j++)
        {
            Item item = (Item)fastvector.elementAt(j);
            System.out.print(TableHeader[item.Key() - 65]);
            System.out.print(' ');
        }

        System.out.println(' ');
    }

    public void PrintBig(FastVector fastvector)
    {
        for(int i = 0; i < fastvector.size(); i++)
        {
            Print((FastVector)fastvector.elementAt(i));
            System.out.println(" ");
        }

    }

    public void PrintChildren()
    {
        for(int i = 0; i < children.length; i++)
        {
            PrintBig(children[i]);
            System.out.println("--------------------");
        }

    }

    public void PrintRules()
    {
        for(int i = 0; i < ruleSrc.size(); i++)
        {
            System.out.println((new StringBuilder()).append("--------- ").append(i).append(" -----------").toString());
            Print((FastVector)ruleSrc.elementAt(i));
            System.out.println((new StringBuilder()).append(" =>    confidence is:").append(((Double)confidence.elementAt(i)).toString()).toString());
            Print((FastVector)ruleDest.elementAt(i));
        }

    }

    public void SetSup(double d)
    {
        double d1 = fullSet.size();
        if(d <= 1.0D)
            minSup = d;
        minNum = (int)(d1 * d + 1.0D);
    }

    public void SetCon(double d)
    {
        if(d <= 1.0D)
            minCon = d;
    }

    public void Init(String s)
        throws IOException, FileNotFoundException
    {
        GetSource getsource = new GetSource(s);
        fullSet = getsource.GetAll();
        num = fullSet.size();
    }

    private int Num(FastVector fastvector, FastVector fastvector1)
    {
        int i = 0;
        for(int j = 0; j < fastvector.size(); j++)
        {
            FastVector fastvector2 = (FastVector)fastvector.elementAt(j);
            if(IsContain(fastvector2, fastvector1))
                i++;
        }

        return i;
    }

    private boolean IsContain(FastVector fastvector, Item item)
    {
        for(int i = 0; i < fastvector.size(); i++)
        {
            Item item1 = (Item)fastvector.elementAt(i);
            if(item1.Key() == item.Key())
                return true;
        }

        return false;
    }

    private boolean IsContain(FastVector fastvector, FastVector fastvector1)
    {
        for(int i = 0; i < fastvector1.size(); i++)
            if(!IsContain(fastvector, (Item)fastvector1.elementAt(i)))
                return false;

        return true;
    }

    private boolean IsContain2(FastVector fastvector, FastVector fastvector1)
    {
        for(int i = 0; i < fastvector.size(); i++)
        {
            FastVector fastvector2 = (FastVector)fastvector.elementAt(i);
            if(IsContain(fastvector2, fastvector1))
                return true;
        }

        return false;
    }

    private FastVector BreakOne(FastVector fastvector)
    {
        int i = fastvector.size();
        FastVector fastvector1 = new FastVector();
        for(int k = 0; k < i; k++)
        {
            int j = ((FastVector)(FastVector)fastvector.elementAt(k)).size();
            for(int l = 0; l < j; l++)
            {
                FastVector fastvector2 = (FastVector)fastvector.elementAt(k);
                if(!IsContain(fastvector1, (Item)fastvector2.elementAt(l)))
                    fastvector1.addElement((Item)fastvector2.elementAt(l));
            }

        }

        return fastvector1;
    }

    private FastVector ToC1(FastVector fastvector)
    {
        FastVector fastvector1 = new FastVector();
        int i = fastvector.size();
        for(int j = 0; j < i; j++)
        {
            FastVector fastvector2 = new FastVector();
            Item item = (Item)fastvector.elementAt(j);
            fastvector2.addElement(item);
            fastvector1.addElement(fastvector2);
        }

        return fastvector1;
    }

    private FastVector SelfConnect(FastVector fastvector)
    {
        FastVector fastvector1 = new FastVector();
        FastVector fastvector2 = BreakOne(fastvector);
        for(int i = 0; i < fastvector.size(); i++)
        {
            for(int k = 0; k < fastvector2.size(); k++)
            {
                FastVector fastvector3 = (FastVector)fastvector.elementAt(i);
                Item item = (Item)fastvector2.elementAt(k);
                if(IsContain(fastvector3, item))
                    continue;
                FastVector fastvector5 = new FastVector();
                fastvector5.appendElements(fastvector3);
                fastvector5.addElement(item);
                if(!IsContain2(fastvector1, fastvector5))
                    fastvector1.addElement(fastvector5);
            }

        }

        for(int j = fastvector1.size() - 1; j >= 0; j--)
        {
            FastVector fastvector4 = (FastVector)fastvector1.elementAt(j);
            if(Num(fullSet, fastvector4) < minNum)
                fastvector1.removeElementAt(j);
        }

        return fastvector1;
    }

    public void GenerateFrequence()
    {
        FastVector fastvector1 = BreakOne(fullSet);
        fastvector1 = ToC1(fastvector1);
        Apriori apriori = new Apriori();
        System.out.println("\u8F93\u51FAc1\u7684\u5927\u5C0F");
        System.out.println(fastvector1.size());
        System.out.println("\u8F93\u51FAc1");
        apriori.PrintBig(fastvector1);
        int i = 2;
        while(fastvector1.size() > 0) 
        {
            frequence = SelfConnect(fastvector1);
            System.out.print("\u8F93\u51FAc");
            System.out.print(i);
            System.out.println("\u7684\u5927\u5C0F");
            System.out.println(frequence.size());
            System.out.print("\u8F93\u51FAc");
            System.out.println(i);
            apriori.PrintBig(frequence);
            i++;
            FastVector fastvector = fastvector1;
            fastvector1 = frequence;
            frequence = fastvector;
        }
        children = new FastVector[frequence.size()];
        for(int j = 0; j < children.length; j++)
            children[j] = new FastVector();

    }

    public void Recursion(FastVector fastvector, int i)
    {
        if(fastvector.size() <= 2)
            return;
        for(int j = 0; j < fastvector.size(); j++)
        {
            FastVector fastvector1 = new FastVector();
            fastvector1.appendElements(fastvector);
            fastvector1.removeElementAt(j);
            Recursion(fastvector1, i);
            if(!IsContain2(children[i], fastvector1))
                children[i].addElement(fastvector1);
        }

    }

    public void Children(FastVector fastvector, int i)
    {
        if(fastvector.size() == 1)
            return;
        for(int j = 0; j < fastvector.size(); j++)
        {
            FastVector fastvector1 = new FastVector();
            fastvector1.addElement(fastvector.elementAt(j));
            children[i].addElement(fastvector1);
        }

        Recursion(fastvector, i);
    }

    public void AllChildren(FastVector fastvector)
    {
        for(int i = 0; i < fastvector.size(); i++)
        {
            FastVector fastvector1 = (FastVector)fastvector.elementAt(i);
            Children(fastvector1, i);
        }

    }

    public FastVector Odds(FastVector fastvector, FastVector fastvector1)
    {
        FastVector fastvector2 = new FastVector();
        for(int i = 0; i < fastvector.size(); i++)
        {
            Item item = (Item)fastvector.elementAt(i);
            if(!IsContain(fastvector1, item))
                fastvector2.addElement(item);
        }

        return fastvector2;
    }

    public double Support(FastVector fastvector, FastVector fastvector1)
    {
        return (double)Num(fullSet, fastvector) / (double)Num(fullSet, fastvector1);
    }

    public void GenerateRules()
    {
        int k = children.length;
        for(int i = 0; i < k; i++)
        {
            FastVector fastvector1 = children[i];
            FastVector fastvector2 = new FastVector();
            fastvector2.appendElements((FastVector)frequence.elementAt(i));
            for(int j = 0; j < fastvector1.size(); j++)
            {
                FastVector fastvector3 = new FastVector();
                fastvector3.appendElements((FastVector)fastvector1.elementAt(j));
                double d = Support(fastvector2, fastvector3);
                if(d > minCon)
                {
                    double d1 = (double)Num(fullSet, fastvector2) / (double)num;
                    FastVector fastvector = Odds(fastvector2, fastvector3);
                    ruleSrc.addElement(fastvector3);
                    ruleDest.addElement(fastvector);
                    confidence.addElement(new Double(d));
                    support.addElement(new Double(d1));
                }
            }

        }

    }

    public void main(double d, double d1)
        throws FileNotFoundException, IOException
    {
        Apriori apriori = new Apriori();
        start = System.currentTimeMillis();
        apriori.Init("c:/shujuku.txt");
        apriori.SetSup(d);
        apriori.SetCon(d1);
        System.out.println("\u6BCF\u7B14\u4EA4\u6613\u4E2D\u5B9E\u9645\u8D2D\u4E70\u7684\u5546\u54C1:");
        apriori.PrintBig(apriori.fullSet);
        System.out.println("\u4E0B\u9762\u8FDB\u5165\u4EA7\u751F\u9891\u7E41\u96C6\u7684\u7B97\u6CD5");
        apriori.GenerateFrequence();
        apriori.AllChildren(apriori.frequence);
        apriori.GenerateRules();
        Output.WriteRules(apriori);
        time = System.currentTimeMillis() - start;
        String s = String.valueOf(time);
        ResultFrame resultframe = new ResultFrame();
        ResultFrame _tmp = resultframe;
        ResultFrame.mm(s);
    }

    private void jbInit()
        throws Exception
    {
    }

    double minSup;
    double minCon;
    double deltaSup;
    double deltaCon;
    int minNum;
    int num;
    FastVector fullSet;
    FastVector frequence;
    FastVector children[];
    FastVector ruleSrc;
    FastVector ruleDest;
    FastVector confidence;
    FastVector support;
    FastVector test;
    double m;
    double n;
    long start;
    long time;
    static String TableHeader[] = new String[20];

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -