FP-Growth Adam Pieśkiewicz Kamil Niezręcki Krzysztof Grześkowiak Michał Kucal 9.11.2010
Plan prezentacji 1. Zasada działania algorytmu 2. Implementacja 3. Wyniki 4. Podsumowanie
Zasada działania algorytmu 1. Odkrywanie zbiorów częstych a) Utworzenie FP-drzewa na podstawie skompresowanej bazy danych b) Znalezienie zbiorów częstych w procesie eksploracji FP-drzewa 2. Generacja reguł asocjacyjnych
Kompresja bazy danych 1. Znalezienie jednoelementowych zbiorów częstych w bazie danych 2. Usunięcie z każdej transakcji tych elementów, które nie są częste 3. Posortowanie elementów transakcji malejąco wg wsparcia
FP-drzewo - ukorzeniony, etykietowany w wierzchołkach graf acykliczny - korzeń – etykieta „null”, pozostałe wierzchołki to jednoelementowe zbiory częste wraz z licznikiem transakcji - tworzenie: wstawianie kolejnych transakcji ze skompresowanej bazy, przy czym jeśli transakcje współdzielą prefiks, następuje zwiększenie licznika transakcji w węzłach; w przeciwnym wypadku – dodawanie nowych węzłów Licznik transakcji ostatniego wierzchołka danej ścieżki zawiera informacje o liczbie transakcji wspierających zbiór elementów reprezentowanych przez wierzchołki grafu należące do tej ścieżki.
Przykład FP-drzewa
Eksploracja FP-drzewa FP-Growth(T, α) { //α = null at beginning if T contains a single path P then { for each combination β of nodes in path P generate pattern β + α with support = min(supports of all the nodes in β); } else { for each ai in the hTable of T { generate pattern β = ai + α with support = sup(ai); construct β's conditional pattern base and use it to build β's conditional FP-tree Treeβ; if Treeβ ≠ ø then FP-Growth(Treeβ, β); Obserwacja: dla każdego jednoelementowego zbioru częstego alfa, wszystkie częste nadzbiory zbioru alfa są reprezentowane w FP-drzewie przez ścieżki zawierające wierzchołek alfa.
Generacja reguł for each frequent pattern f with power > 1 { generate all nonempty and proper subsets of f; for each generated subset s of f { if sup(f) / sup(s) >= minconf output the rule ”s -> (f \ s)” }
Środowisko Język Java (JDK 1.6 update 19) Visual VM
Implementacja (1) 1. Klasa reprezentująca węzeł FP-drzewa (FPTreeNode): - wartość elementu - licznik transakcji - referencja do węzła – rodzica - lista referencji do węzłów potomnych 2. Mapa reprezentująca tablicę nagłówkową FP-drzewa: - klucz – wartość elementu transakcji - wartość – obiekt klasy HeaderTableRow (support, lista referencji do węzłów reprezentujących ten sam jednoelementowy zbiór częsty w FP-drzewie) - posortowana malejąco wg wsparcia
Implementacja (2) 3. Klasa reprezentująca transakcję (Transaction): - licznik transakcji – przydatny przy konstrukcji warunkowej bazy wzorca i tablicy nagłówkowej warunkowego FP-drzewa; pomaga przy obliczaniu wsparcia dla elementów transakcji w warunkowej bazie wzorca i przy kompresji tej bazy - lista elementów transakcji, po kompresji posortowana malejąco wg wsparcia; jeśli wartości wsparcia są równe, sortowanie ma miejsce wg wartości elementów (mniejsza liczba ścieżej w FP-drzewie)
Implementacja (3) 4. Klasa reprezentująca zbiór częsty (FrequentPattern): - wsparcie (przydatne przy obliczaniu wsparcia poprzednika reguły) - lista elementów
Pomiar czasu (mushroom)
Pomiar zajętości pamięci (mushroom)
Podsumowanie - wpływ na szybkość działania całego programu mają operacje wejścia – wyjścia, sama procedura szukania zbiorów częstych działa bardzo krótko - wraz ze wzrostem minimalnego wsparcia maleje czas działania, jak i zajętość pamięci (większy stopień kompresji transakcji, mniej zbiorów częstych) - zwiększenie ścieżki w FP-drzewie zwiększa liczbę generowanych zbiorów częstych - zwiększenie mocy zbioru częstego zwiększa liczbę generowanych reguł
Bibliografia 1. „FP-Growth approach for document clustering”, M. Akbar (praca magisterska) 2. „Algorytmy odkrywania binarnych reguł asocjacyjnych” (http://wazniak.mimuw.edu.pl, wykład 3. przedmiotu „Eksploracja danych”) 3. „FP-tree”, O. Kohonen (wykład)
Dziękujemy za uwagę