我試圖找到給定數據的頻繁項目集。在這種情況下,如果一個年齡段的人結婚或不結婚,這就是汽車數量的一個簡單例子。關於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?
我希望我能解釋清楚我的問題......
謝謝您的幫助!
請注意,minsupport 1是無用的。在實施Apriori時,請確保您瞭解所有的算法思想(減少可用數量;僅在每個項目集大小一次掃描數據)。看起來你還沒有理解Apriori-Gen。 –