Polska Akademia Nauk Oddział w Gdańsku Komisja Informatyki Metody Informatyki Stosowanej Nr 3/2008 (Tom 16) Szczecin 2008
Metody Informatyki Stosowanej Kwartalnik Komisji Informatyki Polskiej Akademii Nauk Oddział w Gdańsku Komitet Naukowy: Przewodniczący: prof. dr hab. inŝ. Henryk Krawczyk, czł. koresp. PAN, Politechnika Gdańska Członkowie: prof. dr hab. inŝ. Michał Białko, czł. rzecz. PAN, Politechnika Koszalińska prof. dr hab. inŝ. Ludosław Drelichowski, Uniwersytet Technologiczno-Przyrodniczy w Bydgoszczy prof. dr hab. inŝ. Janusz Kacprzyk, czł. koresp. PAN, Instytut Badań Systemowych PAN prof. dr hab. Jan Madey, Uniwersytet Warszawski prof. dr hab. inŝ. Leszek Rutkowski, czł. koresp. PAN, Politechnika Częstochowska prof. dr hab. inŝ. Piotr Sienkiewicz, Akademia Obrony Narodowej prof. dr inŝ. Jerzy Sołdek, Politechnika Szczecińska prof. dr hab. inŝ. Andrzej Straszak, Instytut Badań Systemowych PAN prof. dr hab. Maciej M. Sysło, Uniwersytet Wrocławski Recenzenci: prof. dr hab. inŝ. Włodzimierz Bielecki, Politechnika Szczecińska prof. dr hab. inŝ. Ryszard Budziński, Uniwersytet Szczeciński prof. dr hab. inŝ. Andrzej CzyŜewski, Politechnika Gdańska dr hab. inŝ. Wojciech Jędruch, prof. PG, Politechnika Gdańska dr hab. Mieczysław Kula, prof. UŚ, Uniwersytet Śląski w Katowicach dr hab. inŝ. Eugeniusz Kuriata, prof. UZ, Uniwersytet Zielonogórski prof. dr hab. inŝ. Andrzej Piegat, Politechnika Szczecińska prof. dr inŝ. Jerzy Sołdek, Politechnika Szczecińska dr hab. inŝ. Alexander łariov, prof. PS, Politechnika Szczecińska prof. dr hab. inŝ. Leszek Trybus, Politechnika Rzeszowska dr hab. inŝ. Zenon Ulman, prof. PG, Politechnika Gdańska dr hab. inŝ. Antoni Wiliński, prof. PS, Politechnika Szczecińska Redaktor Naczelny: Antoni Wiliński Sekretarz redakcji: Piotr Czapiewski ISSN 1898-5297 ISBN 978-83-925803-5-5 Wydawnictwo: Polska Akademia Nauk Oddział w Gdańsku Komisja Informatyki Adres kontaktowy: ul. śołnierska 49 p. 104, 71-210 Szczecin Druk: Pracownia Poligraficzna Wydziału Informatyki Politechniki Szczecińskiej Nakład 510 egz.
Spis treści Piotr Andruszkiewicz METAUCZENIE A MOśLIWOŚĆ POPRAWY SKUTECZNOŚCI KLASYFIKACJI.................. 5 Lech Baranowski, Ilona Bluemke FRAKTALOWY MODEL KOMPONENTOWY..................................... 19 Anna Bartkowiak, Adam Szustalewicz DISTRIBUTION OF AMINO-ACIDS CODING GENETIC INFORMATION IN YEAST ORFS......... 33 Janusz Biernat, Janusz Jabłoński MINIMUM LOGIC DEPTH MODULO 2N+1 ADDERS............................... 41 Dariusz Burak EXPLOITING LOOP-LEVEL PARALLELISM IN THE MISTY1 ENCRYPTION ALGORITHM........ 57 Krzysztof Chmiel, Anna Grocholewska-Czuryło, Przemysław Socha, Janusz Stokłosa INVOLUTIONAL SCALABLE BLOCK CIPHER................................... 65 Larisa Dobryakova, Evgeny Ochin THE 2D-STEGANOGRAPHY METHOD IN THE SPATIAL-FREQUENCY AREA................. 77 Krystyna Dziubich, Tomasz Dziubich TWORZENIE WZORCÓW ZACHOWAŃ DLA APLIKACJI OPARTYCH O ARCHITEKTURĘ EDA...... 85 Imed El Fray KONTROLOWANY I BEZPIECZNY SPOSÓB UDOSTĘPNIANA ZASOBÓW INFORMACYJNYCH POPRZEZ USŁUGI WEB XML.................................................. 97 Iwona Grobelna FORMALNA ANALIZA INTERPRETOWANYCH ALGORYTMICZNYCH MASZYN STANÓW ASM Z WYKORZYSTANIEM NARZĘDZIA MODEL CHECKER............................. 107 Tomasz Hyla, Jerzy Pejaś A METHOD FOR LONG-TERM EHR METADATA PRESERVATION IN HEALTHCARE SYSTEMS..... 125 Wojciech Jędruch, Rafał Sienkiewicz MODELOWANIE SYSTEMÓW SAMOREPRODUKUJĄCYCH SIĘ........................ 135 Marcin Korzeń, Przemysław Klęsk, Andrzej Ciechanowicz, Mariusz Kaczmarczyk, Krystyna Widecka, Szymon Jaroszewicz MINING INTERESTING RULES AND PATTERNS FOR SALT SENSITIVITY OF BLOOD PRESSURE.... 149 Henryk Krawczyk, Jerzy Proficz DOBÓR USŁUG WWW W ŚRODOWISKU SOA................................. 159 Georgy Kukharev, Andrzej Tujaka, Nguyen The Binh SYSTEM OF FACE RECOGNITION USING LDA WITH ONE TRAINING IMAGE PER PERSON....... 167 Krzysztof Małecki, Jarosław Wątróbski, Marcin Warczygłowa BADANIE EFEKTYWNOŚCI NARZĘDZIA DO TESTOWANIA BEZPIECZEŃSTWA APLIKACJI INTERNETOWYCH................................................... 187 Łukasz Mazurowski, Antoni Wiliński KONCEPCJA GENEROWANIA UTWORU MUZYCZNEGO PRZEZ MASZYNĘ AKT SZTUCZNEJ TWÓRCZOŚCI OPARTEJ NA ALGORYTMACH GENETYCZNYCH....................... 203
4 Marek Pałkowski UPRASZCZANIE AFINICZNYCH RELACJI I ZBIORÓW W CELU PODNIESIENIA WYDAJNOŚCI GENEROWANEGO KODU RÓWNOLEGŁEGO................................... 213 Magdalena Szaber, Ekaterina Kamenskaya SYSTEMY ROZPOZNAWANIA TWARZY DLA OBRAZÓW WIDZIALNYCH I PODCZERWIENI Z WYKORZYSTANIEM CCA............................................ 223 Marta Szarafińska, Agnieszka Konys, Mateusz Piwowarski MCDA MODEL APPROACH TO THE BUSINESS PROCESS MODELING METHODS EVALUATION... 237 Alexandr łariov, Galina łariova ZWEKTORYZOWANE ALGORYTMY WYZNACZANIA ILOCZYNÓW TRZECH MACIERZY......... 247 Grzegorz Ulacha ALGORYTMICZNE ASPEKTY SPRZĘTOWEJ REALIZACJI KOMPRESJI OBRAZÓW W TRYBIE BEZSTRATNYM I PRAWIE BEZSTRATNYM.................................... 257
Metauczenie a moŝliwość poprawy skuteczności klasyfikacji * Piotr Andruszkiewicz Politechnika Warszawska, Wydział Elektroniki i Technik Informacyjnych Abstract: Metalearning is a technique, which enables us to improve classification accuracy in Data Mining. It uses several classifiers to compute final category for a test sample. The most popular metalearning methods are Bagging and Boosting. Effectiveness of these methods with the usage of decision tree (SPRINT) has been tested and presented in this paper. Keywords: metalearning, classification, decision tree, SPRINT 1. Wstęp Klasyfikacja staje się coraz waŝniejsza w dzisiejszym Ŝyciu. MoŜe ona być stosowana do wykrywania naduŝyć bądź do przydzielania dokumentów tekstowych do odpowiednich grup. Szczególnym przypadkiem moŝe być tu wykrywanie niepotrzebnych wiadomości elektronicznych wysyłanych na skrzynki pocztowe. WaŜne jest, aby dokonywać jej z jak najlepszą skutecznością. Do jej poprawy moŝna uŝyć metauczenia (ang. metalearning). Wykorzystuje ono wiele klasyfikatorów do podjęcia ostatecznej decyzji. Praca ta przedstawia następujące zagadnienia związane z metauczeniem. W sekcji 2 opisana jest matematyczna definicja klasyfikacji. Część 3 traktuje o metauczeniu ze szczegółowym omówieniem metod bagging i boosting. Natomiast sekcja 4 opisuje wykorzystany w eksperymentach klasyfikator SPRINT. Sekcja 5 to wyniki eksperymentów, zaś 6 przedstawia wnioski z nich płynące. 2. Zadanie klasyfikacji Zadanie klasyfikacji polega na znalezieniu dla wybranego przykładu najbardziej odpowiadającej mu kategorii [11]. Szukanie odpowiadającej kategorii jest dokonywanie na podstawie analizy zbioru trenującego zbioru przykładów, dla których kategoria jest określona. Celem analizy jest znalezienie wiedzy w jaki sposób przynaleŝność do kategorii zaleŝy od atrybutów opisujących przykład. ZałóŜmy, Ŝe istnieje nieznana funkcja c taka, Ŝe: c : X X dziedzina przykładów, C zbiór kategorii. C, gdzie: * Badania wspierane były przez grant Ministerstwa Edukacji i Nauki o numerze 3 T11C 002 29.
6 Piotr Andruszkiewicz Ponadto posiadamy zbiór T X, nazywany zbiorem trenującym, taki Ŝe: x T c(x) jest znane. Zadanie klasyfikacji polega na znalezieniu funkcji h : X C zwanej hipotezą i spełniającej warunki: x X moŝna wyznaczyć h(x). h c, tzn. Ŝe jest małe prawdopodobieństwo, Ŝe h c. 3. Metauczenie Technika metauczenia [1] polega na wykorzystaniu wielu klasyfikatorów w celu przypisania przykładowi kategorii. Mogą one wykorzystywać inne algorytmy, które uczone będą na identycznych danych. Jeśli są to te same klasyfikatory, to otrzymują one róŝne podzbiory zbioru trenującego. KaŜdy z klasyfikatorów uczy się na dostarczonych mu danych. Podzbiory te moŝna utworzyć poprzez losowanie z całego zbioru trenującego r T przykładów dla kaŝdego klasyfikatora. Parametr r moŝe przyjmować wartości mniejsze od 2/3, choć stosowane jest takŝe próbkowanie dla r równego 1. Losowanie moŝe odbywać się zgodnie z rozkładem jednostajnym lub innym rozkładem tworzonym w poszczególnych fazach metauczenia. Innym sposobem jest podzielenie zbioru trenującego na m części i przekazaniu kaŝdemu klasyfikatorowi m-1 części. Przy wykorzystaniu jednakowych klasyfikatorów moŝna zastosować modyfikację przestrzeni atrybutów (poszczególne klasyfikatory uczą się na róŝnych zestawach atrybutów). Kolejnym podejściem moŝe być randomizacja algorytmów poprzez wprowadzenie losowości w funkcji oceny albo zastosowanie deterministycznej funkcji oceny z losowym wyborem spośród kilku najlepszych przypadków. MoŜna takŝe zastosować modyfikację kategorii kodowanie kategorii. Przykładem moŝe być opisanie kategorii za pomocą numerów i przedstawienie ich przy pomocy kodu binarnego. Wówczas kaŝdy klasyfikator określałby pojedynczy bit tego kodu. Klasyfikowanie przykładu polega na przydzieleniu mu kategorii przez wszystkie klasyfikatory, a następnie wybrania kategorii, która była najczęściej wskazywana. Takie decydowanie o wybranej kategorii nosi miano głosowania. MoŜliwe jest takŝe głosowanie waŝone. Do wybrania ostatecznej kategorii moŝna zastosować maksymalizację prawdopodobieństwa, wykorzystując do tego Naiwny Klasyfikator Bayesowski. Danymi wejściowymi będą wówczas wyjścia poszczególnych klasyfikatorów, na podstawie których klasyfikator przydzieli ostateczną kategorię. Wykorzystując tę zasadę łączenia klasyfikatorów, moŝna wprowadzić hierarchiczne łączenie klasyfikatorów. Wówczas danymi wejściowymi dla kaŝdego klasyfikatora wyŝszego rzędu będą wyjścia klasyfikatorów niŝszego rzędu. Klasyfikator znajdujący się najwyŝej w hierarchii będzie podawał ostateczną kategorię. Wyraźny wpływ na jakość klasyfikacji przy metauczeniu widać w tak zwanych algorytmach niestabilnych, dla których małe zmiany zbiorów trenujących potrafią zmienić znacząco hipotezę. Są to m.in. algorytmy tworzenia reguł decyzyjnych lub drzew decyzyjnych. Dla algorytmów stabilnych (m.in. Naiwny Klasyfikator Bayesowski) nie obserwuje się poŝądanych rezultatów.
Metauczenie a moŝliwość poprawy skuteczności klasyfikacji 7 Do najczęściej stosowanych metod metauczenia naleŝą algorytmy bagging i boosting. 3.1. Bagging Metoda bagging [2] polega na wykorzystaniu zbioru trenującego T i algorytmu klasyfikacji A. Tworzony jest zbiór klasyfikatorów {cl 1, cl 2,.., cl n }, z których kaŝdy wykorzystuje algorytm A i trenowany jest na zbiorze trenującym T i. Zbiór trenujący T i powstaje poprzez wylosowanie przykładów (ze zwracaniem) ze zbioru T. Losowanie odbywa się zgodnie z rozkładem jednostajnym. Liczności zbioru T i T i są takie same. KaŜdy klasyfikator przydziela kategorię przykładowi. Ostateczna kategoria jest tą, która najczęściej była proponowana przez klasyfikatory. 3.2. Boosting Metoda boosting [4], podobnie jak bagging, zakłada stworzenie zbioru klasyfikatorów {cl 1, cl 2,.., cl n }. Klasyfikatory wykorzystują ten sam algorytm A. RóŜnica polega na sposobie wyboru przykładów z podstawowego zbioru trenującego do poszczególnych zbiorów T i, na podstawie których uczą się klasyfikatory. Bagging zakładał wybieranie przykładów ze zbioru trenującego z rozkładem jednorodnym. Boosting polega na uczeniu kolejnych klasyfikatorów przede wszystkim na podstawie przykładów, które były przez poprzednie klasyfikatory źle klasyfikowane. Przy losowaniu przykładów do zbiorów trenujących dla kolejnych klasyfikatorów próbkom źle klasyfikowanym przyznawane jest większe prawdopodobieństwo wyboru. W taki sposób kolejne klasyfikatory będą uczyły się na podstawie przykładów błędnie klasyfikowanych przez poprzedników. Przyjmijmy, Ŝe P il będzie oznaczać prawdopodobieństwo wybrania przykładu d l ze zbioru trenującego T do zbioru T i. Dla pierwszego klasyfikatora wartości tych prawdopodobieństw dla kaŝdego przykładu są takie same (sytuacja jak w bagging) 1 P il = m T = m gdzie m oznacza liczbę przykładów w zbiorze trenującym T. Przy tworzeniu kolejnych zbiorów trenujących wartości te są modyfikowane. Przy konstrukcji zbioru trenującego dla klasyfikatora cl i+1 naleŝy najpierw obliczyć sumę S i będącą sumą prawdopodobieństw tych przykładów, dla których klasyfikator cl i się pomylił. S i m = l: cli ( dl ) f ( dl ) p il f jest klasyfikacją empiryczną, a d l przykładem o indeksie l ze zbioru trenującego. Następnie wyliczany jest współczynnik korekcji α i 1 si αi = 0, 5log si Prawdopodobieństwa przykładów modyfikowane są w następujący sposób:
8 Piotr Andruszkiewicz i i+ 1, l = il dla przykładów, którym klasyfikator cl i przydzielił poprawną kategorię, p p e α p p e α i i+ 1, l = il dla przykładów niepoprawnie sklasyfikowanych. W dalszej kolejności są one normalizowane. Dzięki takiemu zabiegowi kolejne klasyfikatory uczone są przede wszystkim na podstawie przykładów, które zostały niepoprawnie sklasyfikowane przez poprzednie klasyfikatory. Jest to podejście wykorzystujące losowanie przykładów (ang. boosting by sampling). Drugie podejście wykorzystuje prawdopodobieństwa p i,l jako wagi (ang. boosting by weighting). MoŜna je stosować, gdy wykorzystywany algorytm klasyfikacji pozwala na bezpośrednie uŝycie waŝonego zbioru trenującego. Na kaŝdym etapie tworzenia zbioru klasyfikatorów wykorzystywany jest cały zbiór trenujący waŝony prawdopodobieństwami p i,l. Wybór klasy wypadkowej przebiega tak jak w metodzie bagging, jednak stosowane jest głosowanie waŝone przy pomocy współczynnika α i dla poszczególnych klasyfikatorów. 4. Wykorzystany klasyfikator W eksperymentach uŝyto klasyfikatora wykorzystującego drzewo decyzyjne. Zaimplementowany został algorytm SPRINT [9] z modyfikacjami. 4.1. Opis algorytmu Algorytm polega na rekurencyjnym tworzeniu drzewa decyzyjnego, w którego węzłach znajdują się testy na atrybutach, a w liściach określone są kategorie. Przykłady, które spełniają test przechodzą np. na lewo, a niespełniające na prawo. Test dla atrybutów nominalnych polega na sprawdzeniu czy wartość danego atrybutu zawiera się w ustalonym podzbiorze moŝliwych wartości atrybutu. Natomiast dla atrybutów ciągłych test sprawdza czy wartość znajduje się poniŝej pewnego progu. Klasyfikacja nowego przykładu polega na sprawdzeniu poszczególnych testów, przechodząc w głąb drzewa. Po dotarciu do liścia, w którym znajduje się kategoria, przypisywana jest ona klasyfikowanemu przykładowi. Kroki rekurencyjnego algorytmu budowania drzewa decyzyjnego: 1. Sprawdź czy spełnione jest kryterium stopu; a) jeśli tak, to utwórz liść i przydziel mu kategorię; b) zwróć liść. 2. Utwórz węzeł. 3. Wybierz właściwy test. 4. Odznacz, Ŝe wybrany test był juŝ uŝyty. 5. Wywołaj rekurencyjnie algorytm budowania drzewa decyzyjnego dla przykładów spełniających test. 6. Wywołaj rekurencyjnie algorytm budowania drzewa decyzyjnego dla przykładów niespełniających testu. 7. Zwróć węzeł.
Metauczenie a moŝliwość poprawy skuteczności klasyfikacji 9 Kryterium stopu jest spełnione, gdy wszystkie przykłady mają tę samą kategorię, zbiór przykładów jest pusty lub wykorzystano juŝ testy na wszystkich atrybutach. Do wyboru testu uŝyta została miara Gini [10], która przyjmuje wartości od 0 do 1. Najlepszym testem jest ten, który posiada jak najmniejszą wartość tego współczynnika. Sd Gini( S) = 1 Sd S gdzie: S oznacza klasę, d 2 S d liczba przykładów naleŝących do danej klasy i spełniających test, S liczba wszystkich przykładów spełniających test. Analogicznie oblicza się wartość tego współczynnika dla przykładów, które nie spełniają testu. Końcową miarą dla danego testu (atrybut i wartość) jest indeks Gini split wyliczany jako St Sn G = s G( St ) G( Sn ) S + S all all S all liczba wszystkich przykładów S t liczba przykładów spełniających test S n liczba przykładów nie spełniających testu Przykład: Wyliczenie wartości dla testu wiek 17 i pojęciu docelowym ryzyko o wartościach wysokie i niskie. Tabela 1. Liczba przykładów spełniających test w podziale na kategorie Ryzyko wysokie niskie spełnia test (tak) 1 0 nie spełnia testu (nie) 3 2 G tak 2 2 1 0 = 1 + = 0 1 1 2 2 3 2 12 G nie = 1 + = 5 5 15 1 5 2 G s = 0 + 12 = 6 6 5 Miarę tę wylicza się dla kaŝdego atrybutu i kaŝdego podzbioru wartości danego atrybutu (dla atrybutów nominalnych) albo progu (dla atrybutów ciągłych). Próg rozumiany jest jako średnia wartość między dwoma najbliŝszymi wartościami danego atry-
10 Piotr Andruszkiewicz butu występującymi w przykładach. Za najlepszą parę atrybut - wartość uwaŝa się tę, która ma najmniejszą wartość indeksu gini split. Wybrany test nie moŝe zostać juŝ uŝyty w ścieŝce przebiegającej w głąb drzewa. Tabela 2. Procent poprawnie sklasyfikowanych przykładów dla zbioru credit-g Alg. Bez metauczenia Bagging AdaBoost Fold 4 Liczba klasyf. Maksymalna głębokość drzewa - 5 10 15 20 0,690 0,708 0,703 0,690 0,690 7 1 0,651 0,674 0,655 0,650 0,651 10 0,682 0,718 0,684 0,685 0,682 4 7 10 4 7 10 1 0,675 0,680 0,675 0,672 0,676 3 0,701 0,718 0,706 0,675 0,713 5 0,705 0,730 0,716 0,739 0,726 1 0,660 0,688 0,673 0,660 0,643 3 0,708 0,712 0,704 0,691 0,701 5 0,694 0,740 0,703 0,720 0,738 1 0,664 0,699 0,680 0,670 0,671 3 0,720 0,717 0,708 0,693 0,699 5 0,718 0,724 0,712 0,721 0,713 1 0,673 0,697 0,663 0,655 0,687 3 0,670 0,694 0,692 0,697 0,688 5 0,705 0,705 0,701 0,711 0,705 1 0,671 0,678 0,665 0,678 0,673 3 0,680 0,713 0,696 0,696 0,674 5 0,729 0,729 0,730 0,717 0,702 1 0,677 0,697 0,659 0,665 0,698 3 0,683 0,725 0,698 0,679 0,704 5 0,709 0,738 0,692 0,702 0,715 4.2. Modyfikacje Ograniczenie sprawdzanych podzbiorów wartości atrybutu nominalnego pozwala na zwiększenie szybkości algorytmu generowania drzewa. Spośród wszystkich podzbiorów wartości atrybutu wybieramy tylko te, których liczność jest mniejsza bądź równa wartości całkowitej z maksymalnej liczności zbioru wartości podzielonej przez dwa. Pozostałe podzbiory są równowaŝne pod względem podziału przykładów.
Metauczenie a moŝliwość poprawy skuteczności klasyfikacji 11 Ograniczenie sprawdzanych progów podziału dla atrybutów ciągłych. Progi, które leŝą między przykładami tej samej kategorii, mogą zostać pominięte, poniewaŝ dobry test nie powinien rozdzielać przykładów o jednakowej kategorii. Liczbę przykładów spełniających dany warunek (próg p i+1 ) moŝna wyliczyć jako liczbę przykładów spełniających warunek p i zwiększoną o liczbę próbek, których wartość badanego atrybutu mieści się pomiędzy tymi dwoma wartościami progowymi. Oczywiście p i+1 >p i. Tabela 3. Procent poprawnie sklasyfikowanych przykładów dla zbioru segment Alg. Bez metauczenia Bagging AdaBoost Fold 4 Liczba klasyf. Maksymalna głębokość drzewa - 5 10 15 20 0,921 0,685 0,861 0,920 0,921 7 1 0,928 0,691 0,874 0,928 0,928 10 0,930 0,699 0,876 0,929 0,930 4 7 10 4 7 10 1 0,922 0,693 0,902 0,925 0,927 3 0,942 0,662 0,909 0,932 0,939 5 0,948 0,713 0,895 0,946 0,938 1 0,922 0,671 0,869 0,925 0,919 3 0,939 0,728 0,874 0,938 0,938 5 0,951 0,697 0,904 0,948 0,951 1 0,926 0,670 0,891 0,920 0,923 3 0,938 0,716 0,897 0,945 0,942 5 0,949 0,711 0,890 0,945 0,952 1 0,917 0,718 0,873 0,915 0,924 3 0,926 0,787 0,925 0,917 0,921 5 0,931 0,755 0,945 0,924 0,922 1 0,932 0,670 0,884 0,919 0,921 3 0,921 0,738 0,936 0,928 0,920 5 0,915 0,723 0,943 0,925 0,918 1 0,920 0,707 0,861 0,918 0,930 3 0,929 0,734 0,850 0,921 0,920 5 0,928 0,777 0,813 0,933 0,923 Algorytm zakłada utworzenie dla kaŝdego atrybutu tablicy z trzema kolumnami: identyfikatorem przykładu, atrybutem i klasą. Dla atrybutów ciągłych jest to tablica posortowana według wartości danego atrybutu.
12 Piotr Andruszkiewicz Implementowany algorytm miał zostać uŝyty przy metauczeniu, a więc tablice te zawierają jedynie numery identyfikatorów poszczególnych przykładów. A zbiór próbek przechowywany jest tylko w jednym egzemplarzu. Nie została wykorzystana heurystyka wyznaczania najlepszego testu dla atrybutów nominalnych o duŝej liczbie moŝliwych wartości proponowana przez autorów SPRINT, gdyŝ w uŝywanych przykładach nie było atrybutów przekraczających znacznie podaną granicę dziesięciu wartości atrybutu. Brak moŝliwości uŝywania po raz kolejny testu na danym atrybucie powoduje, Ŝe czasami generowane jest drzewo, które zawiera w dwóch liściach będących dziećmi jednego testu te same kategorie. Nie wpływa to negatywnie na jakość klasyfikacji w porównaniu do drzewa z usuniętym testem i jednym liściem. Jednak pogarsza czytelność drzewa i nieznacznie czas klasyfikowania przykładu. 4.3. Brakujące wartości atrybutów Brakujące wartości uzupełniane są wartościami najczęściej występującymi dla danego atrybutu nominalnego. Natomiast dla atrybutów ciągłych jest to średnia arytmetyczna. 4.4. Ocena poprawności klasyfikacji Do określenia skuteczności klasyfikacji posłuŝył odsetek poprawnie klasyfikowanych przykładów dokładność (ang. accuracy). Dodatkowo w celu otrzymania wiarygodniejszych wyników wykorzystana została walidacja krzyŝowa (ang. cross validation) [6]. Polega ona na podzieleniu zbioru przykładów na n równolicznych podzbiorów (parametr fold). Eksperyment przeprowadza się n razy za kaŝdym razem wybierając jako zbiór testujący inny podzbiór. Pozostałe przykłady słuŝą jako zbiór trenujący. Otrzymane w ten sposób wyniki uśrednia się. 5. Wyniki eksperymentów Eksperymenty zostały przeprowadzone dla pięciu zbiorów przykładów [7]: 1) credit-g zbiór o atrybutach nominalnych i numerycznych. Liczba przykładów 1000. 2) segment zbiór o 19 atrybutach rzeczywistych i atrybucie klasy. Liczba przykładów 2310. 3) sick zbiór o atrybutach nominalnych i numerycznych z przykładami, w których występują brakujące wartości. Liczba przykładów 3772. 4) kr-vs-kp zbiór o atrybutach wyłącznie nominalnych. Liczba przykładów 3196. 5) audiology zbiór o atrybutach wyłącznie nominalnych (brakujące wartości). Liczba przykładów 226. Wszystkie tabele przedstawiają procent przykładów dobrze sklasyfikowanych przy uŝyciu walidacji krzyŝowej.
Metauczenie a moŝliwość poprawy skuteczności klasyfikacji 13 Tabela 4. Procent poprawnie sklasyfikowanych przykładów dla zbioru kr-vs-kp Alg. Bez metauczenia Bagging AdaBoost Fold 4 Liczba klasyf. Maksymalna głębokość drzewa - 5 10 15 20 0,917 0,784 0,900 0,917 0,917 7 1 0,960 0,851 0,961 0,960 0,960 10 0,975 0,907 0,974 0,975 0,975 4 7 10 4 7 10 1 0,908 0,793 0,905 0,895 0,891 3 0,908 0,830 0,949 0,930 0,902 5 0,929 0,817 0,913 0,916 0,909 1 0,938 0,906 0,951 0,957 0,941 3 0,956 0,877 0,954 0,935 0,941 5 0,946 0,887 0,951 0,945 0,940 1 0,964 0,902 0,944 0,962 0,965 3 0,968 0,893 0,973 0,972 0,971 5 0,975 0,911 0,975 0,975 0,971 1 0,919 0,826 0,873 0,906 0,886 3 0,904 0,809 0,860 0,917 0,940 5 0,919 0,798 0,875 0,910 0,931 1 0,925 0,886 0,939 0,948 0,941 3 0,948 0,879 0,945 0,944 0,932 5 0,951 0,862 0,947 0,936 0,950 1 0,965 0,895 0,972 0,968 0,967 3 0,966 0,906 0,955 0,962 0,969 5 0,971 0,940 0,969 0,976 0,972 Z eksperymentów przeprowadzonych dla credit-g (Tabela 2) moŝna wywnioskować, Ŝe w większości przypadków skuteczność klasyfikacji dla drzewa bez ograniczonej głębokości jest mniejsza od drzewa z maksymalną głębokością 5. Jest to róŝnica rzędu 2-3%. Wśród przypadków, które nie spełniają tej zaleŝności (wyniki zaznaczone kursywą) jest próba przeprowadzona z AdaBoost dla fold 10 i jednego klasyfikatora. MoŜna więc wnioskować, Ŝe dla tego zbioru danych występuję nadmierne dopasowanie drzewa do danych treningowych (ang. overfitting), a przy ograniczeniu głębokości drzewa do około 5 redukowane jest nadmierne dopasowanie (zabezpieczenie przed wraŝliwością na szum w danych) i drzewo klasyfikuje lepiej na danych testowych. W celu zapobieŝenia nadmiernemu dopasowaniu moŝna posłuŝyć się przycinaniem (ang. pruning) [5], które redukuje nadmierne dopasowanie poprzez zamianę testów na liście.
14 Piotr Andruszkiewicz Porównując wyniki otrzymane dla róŝnej liczby tworzonych klasyfikatorów, moŝna stwierdzić, Ŝe zwiększenie liczby klasyfikatorów poprawia skuteczność klasyfikowania (tylko w nielicznych przypadkach skuteczność spada w niewielkim stopniu). Tabela 5. Procent poprawnie sklasyfikowanych przykładów dla zbioru audiology Alg. Bez metauczenia Bagging AdaBoost Fold 4 Liczba klasyf. Maksymalna głębokość drzewa - 5 10 15 20 0,696 0,518 0,692 0,696 0,696 7 1 0,679 0,473 0,665 0,679 0,679 10 0,723 0,441 0,714 0,723 0,723 4 7 10 4 7 10 1 0,603 0,545 0,656 0,638 0,656 3 0,719 0,540 0,656 0,737 0,674 5 0,705 0,661 0,701 0,674 0,701 1 0,652 0,531 0,656 0,688 0,647 3 0,701 0,634 0,723 0,714 0,705 5 0,723 0,625 0,728 0,777 0,728 1 0,695 0,550 0,659 0,714 0,677 3 0,700 0,645 0,686 0,714 0,736 5 0,755 0,645 0,727 0,741 0,755 1 0,692 0,518 0,683 0,674 0,674 3 0,679 0,594 0,625 0,670 0,692 5 0,692 0,567 0,696 0,665 0,692 1 0,647 0,558 0,612 0,665 0,598 3 0,674 0,442 0,647 0,696 0,710 5 0,768 0,549 0,665 0,705 0,674 1 0,718 0,550 0,618 0,655 0,664 3 0,709 0,545 0,655 0,741 0,723 5 0,736 0,477 0,673 0,750 0,750 Porównując wyniki dla algorytmu bagging i przypadku bez wykorzystania metauczenia, moŝna stwierdzić, Ŝe lepsze wyniki otrzymuje się przy bagging. Dla przypadku, gdy ta metoda wykorzystuje jeden klasyfikator, wyniki są zbliŝone (zdarzają się przypadki nieznacznie gorszych wyników - związane są one z jednokrotnym losowaniem przykładów ze zbioru trenującego, które nie zawsze wybiera zestaw przykładów pozwalający na poprawę jakości klasyfikowania), jednak wraz ze wzrostem liczby uŝytych klasyfikatorów rośnie skuteczność i róŝnica staje się bardziej wyraźna.
Metauczenie a moŝliwość poprawy skuteczności klasyfikacji 15 Porównując skuteczność metody bagging i boosting, moŝna stwierdzić, Ŝe uzyskane rezultaty są zbliŝone. Otrzymane wyniki skuteczności klasyfikacji wahają się w przedziale 65-75%. Dla zbioru segment (Tabela 3) wyniki uzyskane dla drzewa bez ograniczenia głębokości są znacznie lepsze niŝ dla drzewa o maksymalnej głębokości równej 5. Zwiększając ten parametr do 15-20, otrzymuje się wyniki porównywalne do przypadku bez ograniczenia głębokości. Wniosek z tego, Ŝe przy poziomie głębokości drzewa około 20 uzyskuje się drzewo, które nie jest nadmiernie dopasowane do danych treningowych. Wyniki otrzymane dla bagging przy wykorzystaniu jednego klasyfikatora są, podobnie jak dla przypadku credit-g, zbliŝone do wyników, które uzyskano bez metauczenia. Zastosowanie 3 i 5 klasyfikatorów zwiększa skuteczność klasyfikacji. Metody bagging i boosting uzyskały zbliŝone wyniki. Nie moŝna stwierdzić, który algorytm lepiej klasyfikował przykłady, gdyŝ raz przewagę nieznaczną zdobywa jeden, a w innym przypadku drugi. Średnie uzyskane wyniki mieszczą się w przedziale 85-95% (pomijając przypadek z maksymalną głębokością 5). 1 0,95 0,9 0,85 0,8 0,75 0,7 0,65 audiology kr-vs-kp sick segment credit-g Bez metauczenia Bagging AdaBoost Rysunek 1. Procent poprawnie klasyfikowanych przykładów dla fold=10 i 3 klasyfikatorów przy metauczeniu W przypadku zbioru sick, który zawiera 3772 przykładów o 7 atrybutach ciągłych i 23 atrybutach nominalnych, otrzymano wyniki które róŝnią się pomiędzy sobą nie więcej niŝ o 1,1%.Nie pozwala to na rozwaŝanie przewagi jednej z uŝytych metod. Zbiór sick zawiera 6046 brakujących wartości, co stanowi 5,4% wszystkich analizowanych wartości. Otrzymana skuteczność klasyfikacji jest wysoka i wynosi ok. 98%. Algorytm generowania drzew decyzyjnych C4.5 (J48) zaimplementowany w bibliotece Weka uzyskuje podobne wyniki dla tego przykładu. Są to wartości z przedziału 98,4-98,7%. UŜycie metody bagging w bibliotece Weka daje identyczne rezultaty (98,1-98,8%). Natomiast boost uzyskał lepsze wyniki, bo mieszczące się w przedziale 98,2-99,1%.
16 Piotr Andruszkiewicz 1 0,95 0,9 0,85 0,8 0,75 0,7 0,65 audiology kr-vs-kp sick segment credit-g Bez metauczenia Bagging AdaBoost Rysunek 2. Procent poprawnie klasyfikowanych przykładów dla fold=10 i 5 klasyfikatorów przy metauczeniu Wyniki otrzymane dla zbioru kr-vs-kp (Tabela 4) dla drzewa o maksymalnej głębokości równej 5 są znacznie gorsze do ok. 10% niŝ dla drzewa bez ograniczeń. Zwiększanie maksymalnej głębokości pozwala osiągnąć wartości takie jak dla drzewa bez ograniczenia, a w kilku przypadkach dla maksymalnej głębokości 15 i 20 nawet nieznacznie lepsze. Algorytm bagging dla jednego klasyfikatora uzyskał zbliŝone wyniki (z wyjątkiem jednego przypadku, gdzie uzyskał zdecydowanie lepszy wynik) do przypadku, gdzie nie uŝyto Ŝadnego algorytmu metauczenia. Przy wykorzystaniu wielu klasyfikatorów otrzymane rezultaty takŝe są zbliŝone. Występują zarówno lepsze przypadki jak i gorsze wyniki. Algorytm bagging w około 75% przypadków okazał się lepszy. Nie są to jednak znaczące róŝnice. Dla zbioru audiology (Tabela 5), podobnie jak dla poprzednich przypadków, drzewo o maksymalnej głębokości równej 5 klasyfikuje gorzej. Zwiększanie głębokości drzewa pozwala na osiągnięcie rezultatów jak dla drzewa nieograniczanego. Wyniki metody bagging dla jednego klasyfikatora są nieznacznie gorsze (z wyjątkiem niewielkiego procenta przypadków) od wyników uzyskanych bez metauczenia. UŜycie 3 i 5 klasyfikatorów poprawia skuteczność klasyfikowania. Są to róŝnice rzędu 2-3%, pomijając klasyfikator o maksymalnej głębokości równej 5. Dla tego przypadku róŝnica w skuteczności klasyfikacji osiąga nawet ponad 20% (44,1 wobec 64,5%). Metoda boosting w porównaniu do bagging uzyskała gorsze wyniki zwykle około 1-3%. Wyjątek stanowi klasyfikator o maksymalnej głębokości drzewa 5, gdzie róŝnice te sięgają ok. 20%, a wynik jest zbliŝony do osiągnięć, jakie uzyskał klasyfikator bez metauczenia. Dla dwóch przypadków metoda boosting uzyskała widocznie lepsze rezultaty. Są to przypadki zaznaczone kursywą, a róŝnica w skuteczności wynosi około 9% i 5% w porównaniu do bagging.
Metauczenie a moŝliwość poprawy skuteczności klasyfikacji 17 Jakość klasyfikacji dla analizowanych zbiorów przestawione zostały graficznie na rysunku 1 i 2. Eksperymenty przeprowadzone zostały dla 3 i 5 klasyfikatorów oraz walidacji krzyŝowej z podziałem na 10 podzbiorów. Przedstawiają porównanie jakości przy wykorzystaniu metod bagging i boosting oraz bez metauczenia. 6. Podsumowanie Nadmierne ograniczanie maksymalnej głębokości drzewa powoduje spadek jakości klasyfikowania. Zastosowanie metauczenia z wykorzystaniem kilku klasyfikatorów pozwala na poprawienie skuteczności klasyfikowania. Wraz ze wzrostem liczby klasyfikatorów rośnie procent poprawnie klasyfikowanych przykładów. Nie jest to jednak Ŝelazna reguła. Przyrost skuteczności zaleŝy od uŝytego zbioru przykładów. Porównując metody bagging i boosting, moŝna stwierdzić, Ŝe uzyskują one podobne wyniki, wskazując jednak na korzyść metody bagging. Skuteczność klasyfikacji wyniosła dla zbiorów credit-g 65-75% audiology 45-73%. Zbiory te zawierały odpowiednio 1000 i 226 przykładów. Znacznie lepsze wyniki uzyskano dla pozostałych zbiorów (85-99%). Pozostałe zbiory zawierały co najmniej 2,3 do ponad 3,7 tyś. przykładów. W pracy [3] porównana została takŝe jakość klasyfikacji bez i przy wykorzystaniu metauczenia. UŜyty został algorytm budowy drzewa decyzyjnego C4.5. W eksperymentach zastosowano przycinanie stosowane tylko wówczas, gdy zmniejszało ono błąd klasyfikacji liczony na zbiorze testującym. W przypadku metody boosting zastosowano podejście wykorzystujące waŝony zbiór trenujący (w przeciwieństwie do niniejszej pracy, gdzie uŝyto podejścia wykorzystującego losowanie przykładów). Uzyskane wyniki, podobnie jak w niniejszej pracy, wskazywały na wyŝszość obu metod metauczenia nad budową pojedynczego klasyfikatora. Jednak [3] wskazuje (dla przypadku bez wprowadzania szumu) na wyŝszość metody boosting nad bagging. Eksperymenty przedstawione w niniejszej pracy pokazują niewielką przewagę metody bagging. RóŜnice mogą wynikać z zastosowania innych podejść przy realizacji metody boosting, odmiennych sposobów ograniczania głębokości drzewa oraz róŝnic w algorytmach budowy drzewa decyzyjnego. Mimo Ŝe stosowanie metauczenia powoduje trudniejszą interpretację zasad przydzielania przykładów do poszczególnych klas (powstaje wiele drzew decyzyjnych wykorzystywanych jednocześnie do określenia końcowej kategorii), to zastosowanie wielu klasyfikatorów pozwala na uzyskanie wyŝszej jakości klasyfikacji. Bibliografia [1] Cichosz P. Systemy uczące się, Warszawa 2000, WNT. [2] Breiman L. Bagging Predictors, Machine Learning, 24(2), 1996, s. 123-140. [3] Dietterich T. G. An experimental comparison of three methods for constructing ensembles of decision trees: Bagging, boosting, and randomization, Machine Learning, 40(2), 2000, s. 139-157. [4] Freund Y., Shapire E. Experiments with a new boosting algorithm, 13th Conf. on Machine Learning, s. 148-156, 1996.
18 Piotr Andruszkiewicz [5] Han J., Kamber M. Data Mining: Concepts and Techiniques, New York 2001, Morgan Kaufman. [6] Hastie T., Tibshirani R., Friedman J. The Elements of Statistical Learning: Data Mining, Inference, and Prediction, Springer, 2001. [7] http://mlearn.ics.uci.edu/mlrepository.html. [8] Mattison R. Data Warehousing and Data Mining for Telecommunications, 1997, Artech House Publishers. [9] Shafer J. C., Agrawal R., Mehta M. SPRINT: A Scalable Parallel Classifier for Data Mining, Proc. 22nd Int. Conf. Very Large Databases (VLDB), 1996, Morgan Kaufmann. [10] Strobl C., Boulesteix A. L., Augustin T. Unbiased split selection for classification trees based on the Gini Index, Computational Statistics & Data Analysis, Elsevier, 52(1), 2007, s. 483-501. [11] Witten I., Frank E. Data Mining, New York 2000, Morgan Kaufman.
Fraktalowy model komponentowy Lech Baranowski, Ilona Bluemke Politechnika Warszawska, Wydział Elektroniki i Technik Informacyjnych Abstract: Component model is a method of components formalization and standardization. It describes components creation, usage and specification. In this paper Fractal component model is described. It contains components hierarchy, nonfunctional interfaces, optional interfaces. For this model a CASE tool Fractal Modeler was implemented. The tool enables users to create component systems and generates UML class diagram in IBM Rational Software Architect format. Keywords: software component, Component-based Software Engineering, component model 1. Wprowadzenie Komponentowa InŜynieria Oprogramowania (w skrócie CBSE z ang. Component- Based Software Engineering) to dziedzina InŜynierii Oprogramowania obejmująca projektowanie i tworzenie systemów informatycznych z komponentów. Komponenty są modułami (klockami) przeznaczonymi do wielokrotnego uŝycia w ramach wielu projektów. Wytwarza się je wewnątrz firmy, bądź kupuje na rynku. Pojedynczy system tworzy się w wyniku osadzania we wcześniej zaprojektowanej i przygotowanej architekturze komponentów. Następnie, komponenty konfiguruje się na potrzeby systemu i wzajemnej współpracy. Celem CBSE jest łatwiejsze, szybsze i tańsze budowanie systemów. Ponadto, tworzenie aplikacji z kilku duŝych modułów, zamiast z wielu drobnych elementów, zmusza twórców oprogramowania do dbania o przejrzystą architekturę, oraz do tworzenia i przestrzegania standardów co wywiera korzystny wpływ na jakość produktu. Istnieje wiele róŝnych definicji komponentu. Jedna z najczęściej przytaczanych jest definicja Clemensa Szyperskiego z 1996 roku: Komponent oprogramowania jest jednostką montaŝową, z określonymi interfejsami kontraktowymi i jawnymi zaleŝnościami kontekstowymi. Komponent oprogramowania moŝe być instalowany niezaleŝnie i podlega zestawianiu przez osoby postronne. [1] PowyŜsza definicja podkreśla cechy: niezaleŝność od kontekstu, sposób wdraŝania i interfejsy, które odróŝniają komponent od tradycyjnych modułów. Inna definicja Bill a Councill a i George a T. Heineman a zawiera pojęcie modelu komponentowego: Komponent to element oprogramowania, który spełnia załoŝenia modelu komponentowego i moŝe być niezaleŝnie wdroŝony i składany (tworzony) bez konieczności modyfikacji, bazując na odpowiednich standardach. [2] Model komponentowy definiuje czym są komponenty, jakie są nałoŝone na nie wymagania, jak są konstruowane, w jaki sposób są ze sobą łączone i integrowane
20 Lech Baranowski, Ilona Bluemke w ramach systemu [3]. NaleŜy jednak zaznaczyć, Ŝe szczegółowa i precyzyjna definicja modelu nie istnieje. Pojęcie modelu jest bardzo szerokie i obejmuje: technologie komponentowe szeroko stosowane w praktyce, których załoŝenia powstały na zasadzie ewolucji, a takŝe modele teoretyczne. Część modeli skupia się na strukturze komponentów, część zaś na modelowaniu interakcji między nimi [4]. Elementem, który łączy wszystkie podejścia jest chęć sformalizowania pewnych praktyk stosowanych przy wytwarzaniu komponentów i systemów na ich podstawie budowanych. Warto równieŝ zwrócić uwagę na duŝą róŝnorodność wśród istniejących modeli: część z nich ma podstawy wyłącznie inŝynierskie np.: Java- Beans [5,6] i COM [7,8], część matematyczne (mechanizmy oparte o sieci Petri [9], modele zachowań STS - Symbolic Transition Systems [10]); część jest dedykowana konkretnej dziedzinie gospodarki np. Koala [11] sprzętowi elektronicznemu, EJB [5,6] systemom biznesowym, część pozostaje uniwersalna (.NET [12]); część skupia się na strukturze i budowie komponentów (.NET, EJB), część na ich wzajemnych interakcjach (STS), inne uwzględniają oba aspekty (GRID [13]). W 2002 roku powstał fraktalowy model komponentowy (Fractal Component Model) [14] opisany w rozdziale 2. Jest to model otwarty i darmowy. Jego twórcy analizowali istniejące wcześniej modele (wprowadzenie do modelu zawiera odniesienia do modeli JavaBeans,.NET, CORBA [15]) i starali się zaadaptować najlepsze praktyki, jednocześnie starając się unikać błędów innych modeli. Model został dobrze przyjęty przez środowisko inŝynierskie, jest stosowany w projektach np. France Telecom. W Instytucie Informatyki PW zrealizowano aplikację Fractal Modeler, wspierającą model fraktalowy. Aplikacja, w skrócie opisana w rozdziale 3, pozwala na projektowanie systemów komponentowych. Zrealizowano mechanizm walidacji, pozwalający na wykrywanie błędów semantycznych związanych ze specyfikacją interfejsów. Narzędzie ma moŝliwość generacji diagramu klas dla narzędzia IBM Rational Software Architekt, co ułatwia implementację modelowanego systemu. W rozdziale 4 pokazano prosty przykład. 2. Struktura modelu Fractal W 2002 roku w wyniku współpracy francuskiej firmy komputerowej Groupe Bull, pracowników działu R&D France Telecom oraz INRIA (francuskiego narodowego instytutu badań informatycznych) powstało konsorcjum ObjectWeb. Celem jednego z pierwszych projektów było stworzenie fraktalowego modelu komponentowego (Fractal Component Model), którego pierwsza wersja została opublikowana w lipcu 2002 roku. Aktualna wersja pochodzi z roku 2004. Powodem powstania modelu Fractal [14] było ograniczone wsparcie wiodących istniejących modeli komponentowych (.NET, EJB, CORBA) dla rozszerzalności i adaptacji. PowyŜsze braki nie pozwalały między innymi na: moŝliwość dynamicznego wprowadzenia róŝnych kontrolerów własności niefunkcjonalnych komponentów, moŝliwość zmian stopnia konfigurowalności (kosztem wydajności), problemy z przenoszeniem środowisk modeli do róŝnych systemów i języków. W celu wypełnienia tej luki i bazując na dobrych cechach wymienionych modeli, projektanci wprowadzili lekki model komponentowy, znajdujący zastosowanie zarówno w niewielkich projektach, jak i w tych bardziej skomplikowanych.
Fraktalowy model komponentowy 21 Podstawową cechą modelu Fractal jest jego hierarchiczność. Na najwyŝszym poziomie system projektowany w oparciu o ten model składa się z jednego komponentu. Komponent ten, na niŝszych poziomach, jest dekomponowany na zestaw komponentów powiązanych zaleŝnościami interfejsowymi. Komponent nadrzędny deleguje realizację swojej funkcjonalności do odpowiednich komponentów podrzędnych. KaŜdy z komponentów podrzędnych moŝe być rozpatrywany jako komponent nadrzędny wobec swoich komponentów podrzędnych. Drugą waŝną cechą modelu jest poziom zgodności (określa jakie zalecenia modelu spełnia komponent). Poziomy zgodności zaleŝą od zestawu cech niefunkcjonalnych dostarczanych przez komponent. Wszelkie zalecenia modelu są opcjonalne model definiuje załoŝenia jakie muszą być spełnione przez obiekt by mógł on być zakwalifikowany jako komponent o odpowiednim poziomie zgodności. Zalecenia modelu są reprezentowane poprzez interfejsy, które naleŝy zaimplementować. Komponent, który implementuje odpowiedni zestaw interfejsów, realizuje dany zestaw zaleceń. Im wyŝszy poziom zgodności, tym mniejsze jest ryzyko napotkania trudności przy wykorzystaniu danego komponentu. Trzecią cechą modelu Fractal jest otwartość. śaden z mechanizmów wprowadzonych w modelu nie utrudnia dodawania i integracji nowych cech i właściwości. Model wprowadza moŝliwość współdzielenia danego komponentu przez inne komponenty. Komponent A moŝe być współdzielony (shared) przez komponenty B i C, nawet jeśli pomiędzy B i C nie ma powiązań i znajdują się one na róŝnych poziomach w hierarchii komponentów. PowyŜsza cecha sprawia, Ŝe struktura powiązań między komponentami przestaje być drzewem, a staje się grafem skierowanym bez cykli. Komponenty mogą być tworzone za pomocą fabryk komponentów (factories) specjalnych komponentów implementujących interfejsy niefunkcjonalne (interfejsy Factory, GenericFactory). Fabryki pozwalają równieŝ na tworzenie szablonów (tempalate). Szablon to rodzaj standardowej fabryki komponentów, która tworzy komponenty prawie izomorficzne względem siebie (izomorfizm nie dotyczy implementacji interfejsu fabryki). Komponenty stworzone z szablonu mają wszystkie właściwości takie jak szablon. RównieŜ ich podkomponenty są identyczne jak podkomponenty szablonu. Szczególnym przypadkiem komponentu jest komponent generujący (bootstrap component). Komponent generujący implementuje interfejs GenericFactory i moŝe tworzyć róŝne rodzaje komponentów, w tym równieŝ fabryki komponentów. 2.1. Interfejsy Interfejs jest zdefiniowany w modelu jako punkt dostępu do funkcjonalności komponentu. Interfejsy dzielą się na: funkcjonalne (odwołują się do wymaganej lub dostarczanej funkcjonalności), w tym: serwerowy (odbiera operacje wywołania), kliencki (wywołuje/emituje operacje wywołania), niefunkcjonalny, inaczej kontrolera (zarządza niefunkcjonalnymi aspektami komponentu).
22 Lech Baranowski, Ilona Bluemke Rysunek 1. Komponent Fractal jako czarna skrzynka. Źródło: [14] Na rysunku 1 pokazano komponent (ang. component) w postaci czarnej skrzynki, z widocznym interfejsem klienta (ang. client interface) oraz serwerowym (ang. server interface). Komponenty są ze sobą łączone poprzez wiązania interfejsów. Interfejs kliencki moŝe zostać połączony tylko z jednym interfejsem serwerowym (interfejs serwerowy moŝe być połączony z wieloma interfejsami klienckimi). Model definiuje aŝ dwanaście interfejsów niefunkcjonalnych, poprzez implementację których komponent realizuje odpowiednie zalecenia modelu: Component pozwala na uzyskanie informacji/referencji do pozostałych interfejsów danego komponentu. Interface dostarcza prostych mechanizmów refleksji wobec konkretnego interfejsu. AttributeController pozwala na zmianę atrybutów (właściwości) komponentu z zewnątrz (np. koloru ikonki, tekstu). BindingController dostarcza mechanizmów do zarządzania wiązaniami danego komponentu z innymi komponentami (dołączania lub odłączania). ContentController dostarcza mechanizmów do zarządzania połączeniami danego komponentu z jego pod-komponentami (dołączania lub odłączania). SuperController dostarcza metodę zwracającą referencję do rodzica danego komponentu, lub rodziców w przypadku komponentów dzielonych. NameController dostarcza metod do zarządzania lokalnymi nazwami komponentów. LifeCycleController dostarcza prostych mechanizmów do zarządzania cyklem Ŝycia komponentu. Komponent moŝe przyjmować stany: start i stop. Zmiana właściwości komponentu (w tym dołączanie pod-komponentów, wiązanie interfejsów, zmiana wartości atrybutów, itp.) moŝliwa jest tylko w stanie stop. GenericFactory pozwala na tworzenie komponentów róŝnego typu (metody które definiuje przyjmują parametry określające cechy tworzonych komponentów), jak równieŝ na tworzenie szablonów (template). Factory pozwala na tworzenie komponentów jednego określonego typu. TypeFactory pozwala na tworzenie interfejsów typu: InterfaceType i Component- Type. InterfaceType opisuje własności dowolnego interfejsu: jego nazwę, sygnaturę, liczność, opcjonalność, rolę (czy jest kliencki czy serwerowy).