Mineração de Dados Algoritmo APRIORI Felipe Carvalho – UFES 2009/2 Uma base de dados transacional • Para melhor compreensão do funcionamento do algoritmo APRIORI, considere D a base de dados transacionais apresentada abaixo: Algoritmo APRIORI • O primeiro passo é gerar a lista de candidatos de conjuntos de itens de tamanho 1, denotada por C1, e levantar a freqüência de cada um em D: • Considerando um limite mínimo de freqüência igual a 2, obtemos a lista de conjuntos de itens freqüentes de tamanho 1, denotada por L1: Algoritmo APRIORI • O próximo passo é obter todos os conjuntos candidatos de tamanho 2, C2, a partir de combinações de elementos de L1, e suas respectivas freqüências em D: Algoritmo APRIORI • Filtrando novamente pelo limite mínimo de freqüência (definido como 2), obtemos a lista de conjuntos de itens freqüentes de tamanho 2, denotada por L2: • Procedendo da mesma forma, podemos combinar os elementos de L2 para obtermos todos os conjuntos candidatos possíveis de tamanho 3, C3: Algoritmo APRIORI • Para mostrarmos como a propriedade Apriori pode ajudar a reduzir o esforço computacional do algoritmo, vamos usar os elementos C3. Segundo esta propriedade, todo subconjunto não vazio de um conjunto de itens freqüentes também dever ser freqüente; • então, se decompormos todos os elementos de C3 em conjuntos de tamanho 2, podemos verificar quais deles pertencem a L2, i.e., são freqüentes. Claramente, se um dos elementos de C3 possuir um subconjunto que não consta em L2, esse elemento não pode ser freqüente. Aplicação dessa propriedade em C3 é apresentada no próximo slide. Algoritmo APRIORI • Como podemos ver, de acordo com a propriedade Apriori, os últimos quatro elementos de C3 não podem ser freqüentes, pois possuem subconjuntos que não pertencem a L2. Temos agora que verificar quais dos conjuntos candidatos que restaram são realmente freqüentes. • Como para cada um deles é necessário verificar todas as transações em D para descobrir sua freqüência, o uso da propriedade Apriori nos poupou de quatro verificações, usando apenas conhecimento prévio. Algoritmo APRIORI • Apenas para termos certeza de que a propriedade Apriori realmente não elimina conjuntos freqüentes, podemos levantar a freqüência de cada um dos elementos de C3: • Obtemos assim os conjuntos freqüentes de tamanho 3, L3: Algoritmo APRIORI • A combinação dos elementos de L3 resultaria apenas no conjunto {i1, i2, i3, i5}, que possui subconjuntos não freqüentes (e.g., {i1, i3, i5} e {i2, i3, i5}). Isto significa que não existem conjuntos maiores freqüentes. Chegamos, então, ao final da execução do algoritmo, e descobrimos todos os conjuntos freqüentes possíveis: • Para gerar regras de associação a partir do resultado do algoritmo APRIORI, basta analisar a implicação entre os elementos dessa lista, conforme discutimos na Seção 3.2. (Quadro Cognitivo: http://mineracaodedados.pbworks.com). Usando medidas de interesse como cobertura e precisão, conseguimos separar as regras fortes. Algoritmo – Formalmente Definido • • • • • • APRIORI(D, freq_min) { L1 = {todos os itens freqüentes em D de tamanho 1}; Para (k = 2 ; Lk-1 <> vazio; k++) { – Ck = {candidatos gerados pela combinação dos elementos de Lk-1}; – Para cada elemento E de Ck { • Para cada subconjunto S de E { – Se S <> Lk-1 então Ck = Ck – E; • }; – }; – Para cada transação T de D { • Para cada elemento E de Ck { – Se E está contido em T então freq(E) = freq(E) + 1; • }; – }; – Para cada elemento E de Ck { • Se freq(E) > freq_min então Lk = Lk + E; – }; }; retornar UkLk; };