Algorytm DIC Dynamic Itemset Counting Magdalena Przygórzewska Karolina Stanisławska Aleksander Wieczorek
Spis treści 1 2 3 4
Algorytm DIC jako rozszerzenie apriori DIC Algorytm znajdowania reguł asocjacyjnych Dynamic Itemset Counting (DIC) stanowi modyfikację algorytmu apriori, polegającą na rozpoczynaniu zliczania zbiorów częstych (n + 1)-elementowych przed zakończeniem zliczania zbiorów n-elementowych DIC W ten sposób możliwe jest szybsze rozpoczęcie (a zarazem zakończenie) zliczania większych zbiorów częstych.
Algorytm DIC jako rozszerzenie apriori DIC Algorytm znajdowania reguł asocjacyjnych Dynamic Itemset Counting (DIC) stanowi modyfikację algorytmu apriori, polegającą na rozpoczynaniu zliczania zbiorów częstych (n + 1)-elementowych przed zakończeniem zliczania zbiorów n-elementowych DIC W ten sposób możliwe jest szybsze rozpoczęcie (a zarazem zakończenie) zliczania większych zbiorów częstych.
Fazy algorytmu Algorytm DIC, podobnie jak apriori, przebiega w dwóch fazach: Faza wyszukiwania zbiorów częstych Faza ta stanowi o różnicy w stosunku do apriori. W algorytmie DIC wprowadza się dodatkowy parametr M, oznaczający liczbę transakcji, po których rozpoczyna się zliczanie zbiorów częstych o większej mocy. Faza generowania reguł asocjacyjnych Faza ta jest identyczna z odpowiednią fazą algorytmu apriori. Dla każdego zbioru częstego L o mocy większej od 1 sprawdza się wszystkie jego podzbiory sl a następnie w oparciu o dane o wsparciu zbiorów L oraz sl oblicza się ufność reguły sl (L sl). Jeśli ufność ta przekracza zadany próg, regułę dopisuje się do znalezionych reguł.
Fazy algorytmu Algorytm DIC, podobnie jak apriori, przebiega w dwóch fazach: Faza wyszukiwania zbiorów częstych Faza ta stanowi o różnicy w stosunku do apriori. W algorytmie DIC wprowadza się dodatkowy parametr M, oznaczający liczbę transakcji, po których rozpoczyna się zliczanie zbiorów częstych o większej mocy. Faza generowania reguł asocjacyjnych Faza ta jest identyczna z odpowiednią fazą algorytmu apriori. Dla każdego zbioru częstego L o mocy większej od 1 sprawdza się wszystkie jego podzbiory sl a następnie w oparciu o dane o wsparciu zbiorów L oraz sl oblicza się ufność reguły sl (L sl). Jeśli ufność ta przekracza zadany próg, regułę dopisuje się do znalezionych reguł.
Faza wyszukiwania zbiorów częstych Identyfikatory zbiorów Każdy ze zliczanych zbiorów ma przyporządkowany identyfikator, w zależności od tego, czy jest zbiorem częstym (zielony) czy nie (czerwony) oraz czy jego zliczanie zostało już zakończone (podkreślony). Identyfikatory zbiorów W momencie rozpoczęcia zliczania danego zbioru, jest on zbiorem czerwonym (potencjalnym zbiorem nieczęstym). Po każdym M-transakcyjnym etapie może zmienić kolor na zielony, o ile jego wsparcie przekroczyło minimalny próg wsparcia. Po zliczeniu danego zbioru przez wszystkie transakcje, jego identyfikator jest podkreślany i jego zliczanie jest kończone.
Faza wyszukiwania zbiorów częstych Identyfikatory zbiorów Każdy ze zliczanych zbiorów ma przyporządkowany identyfikator, w zależności od tego, czy jest zbiorem częstym (zielony) czy nie (czerwony) oraz czy jego zliczanie zostało już zakończone (podkreślony). Identyfikatory zbiorów W momencie rozpoczęcia zliczania danego zbioru, jest on zbiorem czerwonym (potencjalnym zbiorem nieczęstym). Po każdym M-transakcyjnym etapie może zmienić kolor na zielony, o ile jego wsparcie przekroczyło minimalny próg wsparcia. Po zliczeniu danego zbioru przez wszystkie transakcje, jego identyfikator jest podkreślany i jego zliczanie jest kończone.
Zakończenie algorytmu Po każdym M-transakcyjnym etapie sprawdza się, czy któryś ze zbiorów zamienionych na zielone ma nadzbiór, którego wszystkie bezpośrednie podzbiory są zielone. W takim przypadku nadzbiór ten dodaje się do drzewa zbiorów, nadaje się mu identyfikator czerwony i rozpoczyna jego zliczanie. Algorytm kończy się, gdy wszystkie zbiory w drzewie mają identyfikatory podkreślone (tzn. zakończono ich zliczanie).
Pseudokod Fazę wyszukiwania zbiorów częstych w algorytmie DIC można więc streścić następujaco: 1 Zbiór pusty jest zielony. Zbiory jednoelementowe są czerwone. 2 Przeczytaj M transakcji i inkrementuj liczniki zbiorów oznaczonych jako czerwone. 3 Jeśli jakiś czerwony zbiór przekroczył próg minimalnego wsparcia, zmień jego kolor na zielony. 4 Sprawdź, czy któryś ze zbiorów zamienionych na zielone ma nadzbiór, którego wszystkie bezpośrednie podzbiory są zielone. Jesli tak, dodaj go do drzewa zbiorów nadając mu identyfikator czerwony. 5 Jeśli jakiś zbiór został policzony przez wszystkie transakcje, podkreśl go. 6 Jeśli zostały zbiory niepodkreśline, przejdź do punktu 2.
Pseudokod Fazę wyszukiwania zbiorów częstych w algorytmie DIC można więc streścić następujaco: 1 Zbiór pusty jest zielony. Zbiory jednoelementowe są czerwone. 2 Przeczytaj M transakcji i inkrementuj liczniki zbiorów oznaczonych jako czerwone. 3 Jeśli jakiś czerwony zbiór przekroczył próg minimalnego wsparcia, zmień jego kolor na zielony. 4 Sprawdź, czy któryś ze zbiorów zamienionych na zielone ma nadzbiór, którego wszystkie bezpośrednie podzbiory są zielone. Jesli tak, dodaj go do drzewa zbiorów nadając mu identyfikator czerwony. 5 Jeśli jakiś zbiór został policzony przez wszystkie transakcje, podkreśl go. 6 Jeśli zostały zbiory niepodkreśline, przejdź do punktu 2.
Pseudokod Fazę wyszukiwania zbiorów częstych w algorytmie DIC można więc streścić następujaco: 1 Zbiór pusty jest zielony. Zbiory jednoelementowe są czerwone. 2 Przeczytaj M transakcji i inkrementuj liczniki zbiorów oznaczonych jako czerwone. 3 Jeśli jakiś czerwony zbiór przekroczył próg minimalnego wsparcia, zmień jego kolor na zielony. 4 Sprawdź, czy któryś ze zbiorów zamienionych na zielone ma nadzbiór, którego wszystkie bezpośrednie podzbiory są zielone. Jesli tak, dodaj go do drzewa zbiorów nadając mu identyfikator czerwony. 5 Jeśli jakiś zbiór został policzony przez wszystkie transakcje, podkreśl go. 6 Jeśli zostały zbiory niepodkreśline, przejdź do punktu 2.
Pseudokod Fazę wyszukiwania zbiorów częstych w algorytmie DIC można więc streścić następujaco: 1 Zbiór pusty jest zielony. Zbiory jednoelementowe są czerwone. 2 Przeczytaj M transakcji i inkrementuj liczniki zbiorów oznaczonych jako czerwone. 3 Jeśli jakiś czerwony zbiór przekroczył próg minimalnego wsparcia, zmień jego kolor na zielony. 4 Sprawdź, czy któryś ze zbiorów zamienionych na zielone ma nadzbiór, którego wszystkie bezpośrednie podzbiory są zielone. Jesli tak, dodaj go do drzewa zbiorów nadając mu identyfikator czerwony. 5 Jeśli jakiś zbiór został policzony przez wszystkie transakcje, podkreśl go. 6 Jeśli zostały zbiory niepodkreśline, przejdź do punktu 2.
Pseudokod Fazę wyszukiwania zbiorów częstych w algorytmie DIC można więc streścić następujaco: 1 Zbiór pusty jest zielony. Zbiory jednoelementowe są czerwone. 2 Przeczytaj M transakcji i inkrementuj liczniki zbiorów oznaczonych jako czerwone. 3 Jeśli jakiś czerwony zbiór przekroczył próg minimalnego wsparcia, zmień jego kolor na zielony. 4 Sprawdź, czy któryś ze zbiorów zamienionych na zielone ma nadzbiór, którego wszystkie bezpośrednie podzbiory są zielone. Jesli tak, dodaj go do drzewa zbiorów nadając mu identyfikator czerwony. 5 Jeśli jakiś zbiór został policzony przez wszystkie transakcje, podkreśl go. 6 Jeśli zostały zbiory niepodkreśline, przejdź do punktu 2.
Pseudokod Fazę wyszukiwania zbiorów częstych w algorytmie DIC można więc streścić następujaco: 1 Zbiór pusty jest zielony. Zbiory jednoelementowe są czerwone. 2 Przeczytaj M transakcji i inkrementuj liczniki zbiorów oznaczonych jako czerwone. 3 Jeśli jakiś czerwony zbiór przekroczył próg minimalnego wsparcia, zmień jego kolor na zielony. 4 Sprawdź, czy któryś ze zbiorów zamienionych na zielone ma nadzbiór, którego wszystkie bezpośrednie podzbiory są zielone. Jesli tak, dodaj go do drzewa zbiorów nadając mu identyfikator czerwony. 5 Jeśli jakiś zbiór został policzony przez wszystkie transakcje, podkreśl go. 6 Jeśli zostały zbiory niepodkreśline, przejdź do punktu 2.
Drzewo Trie Zgodnie z sugestią autorów artykułu, do reprezentacji kraty podzbiorów zbioru wszystkich elementów zastosowano drzewo trie. Drzewo Trie Każdy zbiór jest w nim reprezentowany przez wierzchołek drzewa Drzewo Trie Każdy zbiór (posortowany według elementów) jest w nim reprezentowany przez wierzchołek drzewa Wierzchołek drzewa reprezentuje zbiór złożony z elementów znajdujących się na ścieżce prowadzącej od korzenia do tego wierzchołka.
Drzewo Trie Zgodnie z sugestią autorów artykułu, do reprezentacji kraty podzbiorów zbioru wszystkich elementów zastosowano drzewo trie. Drzewo Trie Każdy zbiór jest w nim reprezentowany przez wierzchołek drzewa Drzewo Trie Każdy zbiór (posortowany według elementów) jest w nim reprezentowany przez wierzchołek drzewa Wierzchołek drzewa reprezentuje zbiór złożony z elementów znajdujących się na ścieżce prowadzącej od korzenia do tego wierzchołka.
Do implementacji wykorzystano język C++ (kompilacja za pomocą g++ 3.4.5) oraz bibliotekę standardową STL. Do zaimplementowania drzewa Trie zastosowano bibliotekę STL, oraz strukturę std::set (zbiór), ze względu na możliwość łatwej iteracji po elementach zbioru (reprezentujących dzieci) oraz logarytmiczny czas dostępu do elementu o żądanym kluczu.
Dynamic Itemset Counting and Implication Rules for Market Basket Data, S, Brin, R. Motwani, J. D. Ullman, S. Tsur