• 大小: 21KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: Java
  • 标签: 测试数据  

资源简介

用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


评论

共有 条评论