2013-09-01 2 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-itemsets, пересечение 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-элементный набор, который имеет частоту 0. Таким образом, он не должен находиться в наборе частот. 3-х наборов.

Если я могу вычислить этот пример, например, Weka (http://www.cs.waikato.ac.nz/ml/weka/), указанный набор предметов не отображается в результатах.

Но я могу сгенерировать его из объединения {age: [25,29], женат: [нет]} и {женат: [нет], num_cars: [1,1]}.

Так что мой вопрос:

ли я сделать ошибку при генерации часто встречающихся наборов (что моя программа строит эту выше) или у меня просто фильтровать сгенерированные кандидат первым, если подмножество элементы частоты , 2-предметов, а после этого, если частые больше 0 ???

Я надеюсь, что я мог бы объяснить мою проблему четко ...

Спасибо за вашу помощь !!

+0

Обратите внимание, что minsupport 1 бесполезна. При внедрении Apriori убедитесь, что вы понимаете все алгоритмические идеи (уменьшая количество конфессий, проверяя данные только в один раз за каждый размер набора элементов). Похоже, вы не поняли Apriori-Gen. –

ответ

0

Для того чтобы набор элементов мощности был частым, необходимо, чтобы не был достаточным для всех его (k-1) -элементных подмножеств. После того, как вы создадите кэш-элементы кандидатов k-element, объединив (k-1) -элементные элементы и проверив подмножества, вам нужно снова отсканировать данные и выбросить кандидатов, которые не очень часты.

+0

Вы правы! Thanx !! – mrbela