資源簡介
用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?????????????for?(int?j?=?i?+?1;?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?????????????????????????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數值傳遞
評論
共有 條評論