📄 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 + -