今天花了一天的时间写了个Apriori的算法实现,有点结果,但不完善。基本要素都有了,包括生成频繁集和关联规则~
放上来跟大家分享个~~吧node.java和apriori.java放一个包里,运行apriori就有结果可观察。
apriori.java
package apriori;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
public class Apriori {
String[][] data ={
{"beaf","chicken","milk"},
{"beaf","cheeze"},
{"cheeze","boots"},
{"beaf","chicken","cheeze"},
{"beaf","chicken","cloth","cheeze","milk"},
{"chicken","cloth","milk"},
{"chicken","milk","cloth"}
};
ArrayList<ArrayList<String>> D = new ArrayList<ArrayList<String>>(); //main data
ArrayList<ArrayList<Node>> R = new ArrayList<ArrayList<Node>>(); //frequency sets final result, including all layer
ArrayList<Node> C = new ArrayList<Node>(); //candidate sets
ArrayList<Node> F = new ArrayList<Node>(); //frequency sets
HashSet<String> set = new HashSet<String>();
int layer =1;
String split = ",";
// initiate the string data into arraylist
void init(){
int num=0;
for(int i=0; i<data.length; i++){
ArrayList<String> al = new ArrayList();
for(int j=0; j<data[i].length; j++){
set.add(data[i][j]);
al.add(data[i][j]);
}
D.add(al);
}
Iterator<String> it1=set.iterator();
Node node;
String temp;
while(it1.hasNext()){
temp = it1.next();
num = 0;
Iterator<ArrayList<String>> it2 = D.iterator();
ArrayList<String> al = new ArrayList<String>();
while(it2.hasNext()){
if(it2.next().contains(temp))num++;
}
node = new Node(temp,num);
C.add(node);
if(num>1){
F.add(n
放上来跟大家分享个~~吧node.java和apriori.java放一个包里,运行apriori就有结果可观察。
apriori.java
package apriori;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
public class Apriori {
String[][] data ={
{"beaf","chicken","milk"},
{"beaf","cheeze"},
{"cheeze","boots"},
{"beaf","chicken","cheeze"},
{"beaf","chicken","cloth","cheeze","milk"},
{"chicken","cloth","milk"},
{"chicken","milk","cloth"}
};
ArrayList<ArrayList<String>> D = new ArrayList<ArrayList<String>>(); //main data
ArrayList<ArrayList<Node>> R = new ArrayList<ArrayList<Node>>(); //frequency sets final result, including all layer
ArrayList<Node> C = new ArrayList<Node>(); //candidate sets
ArrayList<Node> F = new ArrayList<Node>(); //frequency sets
HashSet<String> set = new HashSet<String>();
int layer =1;
String split = ",";
// initiate the string data into arraylist
void init(){
int num=0;
for(int i=0; i<data.length; i++){
ArrayList<String> al = new ArrayList();
for(int j=0; j<data[i].length; j++){
set.add(data[i][j]);
al.add(data[i][j]);
}
D.add(al);
}
Iterator<String> it1=set.iterator();
Node node;
String temp;
while(it1.hasNext()){
temp = it1.next();
num = 0;
Iterator<ArrayList<String>> it2 = D.iterator();
ArrayList<String> al = new ArrayList<String>();
while(it2.hasNext()){
if(it2.next().contains(temp))num++;
}
node = new Node(temp,num);
C.add(node);
if(num>1){
F.add(n