background image

Tworzenie reguł asocjacyjnych – podstawy

Przygotowanie studentów

Studenci powinni być przygotowani z następujących zagadnień

reguły asocjacyjne

interpretacja reguł asocjacyjnych

miary reguł asocjacyjnych

wyszukiwanie reguł asocjacyjnych

zastosowanie reguł asocjacyjnych

zbiory częste (large itemsets)

Do wykonania ćwiczenia konieczna jest podstawowa umiejętność programowania w języku Java.

Instrukcja dla studentów

Rozdziały „Budowa prostego modelu” oraz „Wykorzystanie reguł asocjacyjnych” opisują szczegóły 
budowy oraz wykorzystania modelu reguł asocjacyjnych przy pomocy biblioteki Xelopes. Do wykonania 
ćwiczenia należy wykorzystać dostarczony przez prowadzącego szkielet projektu aplikacji oraz szkielety 
odpowiednich klas. 
Wszystkie pliki źródłowe wykorzystywane podczas ćwiczenia zapisane są w podkatalogu src katalogu 
zawierającego projekt. Szkielety kolejnych klas znajdują się w pakiecie: 
pl.edu.prz.kia.eksploracja. 
Aby uruchomić kod właściwej klasy należy we właściwościach projektu ustawić ją jako klasę główną 
(Main Class). Aby to zrobić należy na liście projektów kliknąć prawym klawiszem na nazwie 
projektu, wybrać: Properties >  Run, następnie obok Main Class kliknąć Browse i wybrać z 
listy właściwą klasę.
Poniżej znajdują się kolejne zadania które należy wykonać w ramach ćwiczenia.
I. Budowa modelu reguł asocjacyjnych

1. Na podstawie opisu w rozdziale „Budowa prostego modelu” oraz szkieletu klasy 

AssociationRulesBuild utwórz aplikację służącą do budowania prostego modelu reguł 
asocjacyjnych na podstawie danych z pliku:  data/arff/transact.arff.

2. Modyfikując parametry support i confidence zaobserwuj zmiany ilości generowanych reguł 

asocjacyjnych. 

3. Obejrzyj zawartość pliku danych  data/arff/transact.arff oraz pliku wynikowego 

data/pmml/AssociationRulesModel.xml

4. Zmodyfikuj  aplikację tak, żeby reguły asocjacyjne zawierały nazwy produktów a nie ich 

identyfikatory (numery).

Eksploracja danych – laboratorium

1

background image

II. Wykorzystanie modelu reguł asocjacyjnych

1. Na podstawie opisu w rozdziale „Wykorzystanie reguł asocjacyjnych” oraz szkieletu klasy 

AssociationRulesApplySimple napisz prostą aplikację pozwalającą uzyskać 
rekomendację na podstawie zbudowanego wcześniej modelu

2. Przetestuj napisaną aplikację dla zbudowanego wcześniej modelu oraz różnych danych 

wejściowych.

3. Wygeneruj kilka różnych modeli danych przy pomocy aplikacji napisanej w wcześniej i przetestuj 

na nich napisaną aplikację dla różnych danych wejściowych.

Budowa prostego modelu

Pierwszy model reguł asocjacyjnych należy zbudować dla danych zawartych w pliku: 
data/arff/transact.arff. Plik ten zawiera dane na temat zawartości „koszyka zakupów” dla 
kilku transakcji przeprowadzonych w supermarkecie. Każdy rekord zawiera informacje na temat jednego 
produktu zakupionego podczas którejś z opisywanych transakcji. Informacje zawarte w pliku to:

transactId – identyfikator transakcji opisywanej przez dany rekord

itemId – identyfikator (numer) produktu

itemName – nazwa (tekstowa) produktu

itemPrice – cena produktu (nie będzie wykorzystywana w tym przykładzie)

Poniżej znajduje się opis kolejnych kroków jakie należy wykonać, w celu zbudowania modelu reguł 
asocjacyjnych przy pomocy biblioteki Xelopes.

1. Otwarcie pliku z danymi
Plik  data/arff/transact.arff zapisany jest w formacie ARFF, do jego wczytania 
wykorzystujemy klasę: MiningArffStream. 

    // Open data source and get metadata:

    MiningInputStream inputData = new MiningArffStream( "data/arff/transact.arff" );

Po wczytaniu pliku pobieramy obiekt opisujący meta dane wczytanego pliku, czyli informacje o tym jakie 
dane zawierają wczytane rekordy (np. nazwy pól pobranych z  bazy SQL). Informacja ta jest konieczna 
do skonfigurowania algorytmu budowania modelu.

    MiningDataSpecification metaData = inputData.getMetaData();

2. Pobranie atrybutów transakcji
Algorytm tworzenia modelu reguł asocjacyjnych musi otrzymać jako parametry informację o atrybutach 
opisujących:

identyfikator transakcji

identyfikator produktu

Te dwa atrybuty pobieramy z obiektu metaData na podstawie ich nazw. Przykład:

// Identyfikator produktu
CategoricalAttribute categoryItemId = 

(CategoricalAttribute)metaData.getMiningAttribute( "itemId" );

// identyfikator transakcji

Eksploracja danych – laboratorium

2

background image

CategoricalAttribute categoryTransactId = 

(CategoricalAttribute)metaData.getMiningAttribute( "transactId" );

3. Konfiguracja algorytmu
Teraz możliwe jest utworzenie konfiguracji algorytmu, którego użyjemy do budowy modelu reguł 
asocjacyjnych. Tworzymy obiekt miningSettings klasy AssociationRulesSettings i 
podajemy mu informację na temat meta danych.

AssociationRulesSettings miningSettings = new AssociationRulesSettings();

miningSettings.setDataSpecification( metaData );

Analogicznie podajemy też informacje na temat tego które pole w każdym rekordzie odpowiada 
identyfikatorowi transakcji, a które identyfikatorowi produktu. Wykorzystujemy do tego utworzone 
wcześniej obiekty klasy CategoricalAttribute.

    miningSettings.setItemId( categoryItemId );

    miningSettings.setTransactionId( categoryTransactId );

Następnie za pomocą metod: 

miningSettings.setMinimumSupport() 

miningSettings.setMinimumConfidence() 

pobierających parametry typu double należy skonfigurować minimalną wartość parametrów support i 
confidence dla reguł które mają pojawić się w modelu.
Po ustawieniu wszystkich wymaganych parametrów należy zweryfikować ustawienia wywołując metodę:

miningSettings.verifySettings();

4. Utworzenie obiektu algorytmu
Informacje potrzebne do utworzenia nowego obiektu algorytmu budowania modelu reguł asocjacyjnych 
pobieramy z pliku algorithms.xml. Plik ten opisuje algorytmy, ich domyślne parametry oraz 
implementujące je klasy. Informacje te wczytujemy do obiektu klasy: 
MiningAlgorithmSpecification.  W pierwszym przykładzie użyjemy algorytmu 
AprioriSimple.

MiningAlgorithmSpecification miningAlgorithmSpecification = 
MiningAlgorithmSpecification.getMiningAlgorithmSpecification( "AprioriSimple" );

if( miningAlgorithmSpecification == null )

      throw new MiningException( "Can't find application AprioriSimple." );

Informacje na temat ustawionych parametrów specyficznych dla wybranego algorytmu możemy 
wyświetlić:

GeneralUtils.displayMiningAlgSpecParameters(miningAlgorithmSpecification);

Parametry te możemy zmienić za pomocą metory

    miningAlgorithmSpecification.setMAPValue(nazwaParametru,wartoścParametru);

Obydwa parametry metody są typu string. Dla algorytmu AprioriSimple możemy ustawić parametry: 
minimumItemSize i maximumItemSize definiujące minimalny i maksymalny rozmiar zbiorów 
częstych (ang. large itemsets).
Na podstawie wczytanej specyfikacji tworzymy obiekt algorytmu:

    String className = miningAlgorithmSpecification.getClassname();

Eksploracja danych – laboratorium

3

background image

    if( className == null )

      throw new MiningException( "classname attribute expected." );

    // Create algorithm object with default values:
    AssociationRulesAlgorithm algorithm = (AssociationRulesAlgorithm) 

initAlgorithm(className);

Metoda initAlgorithm jest zaimplementowana w klasie AssociationRulesBuildBasics po 
której dziedziczy implementowana przez nas klasa. Metoda ta zwyczajnie tworzy nowy obiekt na na 
podstawie nazwy klasy oraz obsługuje mogące się pojawić wyjątki.

5. Konfiguracja algorytmu
Wszystkie wykonane wcześniej ustawienia podajemy nowo utworzonemu algorytmowi i weryfikujemy 
całość:

algorithm.setMiningInputStream( inputData );
algorithm.setMiningSettings( miningSettings );

algorithm.setMiningAlgorithmSpecification( miningAlgorithmSpecification );
algorithm.verify();

6. Budowa modelu
Aby utworzyć nowy model reguł asocjacyjnych należy na jego obiekcie wywołać metodę 
buildModel().  Zwracającą obiekt klasy MiningModel zawierający znalezione reguły asocjacyjne. 
Po utworzeniu modelu możemy też pobrać czas jaki zajęło jego budowanie.

MiningModel model = algorithm.buildModel();

System.out.println("calculation time [s]: " + 

algorithm.getTimeSpentToBuildModel());

7. Wyniki
Otrzymane reguły asocjacyjne oraz odnalezione zbiory częste można wyświetlić za pomocą metody 
zaimplementowanej w klasie z której dziedziczy implementowany przykład:

showRules( (AssociationRulesMiningModel) model );

Wyniki te można też zapisać do pliku pmml, aby możliwe było późniejsze wykorzystanie 
wygenerowanego modelu w innych aplikacjach, na przykład generujących rekomendację (ang. 
recommendation engine).

FileWriter writer = new FileWriter("data/pmml/AssociationRulesModel.xml");
model.writePmml(writer);

Wykorzystanie reguł asocjacyjnych

Model reguł asocjacyjnych zbudowany na podstawie pewnych danych treningowych można potem 
wielokrotnie wykorzystywać. Jednym z możliwych zastosowań jest tzw. recommendation engine 
pozwalający na wykorzystanie modelu w celu uzyskania rekomendacji na podstawie pewnych przesłanek. 
Biblioteka Xelopes pozwala w prosty sposób zaimplementować taką funkcjonalność. Poniżej znajduje się 
opis pozwalający napisać prostą aplikację podającą rekomendację na podstawie zbudowanego wcześniej 
modelu oraz podanych przesłanek.

Eksploracja danych – laboratorium

4

background image

1. Wczytanie modelu z pliku
Najpierw tworzymy nowy obiekt modelu reguł asocjacyjnych, a następnie wczytujemy z pliku pmml 
utworzony wcześniej model.

MiningModel model = new AssociationRulesMiningModel();

FileReader reader = new FileReader("data/pmml/AssociationRulesModel.xml");
model.readPmml(reader);

2. Odczytanie ustawień
Kolejnym krokiem jest odczytanie ustawień modelu zawartych w obiekcie klasy 
AssociationRulesSettings oraz pobranie atrybuty będącego identyfikatorem produktu (z 
koszyka zakupów).

AssociationRulesSettings miningSettings = 

(AssociationRulesSettings) model.getMiningSettings();

CategoricalAttribute categoryItemId = 

(CategoricalAttribute) miningSettings.getItemId();

3. Przygotowanie modelu
Przed wykorzystaniem modelu do otrzymania rekomendacji konieczne jest odpowiednie uporządkowanie 
jego reguł asocjacyjnych za pomocą metody buildRecommendations().

((AssociationRulesMiningModel) model).buildRecommendations();

4. Przygotowanie danych wejściowych
Kolejnym krokiem jest przygotowanie danych wejściowych (przesłanek) na podstawie których chcemy 
uzyskać rekomendację. 
Najpierw tworzymy nowy zbiór elementów (produktów):

ItemSet is = new ItemSet();

Następnie dodajemy do niego identyfikatory produktów, w tym przypadku będą to produkty o 
identyfikatorach 2 i 3:

is.addItem( (int) categoryItemId.getKey( new Category("2") ));  
is.addItem( (int) categoryItemId.getKey( new Category("3") ));  

5. Uzyskanie rekomendacji
Aby uzyskać rekomendację dla wybranego zbioru produktów należy zastosować model asocjacyjny do 
utworzonego zbioru danych. Służy do tego metoda applyModel() zwracająca zbiór reguł składający 
się z jednej reguły najlepiej (pod względem parametrów support i confidence) pasującej do rozważanego 
zbioru danych wejściowych (przesłanek), lub null jeśli takiej reguły nie znaleziono.

RuleSet rs = (RuleSet) ((AssociationRulesMiningModel) model).applyModel(is); 

6. Wyniki
Jeśli zmienna rs nie jest równa null, to znaczy że otrzymaliśmy rekomendację i możemy ją wyświetlić. 
Można to wykonać przy pomocy poniższego kodu wyświetlającego poszczególne parametry uzyskanej 

Eksploracja danych – laboratorium

5

background image

rekomendacji.

System.out.println("Przesłanka : " + rs.getPremise().toString());

System.out.println("Konkluzja  : " + rs.getConclusion().toString()); 
System.out.println("Support    : " + rs.getSupport()); 

System.out.println("Confidence : " + rs.getConfidence()); 

Można też wykorzystać metodę itemSetToString() zaimplementowaną już w używanej klasie aby 
zamienić na tekst przesłankę oraz konkluzję otrzymanej reguły i wyświetlić je w innym formacie:

String prem = itemSetToString(rs.getPremise(), categoryItemId);
String conc = itemSetToString(rs.getConclusion(), categoryItemId);

System.out.println("\nRekomendacja jako String : ");
System.out.println(prem+" => "+conc);

Jeśli otrzymaliśmy regułę postaci:

2, 3 => 5

To oznacza, że do koszyka zakupów zawierającego już produkty 2 i 3 produkt 5 trafi z 
prawdopodobieństwem określonym parametrem confidence tej reguły.

Eksploracja danych – laboratorium

6


Document Outline