2013-09-01 103 views
0

我試圖找到給定數據的頻繁項目集。在這種情況下,如果一個年齡段的人結婚或不結婚,這就是汽車數量的一個簡單例子。關於Apriori算法

的1項集和2-項目集的設置如下:

---Freq. 1-itemsets---> 9 times! 
[ 
(1) [age:[20,24]] 
(2) [age:[25,29]] 
(1) [age:[30,34]] 
(1) [age:[35,39]] 
(2) [married:[no]] 
(3) [married:[yes]] 
(1) [num_cars:[0,0]] 
(2) [num_cars:[1,1]] 
(2) [num_cars:[2,2]] 
] 

---Freq. 2-itemsets---> 14 times! 
[ 
(1) [age:[20,24],married:[no]] 
(1) [age:[20,24],num_cars:[1,1]] 
(1) [age:[25,29],married:[no]] 
(1) [age:[25,29],married:[yes]] 
(1) [age:[25,29],num_cars:[0,0]] 
(1) [age:[25,29],num_cars:[1,1]] 
(1) [age:[30,34],married:[yes]] 
(1) [age:[30,34],num_cars:[2,2]] 
(1) [age:[35,39],married:[yes]] 
(1) [age:[35,39],num_cars:[2,2]] 
(1) [married:[no],num_cars:[0,0]] 
(1) [married:[no],num_cars:[1,1]] 
(1) [married:[yes],num_cars:[1,1]] 
(2) [married:[yes],num_cars:[2,2]] 
] 

(不要在意在括號中的數字,它只是頻繁項集這個的;在這種 鑑於min_support例如是0.1)

現在我想獲得頻率。來自頻率的3個項目集。 2,項目集。 在這種情況下,我可以結合兩個頻率。 2項目集,whos交集有一個元素。現在我必須檢查這個組合的所有子集(大小爲2)是否爲頻率元素。 2,項目集。

如果我這樣做,我得到如下:

---Freq. 3-itemsets---> 6 times! 
[ 
(1) [age:[20,24],married:[no],num_cars:[1,1]] 
(1) [age:[25,29],married:[no],num_cars:[0,0]] 
(0) [age:[25,29],married:[no],num_cars:[1,1]] 
(1) [age:[25,29],married:[yes],num_cars:[1,1]] 
(1) [age:[30,34],married:[yes],num_cars:[2,2]] 
(1) [age:[35,39],married:[yes],num_cars:[2,2]] 
] 

但是現在,你可以看到,我得到一個頻率。 3-itemset,其頻率爲0.因此它不應該在freq的集合中。 3項集。

如果我讓這個例子從例如Weka(http://www.cs.waikato.ac.nz/ml/weka/),所述項目集不會出現在結果中。

但是我可以從 {age:[25,29],已婚:[no]}和{已婚:[no],num_cars:[1,1]}合併生成。

所以我的問題是:

我是否犯了一個錯誤在生成頻繁項集(我的程序構建上述這個)或我只是如果子集是頻率的元素,首先過濾產生的候選人。 2項目和之後,如果頻繁是超過0?

我希望我能解釋清楚我的問題......

謝謝您的幫助!

+0

請注意,minsupport 1是無用的。在實施Apriori時,請確保您瞭解所有的算法思想(減少可用數量;僅在每個項目集大小一次掃描數據)。看起來你還沒有理解Apriori-Gen。 –

回答

0

對於基數k頻繁的項集,有必要但是對於其所有(k-1)元素子集都是頻繁的並不是足夠的。在通過組合(k-1)元素項目集並檢查子集生成候選k元素項目集之後,您需要再次掃描數據並丟棄並非真正頻繁的候選項。

+0

你是對的!感謝名單! – mrbela