Eksploracja danych w środowisku R Moi drodzy, niniejszy konspekt nie omawia eksploracji danych samej w sobie. Nie dowiecie się tutaj o co chodzi w generowaniu drzew decyzyjnych czy grupowaniu danych. Te informacje znajdziecie w osobnych materiałach do których źródła wam podaję w odpowiednich częściach tego konspektu. Jest on natomiast instrukcją do wykonania algorytmów drzew decyzyjnych oraz analizy skupieo (metody grupowania) dla wybranego przeze mnie zbioru danych irysów z repozytorium danych UCI Machine Learning Repository. Algorytmy wywołacie w środowisku R gdyż ma on zaimplementowane odpowiednie do tego pakiety. Część I: Drzewa decyzyjne Jeśli chcecie zdobyd szerszą wiedzę z zakresu drzew decyzyjnych, nie obejdzie się bez lektury wykładu: http://zsi.tech.us.edu.pl/~nowak/abdiped/w4.pdf. Lektura tego wykładu bądź innych materiałów dotyczących drzew decyzyjnych jest niezbędna byście dobrze zrozumieli ideę tej grupy metod eksploracji wiedzy. Drzewa decyzyjne budują z danych drzewo, którego odczyt w kierunku od korzenia do liścia, odpowiada regule, w której po spełnieniu określonych warunków podejmowana jest pewna decyzja. Atrybut decyzyjny (ang. class) występuje w drzewie jako liśd, zaś wierzchołki drzewa nie będące liśdmi są atrybutami warunkowymi. Istnieje wiele algorytmów budowy drzew decyzyjnych: ID3, CART, C4.5 itp. Ale ich poznanie nie jest tutaj niezbędne. Istotą tego dwiczenia jest próba zbudowania dla własnego zbioru danych drzewa decyzyjnego w środowisku R. Najpierw przybliżmy sobie zbiór irysów. Link: http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data. Opis danych znajdziecie pod linkiem: http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.names Po krótkim spojrzeniu na zbiór można bez problemów dostrzec, że dane dotyczą 150 kwiatów irysów, które opisano 4 cechami (atrybuty warunkowe): długośd i szerokośd płatka, oraz długośd i szerokośd łodygi. Dodatkowo mamy atrybut decyzyjny (class) który przyjmuje 3 możliwe wartości: Iris-setosa, Iris-Versicolor oraz Iris-virginica, które równo dzielą zbiór po 50 obserwacji dla każdej z tych klas (33.3%).
Najpierw musimy wczytad poprawnie zbiór danych. Jako że w pliku Iris.data nie ma nagłówków a dane są rozdzielone przecinkiem,, należy użyd odpowiedniej formuły w R, która wczyta dane do tablicy, i rozdzieli do osobnych kolumn dane rozdzielone separatorem,. Drzewa decyzyjne to taka specyficzna metoda budowy klasyfikatorów w której model klasyfikacji (tutaj drzewo) jest budowane nie z całego zbioru danych, ale z ich części. My więc wczytamy cały zbiór 1:150 obserwacji ale do wygenerowania drzewa użyjemy jedynie 75 obserwacje. Teraz załadujemy bibliotekę rpart, która dostarcza algorytmów generowania drzew decyzyjnych. Pozostaje nam wywoład algorytm do generowania drzewa decyzyjnego i jego wyświetlenie: Taki zapis na 1 rzut oka może się wydad nieczytelny. Przybliżę Wam go zaraz. Uwaga 1: Irysy$V5 to atrybut decyzyjny użyty do budowy drzewa decyzyjnego. Wiec jeśli w waszych zbiorach macie atrybut decyzyjny jako V11 to pamiętajcie by użyd odpowiedniej formuły. Uwaga 2: jeśli u was atrybut decyzyjny jest liczbą to trzeba go najpierw zamienid na cechę jakościową. Czyli np. dane 1,2,3 na : klasa1,klasa2 i klasa3. Jako pierwszy (tutaj czerwone kółeczko) widzimy numer wierzchołka w drzewie. Zielony prostokąt to warunek który musi byd spełniony by podjąd pewne decyzje (tutaj zakreślone na niebiesko). A więc odczyt tego przykładowego drzewa powinien byd następujący: Jeżeli V3 < 2.45 to class=iris-setosa Jeżeli V3>=2.45 to:
Jeżeli V3<4.85 to class=iris-versicolor Jeżeli V3>=4.85 to class=iris-virginica < 2.45 V3 >= 2.45 V3 < 4.85 >=4.85 Irissetosa Irisversicolor Irisvirginica W wyniku wywołania algorytmu widzimy także dodatkowe informacje (liczby): Oznaczają one odpowiednio prawdopodobieostwa przynależności do jednej z 3 znanych nam już teraz klas irysów. Widad, że w wierszu drugim (który jest jednocześnie już liściem w drzewie (o czym świadczy m.in. znak * na koocu)) mamy prawdopodobieostwo przynależności do 1 klasy równe 1.00, do drugiej klasy równe 0 i do 3 klasy także 0. Dlatego 0 gdyż tutaj nie zaklasyfikowano obserwacji innych niż te z klasy 1. W przypadku wierzchołka nr 6 widzimy, że nowy obiekt który spełni warunki: V3 > 2.45 i jednocześnie V3 < 4.85, zostanie zaklasyfikowany przez drzewo do klasy iris=versicolor ale jednocześnie dowiadujemy się, że będzie tak dlatego, że prawdopodobieostwo, że trafi on do klasy 1 wynosi 0, do klasy 3: 0.09 a do klasy 2: 0.90 a więc najwięcej stąd taka klasyfikacja. Graficzna reprezentacja drzewa możliwa będzie dzięki zastosowaniu funkcji: Czego efektem będzie rysunek:
Który odczytujemy od korzenia do liści.i widad, że potwierdza to opis uzyskany przez wywołanie funkcji rpart (wyżej). Całośd drzewa możemy odczytad jako następujący zbiór reguł: Jeśli V3 < 2.45 to Iris-Setosa Jeśli V3 >= 2.45 i V3 <4.85 to Iris-versicolor Jeśli V3 >=2.45 I V3>=4.85 to iris-virginica Część II: Analiza skupień Niezbędna jest lektura wykładu: http://zsi.tech.us.edu.pl/~nowak/abdiped/w5.pdf jeśli chcecie zdobyd wiedzę z zakresu analizy skupieo. Generalnie analiza skupieo pozwala znajdowad w dużych zbiorach danych pewne grupy obiektów, które są do siebie podobne biorąc pod uwagę ich cechy (atrybuty warunkowe). Nie musi byd tu określony atrybut decyzyjny ( w drzewach decyzyjnych musi!). Ważne jednak, że nie da się algorytmami, które tu zostaną wykorzystane pogrupowad danych nienumerycznych. Wyróżnia się 2 typy algorytmów: hierarchiczne i niehierarchiczne. Jak się domyślacie, pierwsze budują drzewa z obiektów (hierarchie), drugie tworzą struktury, które nie mają hierarchii. Wśród tych niehierarchicznych przedstawimy algorytm k-średnich (o którym m.in. wyczytacie w wykładzie, którego link podaję wyżej) oraz hierarchiczny aglomeracyjny (o nim też znajdziecie informacje w ww. wykładzie). W algorytmach niehierarchicznych musimy określid liczbę grup która ma zostad utworzona, co nie zawsze jest możliwe. Dlatego często korzysta się z algorytmów hierarchicznych, które takich wymagao nie mają. Mają jednak inne wady. Najpierw podejrzymy raz jeszcze z jakimi danymi mamy do czynienia. Można użyd funkcji summary, która wyświetli podstawowe statystyki dotyczące każdej z analizowanych cech.
Widzimy, że atrybut decyzyjny (w typ wypadku V5) ma 3 klasy, więc najpierw spróbujemy sprawdzid czy nie biorąc pod uwagę tego atrybutu, algorytm analizy skupieo faktycznie przydzieli nam poprawnie 150 obiektów do tych 3 klas: Irissetosa, Iris-versicolor i Iris-virginica. Najpierw musimy zatem poddad obróbce nasz wejściowy zbiór tak by nie był brany pod uwagę atrybut decyzyjny (bo w zbiorze irysów taki atrybut występuje, jest on dodatkowo nienumeryczny, co uniemożliwiłoby wykonanie algorytmu): Spreparowaliśmy sobie jakby nowy zbioru o nazwie irysy_grupowane który jest obcięciem dotychczasowego zbioru 150 irysów o atrybut decyzyjny (a więc tylko pierwsze 4 kolumny). Następnie wywołaliśmy metodę kmeans która jest odpowiednikiem algorytmu k-średnich i spróbujemy podzielid tym algorytmem zbiór irysy_grupowane na 3 grupy. Wyświetlimy wyniki wywołując metodę print Widzimy m.in. rozkład średnich w grupach (sekcja Cluster means ). W sekcji Clustering vector widzimy przynależnośd każdego ze 150 obiektów do 3 klas. Pozostałe informacje nie są istotne na tym etapie. Teraz wywołamy funkcję do wyrysowania struktury skupieo. Wystarczy wywoład metodę plot i podad jej jako argumenty źródłowy zbiór irysów:
Efekt jest mało czytelny. Widzimy rozkład obiektów osobno dla każdej z cech: V1, V2, V3, V4. Jak dołożyd kolory? Co w efekcie da
Grupowanie realizowane jest także poprzez metodę mclust z pakietu o tej samej nazwie. W podstawowej wersji wywołania metody nie podaje się liczby skupieo (grup), a jedynie zbiór danych, które chcemy pogrupowad. Możemy użyd komend: Uwaga: Najpierw trzeba zainstalowad pakiet mclust a potem go załadowad wybierając z menu R opcję load packages i wybrad wspomniany pakiet.
Metody hierarchiczne Efekt: Jeżeli dla tego samego zbioru danych chcemy zastosowad algorytm grupowania hierarchicznego, możemy użyd funkcji hclust a do jej graficznej reprezentacji funkcji plot, tak jak to pokazuje kod:
Efektem będzie wykres zwany dendrogramem, z tym, że będzie on mało czytelny dla dużych zbiorów obserwacji, z tego względu, że wszystkie liście drzewa są wyrysowane na jednym poziomie na wykresie, i zwyczajnie nachodzą na siebie. Klasycznym algorytmem hierarchicznym jest właśnie algorytm aglomeracyjny, którego jednym z wersji jest algorytm o nazwie agnes (ang. AGlomerative NESting). Został on również zaimplementowany w środowisku R i realizowany jest przez wywołanie komendy o tej samej nazwie co nazwa algorytmu a więc agnes: Wymagało to :
Ważnym aspektem algorytmu jest wybór metody tworzenia kolejnych skupieo (na kolejnych poziomach w hierarchii). Są metody m.in. average, single oraz complete. Występują istotne różnice między nimi. Możemy zaprezentowad wyniki grupowania w zależności od wybranej metody. Utworzymy jeden obraz na który naniesiemy 3 różne wykresy: Daje efekt: Koniec! Waszym zadaniem jest teraz dla swojego zbioru danych wczytad go, a następnie spróbowad jeśli nie dla całego zbioru to dla jego części zbudowad i opisad drzewo decyzyjne oraz pogrupowad dane zarówno algorytmami niehierarchicznym jak i hierarchicznym. Powodzenia!