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
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:
>=4.85
< 4.85
< 2.45
V3
Iris-
setosa V3
Iris- versicolor
Iris- virginica
>= 2.45
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: Iris- setosa, 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 !