版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、關(guān)聯(lián)規(guī)則算法Apriori的學(xué)習(xí)與實現(xiàn) (2011-07-18 11:28:52)首先我們來看,什么是規(guī)則?規(guī)則形如”如果那么(IfThen)”,前者為條件,后者為結(jié)果。關(guān)聯(lián)規(guī)則挖掘用于尋找給定數(shù)據(jù)集中項之間的有趣的關(guān)聯(lián)或相關(guān)關(guān)系。關(guān)聯(lián)規(guī)則揭示了數(shù)據(jù)項間的未知的依賴關(guān)系,根據(jù)所挖掘的關(guān)聯(lián)關(guān)系,可以從一個數(shù)據(jù)對象的信息來推斷另一個數(shù)據(jù)對象的信息。例如購物籃分析。牛奶 面包 支持度:3%,置信度:40%支持度3%意味3%顧客同時購買牛奶和面包。置信度40%意味購買牛奶的顧客40%也購買面包。規(guī)則的支持度和置信度是兩個規(guī)則興趣度度量,它們分別反映發(fā)現(xiàn)規(guī)則的有用性和確定性。關(guān)聯(lián)規(guī)則是有趣的,如果它滿足
2、最小支持度閾值和最小置信度閾值。這些閾值可以由用戶或領(lǐng)域?qū)<以O(shè)定。我們先來認識幾個相關(guān)的定義:定義1: 支持度(support)支持度s是事務(wù)數(shù)據(jù)庫D中包含A U B的事務(wù)百分比,它是概率P(A U B),即support(A B)=P(A U B),它描述了A和B這兩個物品集的并集在所有的事務(wù)中出現(xiàn)的概率。定義2: 置信度(confidence)可信度為事務(wù)數(shù)據(jù)庫D中包含A的事務(wù)中同時也包含B的百分比,它是概率P(B|A),即confidence(A B)=P(B|A)。定義3: 頻繁項目集支持度不小于用戶給定的最小支持度閾值(minsup)的項集稱為頻繁項目集(簡稱頻集),或者大項目集。所
3、有的頻繁1-項集記為L1。假設(shè)有如下表的購買記錄。顧客項目1orange juice, coke2milk, orange juice, window cleaner3orange juice, detergent4orange juice, detergent, coke5window cleaner將上表整理一下,得到如下的一個2維表OrangeWin ClMilkCokeDetergentOrange41122WinCl12100Milk11100Coke20021Detergent10002上表中橫欄和縱欄的數(shù)字表示同時購買這兩種商品的交易條數(shù)。如購買有Orange的交易數(shù)為4,而同時
4、購買Orange和Coke的交易數(shù)為2。置信度表示了這條規(guī)則有多大程度上值得可信。設(shè)條件的項的集合為A,結(jié)果的集合為B。置信度計算在A中,同時也含有B的概率。即Confidence(A=B)=P(B|A)。例如計算如果Orange則Coke的置信度。由于在含有Orange的4條交易中,僅有2條交易含有Coke.其置信度為0.5。支持度計算在所有的交易集中,既有A又有B的概率。例如在5條記錄中,既有Orange又有Coke的記錄有2條。則此條規(guī)則的支持度為2/5=0.4。現(xiàn)在這條規(guī)則可表述為,如果一個顧客購買了Orange,則有50%的可能購買Coke。而這樣的情況(即買了Orange會再買Co
5、ke)會有40%的可能發(fā)生。再來考慮下述情況。項支持度A0.45B0.42C0.4A and B0.25A and C0.2B and C0.15A,B,and C0.05可得到下述規(guī)則規(guī)則置信度If B and C then A0.05/0.15*100%=33.33%If A and C then B0.05/0.20*100%=25%If A and B then C0.05/0.25*100%=20%上述的三條規(guī)則,哪一條規(guī)則有用呢?對于規(guī)則If B and C then A,同時購買B和C的人中,有33.33%會購買A。而單項A的支持度有0.45,也就是說在所有交易中,會有45%的人
6、購買A.看來使用這條規(guī)則來進行推薦,還不如不推薦,隨機對顧客進薦好了。為此引入另外一個量,即提升度(Lift),以度量此規(guī)則是否可用。描述的是相對于不用規(guī)則,使用規(guī)則可以提高多少。有用的規(guī)則的提升度大于1。計算方式為Lift(A=B)=Confidence(A=B)/Support(B)=Support(A=B)/(Support(A)*Support(B)。在上例中,Lift(If B and C The A)=0.05/(0.15*0.45)=0.74。而Lift(If A then B)=0.25/(0.45*0.42)=1.32。也就是說對買了A的人進行推薦B,購買概率是隨機推薦B的1
7、.32倍。如何產(chǎn)生規(guī)則呢??梢苑謨刹阶?。首先找出頻繁集(frequent itemset)。所謂頻繁集指滿足最小支持度或置信度的集合。其次從頻繁集中找出強規(guī)則(strong rules)。強規(guī)則指既滿足最小支持度又滿足最小置信度的規(guī)則。我們來看如何產(chǎn)生頻繁集。這其中有一個定理。即頻繁集的子集也一定是頻繁集。比如,如果A,B,C是一個3項的頻繁集,則其子集A,B,B,C,A,C也一定是2項的頻繁集。為方便,可以把含有k項的集合稱之為k-itemsets.下面以迭代的方式找出頻繁集。首先找出1-itemsets的頻繁集,然后使用這個1-itemsets,進行組合,找出2-itemsets的頻繁集。
8、如此下去,直到不再滿足最小支持度或置信度的條件為止。這其中重要的兩步驟分別是連接(join)和剪枝(prune).即從(k-1)-itemsets中的項進行組合,產(chǎn)生備選集(Candidate itemsets)。再從備選集中,將不符合最小支持度或置信度的項刪去。例如Frequent 2-itemsetsCandidate 3-itemsetsFrqquent 3-itemsetsI1,I2=I1,I2,I4=I1,I2,I4I1,I4I2,I3,I4I2,I3I2,I4下面我們再來看一個詳細的例子。設(shè)最小支持度為2,以Ck表示k-itemsets備選集,以Lk表示k-itemsets頻繁集。
9、IDItemsItemsetSup. countItemsetItemset100I1,I2,I5I16I1I1,I2200I2,I4=C1:I27=L1:I2=C2I1,I3300I2,I3I36I3I1,I4400I1,I2,I4I42I4I1,I5500I1,I3I52I5I2,I3600I2,I3I2,I4700I1,I3I2,I5800I1,I2,I3,I5I3,I4900I1,I2,I3I3,I5I4,I5對C2進行掃描,計算支持度。ItemsetSup. countItemsetItemsetSup. countItemsetI1,I24=L2:I1,I2=C3I1,I2,I32
10、=L3:I1,I2,I3I1,I34I1,I3I1,I2,I52I1,I2,I5I1,I41I1,I5I1,I52I2,I3I2,I34I2,I4I2,I42I2,I5I2,I52I3,I40I3,I51I4,I50對于頻繁集中的每一項k-itemset,可以產(chǎn)生非空子集,對每一個子集,可以得到滿足最小置信度的規(guī)則了。例如考慮I1,I2,I5。其子集有I1,I2, I1,I5, I2,I5, I1, I2, I5??梢援a(chǎn)生規(guī)則,I1,I2=I5 (50%), I1,I5=I2 (100%), I2,I5=I1 (100%),I1=I2,I5 (33%), I2=I1,I5 (29%), I5=
11、I1,I2 (100%)。也不是每個數(shù)據(jù)集都有產(chǎn)生強規(guī)則。例如Thinkpad notebook 和Canon printer一起可能很難產(chǎn)生有效規(guī)則。因為恰好一起買這兩個牌子的產(chǎn)品的顧客太少。但不妨將Thinkpad notebook放到Notebook這一層次上考慮,而Canon printer放到printer這一去層次上考慮。這樣的話,一起買notebook和printer的顧客就較多了。也即Multilevel association rules。自1994年由Agrawal等人提出的關(guān)聯(lián)規(guī)則挖掘Apriori的算法從其產(chǎn)生到現(xiàn)在,對關(guān)聯(lián)規(guī)則挖掘方面的研究有著很大的影響。Aprior
12、i 算法是一種最有影響的挖掘布爾關(guān)聯(lián)規(guī)則頻繁項集的算法。算法基于這樣的事實:算法使用頻繁項集性質(zhì)的先驗知識。Apriori 使用一種稱作逐層搜索的迭代方法,k-項集用于探索(k+1)-項集。首先,找出頻繁1-項集的集合。該集合記作L1。L1用于找頻繁2-項集的集合L2,而L2用于找L3,如此下去,直到不能找到頻繁k-項集。找每個Lk需要一次數(shù)據(jù)庫掃描。為提高頻繁項集逐層產(chǎn)生的效率,一種稱作Apriori 性質(zhì)的重要性質(zhì)用于壓縮搜索空間。為了提高頻繁項目集逐層產(chǎn)生的效率,Apriori算法利用了兩個重要的性質(zhì)用于壓縮搜索空間:(l)若X是頻繁項集,則x的所有子集都是頻繁項集。(2)若x是非頻繁項
13、集,則X的所有超集都是非頻繁項集。算法: Apriori算法,使用逐層迭代找出頻繁項集。輸入:事務(wù)數(shù)據(jù)庫D;最小支持度閾值min_sup。輸出:D 中的頻繁項集L。1) L1 = find_frequent_1_itemsets(D);2) for (k = 2; Lk-1 ; k+) 3) Ck = aproiri_gen(Lk-1,min_sup);4) for each transaction t D /scan D for count5) Ct = subset(Ck,t); /get subsets of t that are candidates6) for each candid
14、ate c Ct7) c.count+;8) 9) Lk=c Ck | c.count min_sup10) 11) return L = kLk;現(xiàn)舉例說明:如表1所示為事務(wù)數(shù)據(jù)庫D,設(shè)最小支持度為20%,挖掘頻繁項集的具體過程如表所示。表1事務(wù)數(shù)據(jù)庫D圖所示為Apriori算法挖掘頻繁集的過程,其中最小支持度為20%。圖1Apriori算法的執(zhí)行流程第一步,經(jīng)過算法的第一次迭代,對事務(wù)數(shù)據(jù)庫進行一次掃描,計算出D中所包含的每個項目出現(xiàn)的次數(shù),生成候選1-項集的集合C1。第二步,根據(jù)設(shè)定的最小支持度,從C1中確定頻繁1-項集L1。第三步,由L1產(chǎn)生候選2-項集C2,然后掃描事務(wù)數(shù)據(jù)庫對C2中
15、的項集進行計數(shù)。第四步,根據(jù)最小支持度,從候選集C2中確定頻繁集L2。第五步,由頻繁2-項集L2生成候選3-項集C3,生成的候選3-項集的集合C3=1,2,3,1,3,5,2,3,5,根據(jù)Apriori的性質(zhì)剪枝:所有的頻繁項集的子集都是頻繁的,項集1,2,3的子集1,2不包含在頻繁2-項集L2中,故刪除1,2,3。項集1,3,5的子集1,5也不包含在頻繁2-項集L2中,故刪除1,3,5,項集2,3,5的所有子集都是L2的元素,故保留。Apriori算法的效率分析:(1)Apriori性質(zhì)能顯著減少候選集的數(shù)目。事務(wù)數(shù)據(jù)庫TDB總共有4個項目,因此可能的2-項集有 =6個。正如本例所示,利用A
16、priori性質(zhì),我們只需要檢查4個候選2-項集的支持度。Apriori算法在2項集這個層次上剪枝率達33.3%。隨著候選集的長度逐漸增大,可能的組合數(shù)目也急劇增大,因此Apriori算法的剪枝效率也越來越高。(2)盡管Apriori能對大量候選集剪枝,但是在大型的事務(wù)數(shù)據(jù)庫中,仍然可能有大量的候選集需要處理,并且這種操作相當(dāng)耗時。例如,如果事務(wù)數(shù)據(jù)庫包含106個項目,并且只有1%(即104)的項目是頻繁的,Apriori需要產(chǎn)生超過107個候選2-項集,掃描數(shù)據(jù)庫計算它們的支持度,生成L2以產(chǎn)生候選3-項集。(3)反復(fù)地掃描數(shù)據(jù)庫、計算候選集的支持度,再生成新的長度加1的候選集,Aprior
17、i算法是冗長乏味的,尤其是當(dāng)存在長模式的時候。Apriori是一種產(chǎn)生候選集,然后檢測其支持度的算法。為挖掘頻集X =x1,x2,x100 . Apriori需要掃描數(shù)據(jù)庫100次。針對Apriori算法存在的缺點,人們對Apriori算法進行了多方面的改進,希望能夠找出一個高效、可靠的挖掘頻繁項集的算法。這些算法大多是以 Apriori 為核心,或是其變體,或是其擴展。如增量更新算法、并行算法等下面是使用Java語言實現(xiàn)的Apriori算法,實現(xiàn)了AprioriAlgorithm 類,包含了頻繁項集的挖掘過程和頻繁關(guān)聯(lián)規(guī)則的挖掘過程。另外,有一個輔助類ProperSubsetCombinat
18、ion用于計算一個頻繁項集的真子集,采用組合原理,基于數(shù)值編碼原理實現(xiàn)的組合求解集合的真子集。算法實現(xiàn)(一)核心類Apriori算法的核心實現(xiàn)類為AprioriAlgorithm,實現(xiàn)的Java代碼如下所示:package org.shirdrn.datamining.association;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;public cla
19、ss AprioriAlgorithm private MapInteger, Set txDatabase; / 事務(wù)數(shù)據(jù)庫private Float minSup; / 最小支持度private Float minConf; / 最小置信度private Integer txDatabaseCount; / 事務(wù)數(shù)據(jù)庫中的事務(wù)數(shù)private MapInteger, SetSet freqItemSet; / 頻繁項集集合private MapSet, SetSet assiciationRules; / 頻繁關(guān)聯(lián)規(guī)則集合public AprioriAlgorithm(MapInteger
20、, Set txDatabase,Float minSup,Float minConf) this.txDatabase = txDatabase;this.minSup = minSup;this.minConf = minConf;this.txDatabaseCount = this.txDatabase.size();freqItemSet = new TreeMapInteger, SetSet();assiciationRules = new HashMapSet, SetSet();public MapSet, Float getFreq1ItemSet() MapSet, Fl
21、oat freq1ItemSetMap = new HashMapSet, Float();MapSet, Integer candFreq1ItemSet = this.getCandFreq1ItemSet();IteratorMap.EntrySet, Integer it = candFreq1ItemSet.entrySet().iterator();while(it.hasNext() Map.EntrySet, Integer entry = it.next();/ 計算支持度Float supported = new Float(entry.getValue().toStrin
22、g()/new Float(txDatabaseCount);if(supported=minSup) freq1ItemSetMap.put(entry.getKey(), supported);return freq1ItemSetMap;public MapSet, Integer getCandFreq1ItemSet() MapSet, Integer candFreq1ItemSetMap = new HashMapSet, Integer();IteratorMap.EntryInteger, Set it = txDatabase.entrySet().iterator();/
23、 統(tǒng)計支持數(shù),生成候選頻繁1-項集while(it.hasNext() Map.EntryInteger, Set entry = it.next();Set itemSet = entry.getValue();for(String item : itemSet) Set key = new HashSet();key.add(item.trim();if(!candFreq1ItemSetMap.containsKey(key) Integer value = 1;candFreq1ItemSetMap.put(key, value);else Integer value = 1+cand
24、Freq1ItemSetMap.get(key);candFreq1ItemSetMap.put(key, value);return candFreq1ItemSetMap;public SetSet aprioriGen(int m, SetSet freqMItemSet) SetSet candFreqKItemSet = new HashSetSet();IteratorSet it = freqMItemSet.iterator();Set originalItemSet = null;while(it.hasNext() originalItemSet = it.next();I
25、teratorSet itr = this.getIterator(originalItemSet, freqMItemSet);while(itr.hasNext() Set identicalSet = new HashSet(); / 兩個項集相同元素的集合(集合的交運算)identicalSet.addAll(originalItemSet);Set set = itr.next();identicalSet.retainAll(set); / identicalSet中剩下的元素是identicalSet與set集合中公有的元素if(identicalSet.size() = m-1
26、) / (k-1)-項集中k-2個相同Set differentSet = new HashSet(); / 兩個項集不同元素的集合(集合的差運算)differentSet.addAll(originalItemSet);differentSet.removeAll(set); / 因為有k-2個相同,則differentSet中一定剩下一個元素,即differentSet大小為1differentSet.addAll(set); / 構(gòu)造候選k-項集的一個元素(set大小為k-1,differentSet大小為k)candFreqKItemSet.add(differentSet); / 加
27、入候選k-項集集合return candFreqKItemSet;private IteratorSet getIterator(Set itemSet, SetSet freqKItemSet) IteratorSet it = freqKItemSet.iterator();while(it.hasNext() if(itemSet.equals(it.next() break;return it;public MapSet, Float getFreqKItemSet(int k, SetSet freqMItemSet) MapSet, Integer candFreqKItemSet
28、Map = new HashMapSet, Integer();/ 調(diào)用aprioriGen方法,得到候選頻繁k-項集SetSet candFreqKItemSet = this.aprioriGen(k-1, freqMItemSet);/ 掃描事務(wù)數(shù)據(jù)庫IteratorMap.EntryInteger, Set it = txDatabase.entrySet().iterator();/ 統(tǒng)計支持數(shù)while(it.hasNext() Map.EntryInteger, Set entry = it.next();IteratorSet kit = candFreqKItemSet.it
29、erator();while(kit.hasNext() Set kSet = kit.next();Set set = new HashSet();set.addAll(kSet);set.removeAll(entry.getValue(); / 候選頻繁k-項集與事務(wù)數(shù)據(jù)庫中元素做差元算if(set.isEmpty() / 如果拷貝set為空,支持數(shù)加1if(candFreqKItemSetMap.get(kSet) = null) Integer value = 1;candFreqKItemSetMap.put(kSet, value);else Integer value = 1+
30、candFreqKItemSetMap.get(kSet);candFreqKItemSetMap.put(kSet, value);/ 計算支持度,生成頻繁k-項集,并返回return support(candFreqKItemSetMap);public MapSet, Float support(MapSet, Integer candFreqKItemSetMap) MapSet, Float freqKItemSetMap = new HashMapSet, Float();IteratorMap.EntrySet, Integer it = candFreqKItemSetMap.
31、entrySet().iterator();while(it.hasNext() Map.EntrySet, Integer entry = it.next();/ 計算支持度Float supportRate = new Float(entry.getValue().toString()/new Float(txDatabaseCount);if(supportRateminSup) / 如果不滿足最小支持度,刪除it.remove();else freqKItemSetMap.put(entry.getKey(), supportRate);return freqKItemSetMap;p
32、ublic void mineFreqItemSet() / 計算頻繁1-項集SetSet freqKItemSet = this.getFreq1ItemSet().keySet();freqItemSet.put(1, freqKItemSet);/ 計算頻繁k-項集(k1)int k = 2;while(true) MapSet, Float freqKItemSetMap = this.getFreqKItemSet(k, freqKItemSet);if(!freqKItemSetMap.isEmpty() this.freqItemSet.put(k, freqKItemSetMa
33、p.keySet();freqKItemSet = freqKItemSetMap.keySet();else break;k+;public void mineAssociationRules() freqItemSet.remove(1); / 刪除頻繁1-項集IteratorMap.EntryInteger, SetSet it = freqItemSet.entrySet().iterator();while(it.hasNext() Map.EntryInteger, SetSet entry = it.next();for(Set itemSet : entry.getValue(
34、) / 對每個頻繁項集進行關(guān)聯(lián)規(guī)則的挖掘mine(itemSet);public void mine(Set itemSet) int n = itemSet.size()/2; / 根據(jù)集合的對稱性,只需要得到一半的真子集for(int i=1; i=n; i+) / 得到頻繁項集元素itemSet的作為條件的真子集集合SetSet properSubset = ProperSubsetCombination.getProperSubset(i, itemSet);/ 對條件的真子集集合中的每個條件項集,獲取到對應(yīng)的結(jié)論項集,從而進一步挖掘頻繁關(guān)聯(lián)規(guī)則for(Set conditionSet
35、 : properSubset) Set conclusionSet = new HashSet();conclusionSet.addAll(itemSet);conclusionSet.removeAll(conditionSet); / 刪除條件中存在的頻繁項confide(conditionSet, conclusionSet); / 調(diào)用計算置信度的方法,并且挖掘出頻繁關(guān)聯(lián)規(guī)則public void confide(Set conditionSet, Set conclusionSet) / 掃描事務(wù)數(shù)據(jù)庫IteratorMap.EntryInteger, Set it = txDa
36、tabase.entrySet().iterator();/ 統(tǒng)計關(guān)聯(lián)規(guī)則支持計數(shù)int conditionToConclusionCnt= 0; / 關(guān)聯(lián)規(guī)則(條件項集推出結(jié)論項集)計數(shù)int conclusionToConditionCnt= 0; / 關(guān)聯(lián)規(guī)則(結(jié)論項集推出條件項集)計數(shù)int supCnt = 0; / 關(guān)聯(lián)規(guī)則支持計數(shù)while(it.hasNext() Map.EntryInteger, Set entry = it.next();Set txSet = entry.getValue();Set set1 = new HashSet();Set set2 = new
37、 HashSet();set1.addAll(conditionSet);set1.removeAll(txSet); / 集合差運算:set-txSetif(set1.isEmpty() / 如果set為空,說明事務(wù)數(shù)據(jù)庫中包含條件頻繁項conditionSet/ 計數(shù)conditionToConclusionCnt+;set2.addAll(conclusionSet);set2.removeAll(txSet); / 集合差運算:set-txSetif(set2.isEmpty() / 如果set為空,說明事務(wù)數(shù)據(jù)庫中包含結(jié)論頻繁項conclusionSet/ 計數(shù)conclusionT
38、oConditionCnt+;if(set1.isEmpty() & set2.isEmpty() supCnt+;/ 計算置信度Float conditionToConclusionConf = new Float(supCnt)/new Float(conditionToConclusionCnt);if(conditionToConclusionConf=minConf) if(assiciationRules.get(conditionSet) = null) / 如果不存在以該條件頻繁項集為條件的關(guān)聯(lián)規(guī)則SetSet conclusionSetSet = new HashSetSet
39、();conclusionSetSet.add(conclusionSet);assiciationRules.put(conditionSet, conclusionSetSet);else assiciationRules.get(conditionSet).add(conclusionSet);Float conclusionToConditionConf = new Float(supCnt)/new Float(conclusionToConditionCnt);if(conclusionToConditionConf=minConf) if(assiciationRules.get
40、(conclusionSet) = null) / 如果不存在以該結(jié)論頻繁項集為條件的關(guān)聯(lián)規(guī)則SetSet conclusionSetSet = new HashSetSet();conclusionSetSet.add(conditionSet);assiciationRules.put(conclusionSet, conclusionSetSet);else assiciationRules.get(conclusionSet).add(conditionSet);public MapInteger, SetSet getFreqItemSet() return freqItemSet;
41、public MapSet, SetSet getAssiciationRules() return assiciationRules;(二)輔助類ProperSubsetCombination類是一個輔助類,在挖掘頻繁關(guān)聯(lián)規(guī)則的過程中,用于生成一個頻繁項集元素的非空真子集,實現(xiàn)代碼如下:package org.shirdrn.datamining.association;import java.util.BitSet;import java.util.HashSet;import java.util.Set;public class ProperSubsetCombination priva
42、te static String array;private static BitSet startBitSet; / 比特集合起始狀態(tài)private static BitSet endBitSet; / 比特集合終止?fàn)顟B(tài),用來控制循環(huán)private static SetSet properSubset; / 真子集集合public static SetSet getProperSubset(int n, Set itemSet) String array = new StringitemSet.size();ProperSubsetCombination.array = itemSet.to
43、Array(array);properSubset = new HashSetSet();startBitSet = new BitSet();endBitSet = new BitSet();/ 初始化startBitSet,左側(cè)占滿1for (int i=0; i=array.length-n; i-) endBitSet.set(i, true);/ 根據(jù)起始startBitSet,將一個組合加入到真子集集合中g(shù)et(startBitSet);while(!startBitSet.equals(endBitSet) int zeroCount = 0; / 統(tǒng)計遇到10后,左邊0的個數(shù)i
44、nt oneCount = 0; / 統(tǒng)計遇到10后,左邊1的個數(shù)int pos = 0; / 記錄當(dāng)前遇到10的索引位置/ 遍歷startBitSet來確定10出現(xiàn)的位置for (int i=0; i1 & counter0) pos-;endIndex = pos;for (int i=0; i0) endIndex = pos;get(startBitSet);return properSubset;private static void get(BitSet bitSet) Set set = new HashSet();for(int i=0; iarray.length; i+)
45、if(bitSet.get(i) set.add(arrayi);properSubset.add(set);測試用例對上述Apriori算法的實現(xiàn)進行了簡單的測試,測試用例如下所示:package org.shirdrn.datamining.association;import java.util.HashMap;import java.util.Map;import java.util.Set;import java.util.TreeSet;import org.shirdrn.datamining.association.AprioriAlgorithm;import junit.f
46、ramework.TestCase;public class TestAprioriAlgorithm extends TestCase private AprioriAlgorithm apriori;private MapInteger, Set txDatabase;private Float minSup = new Float(0.50);private Float minConf = new Float(0.70);Overrideprotected void setUp() throws Exception create(); / 構(gòu)造事務(wù)數(shù)據(jù)庫apriori = new AprioriAlgorithm(txDatabase, minSup, minConf);public void create() txDatabase = new HashMapInteger, Set();Set set1 = new TreeSet();set1.add(A);set1.add(B);set1.add(C);set1.add(E);txDatabase.put
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025中國電信股份限公司保山分公司(保山電信)招聘16人(云南)高頻重點提升(共500題)附帶答案詳解
- 2025中國電信國際限公司校園招聘高頻重點提升(共500題)附帶答案詳解
- 2025中國儲備糧管理集團限公司招聘700人高頻重點提升(共500題)附帶答案詳解
- 2025下半年貴州省六盤水市事業(yè)單位及國企業(yè)招聘應(yīng)征入伍大學(xué)畢業(yè)生164人高頻重點提升(共500題)附帶答案詳解
- 2025下半年湖南岳陽市城市建設(shè)投資集團限公司招聘15人高頻重點提升(共500題)附帶答案詳解
- 2025下半年浙江溫州市甌海區(qū)事業(yè)單位招聘工作人員23人高頻重點提升(共500題)附帶答案詳解
- 2025下半年四川綿陽平武縣招聘事業(yè)單位專業(yè)技術(shù)人員6人歷年高頻重點提升(共500題)附帶答案詳解
- 2025下半年四川省瀘州瀘縣事業(yè)單位招聘95人歷年高頻重點提升(共500題)附帶答案詳解
- 2025下半年四川巴中南江縣事業(yè)單位考試招聘72人高頻重點提升(共500題)附帶答案詳解
- 2025上海煙草集團招聘高頻重點提升(共500題)附帶答案詳解
- 最新營銷中心物業(yè)服務(wù)可視化操作指引說明詳解新實用手冊
- 食材配送投標(biāo)服務(wù)方案
- 醫(yī)療醫(yī)學(xué)醫(yī)生護士工作PPT模板
- 排污許可證守法承諾書(2篇)
- 矩形頂管施工方案28
- 液壓轉(zhuǎn)向器廠總平面布置課程設(shè)計
- 說明性語段的壓縮(課堂PPT)
- 造紙化學(xué)品及其應(yīng)用
- GB_T 13234-2018 用能單位節(jié)能量計算方法(高清正版)
- 裝配式鋼板筒倉安裝技術(shù)經(jīng)驗規(guī)程
- 拔除智齒病歷1頁
評論
0/150
提交評論