资源简介
用Java语言实现的apriori算法,算法分为2步:计算频繁N项集;得出关联规则。
代码片段和文件信息
import java.io.*;
import java.util.*;
public class Apriori{
private List> Event;//事务数据
private int minSupport; //最小支持度
private double minConfidence; // 最小置信度
private int sum = 0;
private List> freqItemSet;//频繁N项集
public Apriori(List> Eventint minSup double minConf){//构造函数
this.Event = Event;
this.minSupport = minSup;
this.minConfidence = minConf;
freqItemSet = new ArrayList>();
}
void runApriori(){//运行Apriori算法分为2步:1.挖掘频繁N项集;2.产生关联规则
/*1.挖掘频繁N项集*/
List>freqItem = new ArrayList>();
freqItem = Get1Item();//得到频繁一项集
freqItem = apriori_gen(freqItem);//得到频繁二项集
//System.out.println(Event);
while(freqItem.size() != 0){//得到频繁N项集
if(freqItem.size()!=0)
freqItemSet = freqItem;
freqItem = apriori_gen(freqItem);
}
System.out.println(“频繁项集共有:“+freqItemSet.size()+“项“);
for(int i=0;i System.out.println(freqItemSet.get(i));
/*2.产生关联规则*/
apriori_genRule();
}
List> Get1Item(){//遍历事件集,获得频繁一项集
Map candi = new HashMap();//候选一项集
List> item = new ArrayList>();//频繁一项集
for(int i=0;i Set value = Event.get(i);
Iterator it = value.iterator();
while(it.hasNext()){//将set中的值放进候选一项集中,并计算频数
object str = it.next();
if(candi.containsKey(str)){
candi.put(str.toString() candi.get(str)+1);
}
else
candi.put(str.toString() 1);
}
}
Iterator it3 = candi.entrySet().iterator();
while(it3.hasNext()){ //根据支持度大小通过逐次比较得到频繁一项集
Map.Entry a = (Map.Entry)it3.next();
Set b = new TreeSet();
object v = a.getValue();
object t = a.getKey();
if(Integer.parseInt(v.toString()) >= minSupport){//比较支持度大小,符合要求则加入频繁一项集中
b.add(t.toString());
item.add(b);
}
}
//System.out.println(item);
return item;
}
List> apriori_gen(List> preSet){//根据频繁(k-1)项集生成频繁k项集
List> result = new ArrayList>();
int preSetSize = preSet.size();
for (int i = 0; i < preSetSize - 1; i++) {
for (int j = i + 1; j < preSetSize; j++) {
String[] strA1 = preSet.get(i).toArray(new String[0]);
String[] strA2 = preSet.get(j).toArray(new String[0]);
int judge = 1;//连接判断,判断两个k-1项集是否符合连接成k项集的条件,不符合则将判断条件置为0
if (strA1.length == strA2.length) {
for (int m = 0; m < strA1.length - 1; m++) {
if (!strA1[m].equals(strA2[m])) {
judge = 0;
break;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11875 2013-04-19 20:21 Apriori\Apriori.java
文件 101607 2013-04-19 15:12 Apriori\Result.txt
目录 0 2013-04-23 18:47 Apriori
----------- --------- ---------- ----- ----
113482 3
- 上一篇:android-support-v4.jar解决了友盟反馈
- 下一篇:jni数值传递
评论
共有 条评论