• Nie Znaleziono Wyników

Analiza skupień Konspekt do zajęć: Statystyczne metody analizy danych

N/A
N/A
Protected

Academic year: 2021

Share "Analiza skupień Konspekt do zajęć: Statystyczne metody analizy danych"

Copied!
17
0
0

Pełen tekst

(1)

Analiza skupień

Konspekt do zajęć: Statystyczne metody analizy danych

Agnieszka Nowak-Brzezińska 28 maja 2012

1 Wprowadzenie

Celem laboratorium jest analiza skupień wybranych zbiorów danych w środowisku R. Jest to metoda dokonująca grupowania (podziału) obiektów danego zbioru na względnie jednorodne klasy. Podstawą grupowania w większości algorytmów jest podobieństwo pomiędzy obserwacjami - wyrażone przy pomocy funkcji (me- tryki) podobieństwa. Istnieje wiele implementacji algorytmów analizy skupień w środowisku R, w ramach zajęć zostaną omówione te realizujące algorytmy:

• niehierarchiczne: k - średnich dostępny z funkcją k-means oraz k-medoidów dostępny z funkcją pam,

• hierarchiczne: agnes (ang. AGlomerative NESting) (dostępny z funkcją agnes) oraz hierarchiczny algorytm grupowania dostępny z funkcją hclust i możliwy do prezentacji graficznej dzięki funkcji plot.

Każdy z pakietów uzupełniony jest o dokumentację, której znajomość pozwala wykonać poprawne analizy danych:

• http://cran.r-project.org/web/packages/cluster/cluster.pdf

• http://stat.ethz.ch/R-manual/R-patched/library/stats/html/00Index.

html

• http://cran.r-project.org/web/packages/mclust/mclust.pdf

2 Analiza skupień

Grupowanie (ang. data clustering), zwane również analizą skupień lub klasy- fikacją nienadzorowaną polega na podziale pewnego zbioru danych O

O ={xi= (xi1, . . . , xid)|i=1,...,N}

gdzie xi jest d-wymiarowym wektorem cech opisujących obiekt należący do zbioru, na pewne podzbiory wektorów (grupy). Podstawowym założeniem doty- czącym wynikowego podziału jest homogeniczność obiektów wchodzących w skład jednej grupy oraz heterogeniczność samych grup – oznacza to, że wektory stanowiące jedną grupę powinny być bardziej podobne do siebie niż do wektorów pochodzących z pozostałych grup. Wynikiem grupowania N -elementowego zbioru O na c grup jest zazwyczaj tzw. macierz podziału B o wymiarze c× N, w

(2)

której dany element bik oznacza stopień przynależności wektora xk do grupy Gi (wartość 1 świadczy o całkowitej przynależności wektora do grupy, nato- miast 0 oznacza, że wektor do danej grupy wogóle nie należy). Ze względu na przyjęte założenia dotyczące przynależności wektorów do grup mówi się o trzech głównych typach podziałów:

P odzc(N ) = G1, . . . , Gc|Gi⊆O

Podział twardy (ang. hard ) uzyskuje się w efekcie takiego grupowania, w którym każdy wektor należy tylko do jednej grupy. Macierz podziału spełnia wtedy następujące warunki:

∀1 ≤ i ≤ c , 1 ≤ k ≤ N : bik∈ {0, 1}, co oznacza, że każdy wektor należy albo nie należy do danej grupy,

∀1 ≤ k ≤ N:c

i=1bik= 1, co oznacza, że wektor należy tylko do jednej grupy,

∀1 ≤ i ≤ c : 0 <N

k=1bik< N , co z kolei oznacza, że wszystkie grupy są niepuste.

Istnieją także podziały: rozmyty oraz posybilistyczny ale z uwagi na fakt, że nie są one tematem tego opracowania, nie będziemy ich opisywać. Biorąc pod uwagę sposób tworzenia skupień, techniki analizy skupień można podzielić na dwie podstawowe kategorie: niehierarchiczne oraz hierarchiczne. Celem algoryt- mów niehierarchicznych jest znalezienie takiego podziału zbioru na zadaną liczbę podzbiorów, aby uzyskać optymalną wartość pewnego kryterium. Optymalizację kryterium osiąga się np. poprzez iteracyjne przemieszczanie obiektów między grupami. Metody hierarchiczne konstruują (jak sama nazwa sugeruje) pewną hierarchię skupień, która najczęściej reprezentowana jest graficznie w postaci drzewa binarnego nazywanego dendrogramem. W liściach takiego drzewa zna- jdują się elementy analizowanego zbioru, węzły natomiast stanowią ich grupy.

Najbardziej pożądane cechy, jakich oczekuje się od algorytmów grupujących, to m.in.:

• jak najmniejsza liczba parametrów, które trzeba dostarczać z zewnątrz,

• jak najmniejsza krotność analizy elementów zbioru uczącego,

• niewrażliwość na różnice w kształcie, wielkości czy gęstości grup,

• zminimalizowany wpływ danych odstających na wynik przetwarzania,

• możliwość przetwarzania różnych typów danych (ciągłych, dyskretnych oraz kombinacji obu jednocześnie),

• niezależność wyniku od kolejności, w jakiej podawane są dane,

• skalowalność rozumiana jako zdolność do przetwarzania bardzo dużych zbiorów danych,

• przystosowanie do analizy danych o różnej wymiarowości.

(3)

2.1 Metody niehierarchiczne

Algorytmy w ramach tych metod poszukują najlepszego podziału zadanego zbioru danych poprzez stopniową optymalizację, tzn. poprawę pewnych wskaźników jakości grupowania, uzyskiwanego w kolejnych etapach przetwarzania zbioru wejściowego. Początkowego podziału dokonuje się najczęściej w sposób losowy.

Znaczącym z punktu widzenia końcowej klasyfikacji parametrem wejściowym jest liczba k, którą przekazuje się jako wartość zadaną lub wyznacza w sposób losowy — decyduje ona o liczbie skupień otrzymanych w wyniku działania al- gorytmu. Z tego samego powodu istotnym jest dobór odpowiedniej funkcji kry- terialnej, którą mierzona będzie jakość gru powania (stopień rozproszenia wek- torów w poszczególnych grupach). Dziedziną funkcji kryterialnej J jest zbiór danych wejściowych O oraz wektor parametrów v = (v1, . . . , vk), gdzie k oz- nacza liczbę grup, a vi wektor parametrów określających i-tą grupę. Skład- owe wektora v stanowią reprezentacje poszczególnych skupień i nazywane są reprezentantami (prototypami) grup. Doboru odpowiedniej funkcji kryterialnej dokonuje się głównie w zależności od oczekiwanego kształtu grup.

2.1.1 Ogólny schemat postępowania

W przypadku metod iteracyjnych algorytm grupowania składa się z następują- cych kroków:

1. wstępna inicjalizacja : wybierz k obiektów, które będą stanowić prototypy grup,

2. przypisuj pozostałe obiekty do grup tak, aby osiągnąć najlepszy podział (zgodnie z przyjętą funkcją kryterialną),

3. dla każdego otrzymanego skupienia wybierz ponownie prototyp,

4. powtarzaj poprzednie kroki tak długo, jak długo przyjęte kryterium będzie się poprawiać.

Wadą metody jest jej zachłanność, przez co w wyniku otrzymuje się jedynie op- timum lokalne i nie ma gwarancji osiągnięcia optimum globalnego. Największą jej zaletą jest łatwość implementacji i stosunkowo mała złożoność obliczeniowa.

2.1.2 Algorytm k-średnich

Ten klasyczny algorytm analizy skupień, na wstępie ustala wartość parametru k — decydującą o liczbie grup, które zostaną wyodrębnione ze zbioru danych.

W sposób losowy wybiera się k reprezentantów tak, aby byli oni możliwie jak najbardziej od siebie oddaleni. Wybrane elementy stanowią zalążki grup (proto- typy). W kolejnym kroku każdy element zbioru przypisywany jest do najbliższej mu grupy. Na tym etapie wyznaczone są grupy początkowe. Dla każdej z grup obliczany jest jej środek na podstawie średniej arytmetycznej współrzędnych obiektów do niej należących. Następnie rozważane i ponownie przydzielane do najbliższej (ze względu na odległość od poszczególnych centroidów) grupy są wszystkie obiekty. Tak długo nowe środki grup są wyznaczane i sprawdzana jest poprawność przynależności elementów do grup, jak długo występuje mi- gracja obiektów pomiędzy skupieniami. Jeśli w kolejnych dwóch przebiegach algorytmu nie nastąpi żadna zmiana w dokonanym podziale (mówi się wtedy o

(4)

osiągnięciu stabilizacji), przetwarzanie dobiega końca. Jak widać, w metodzie tej liczba grup jest stała i zgodna z wartością parametru k, zmieniać się może tylko przynależność obiektów do grup. W metodzie k-średnich (ang. k-means) poszukiwanie optymalnego podziału odpowiada wyznaczeniu takich prototypów grup, które minimalizują następującą funkcję kryterialną:

J (v, B) =

k i=1

N k=1

bikd2(vi, xk).

W funkcji tej d(v, x) oznacza odległość elementu reprezentowanego przez wek- tor x od grupy wyznaczonej przez prototyp (centroid, środek grupy) v, N to liczebność zbioru O, B to macierz podziału, a pozostałe parametry mają takie same znaczenie jak podano wcześniej. Zasadę działania metody można opisać następująco:

1. podziel wstępnie zbiór na k skupień,

2. dla każdego skupienia policz jego centroid (środek ciężkości grupy), 3. przypisz każdy z elementów zbioru do najbliższej mu grupy ( odległość od

grupy jest w tym przypadku tożsama z odległością od centroidu), 4. powtarzaj dwa poprzednie kroki tak długo, jak długo zmienia się przy-

porządkowanie obiektów do skupień.

Przykład podziału obiektów do k grup przedstawia rysunek 1.

Rysunek 1: Przykład podziału obiektów do k skupień

Niestety algorytm k-średnich ma wiele wad. Już na wstępie konieczne jest zdefiniowanie liczby grup, chociaż zazwyczaj nie wiadomo, jak wiele grup wys- tępuje w przetwarzanym zbiorze. Początkowe centroidy wybierane są w sposób losowy, podczas gdy ich wybór ma decydujący wpływ na jakość otrzymanego grupowania. Metoda jest zbieżna do lokalnego optimum, a jednokrotne wyko- nanie algorytmu zazwyczaj nie daje w wyniku optymalnego podziału anali- zowanego zbioru. Ponadto algorytm jest mało odporny na zaszumione dane.

Mimo wszystkich wad jest to wciąż jedna z najczęściej wykorzystywanych metod iteracyjnych, ponieważ jest ona prosta w implementacji, a jej niewielka złożoność obliczeniowa wynosi O(tkn), gdzie n jest liczebnością zbioru, k jest liczbą grup i t jest liczbą iteracji, przyczym k, t ≪ n. Konieczność wstępnego określenia

(5)

liczby podgrup można zrekompensować, wywołując metodę z różnymi wartości- ami parametru k i oceniając otrzymane podziały za pomocą jakiegoś kryterium oceny jakości grupowania.

2.1.3 Algorytm k-medoidów

Wady algorytmu k-średnich są na tyle istotne, że często dąży się do zastosowa- nia innych algorytmów w ramach grupy metod niehierarchicznych, ale takich, które wolne są od tychże wad. Jednym z takim algorymtów jest k-medoid, który to w odróżnieniu od algorytmu k-średnich w kolejnych etapach algorytmu nowe prototypy grup wyznaczane są spośród obiektów należących do rozpatry- wanego zbioru. Wystarczającym dla zrozumienia idei tego algorytmu jest wgląd w tutorial dostępny na stronie http://en.wikipedia.org/wiki/K-medoids.

W środowisku R realizuje go funkcja pam() z pakietu cluster.

2.2 Metody hierarchiczne

Metody niehierarchiczne mają to do siebie, że formują pojedynczy podział, który dostarcza ”płaskiej” charakterystyki zbioru. Tymczasem często spotykaną sytuacją są grupy, które zawierają podgrupy, te z kolei składają się z podgrup itd. Tę właśność doskonale oddają algorytmy hierarchiczne. W zależności od tego jaki zastosujemy algorytm grupowania hierarchicznego: aglomeracyjny czy deglomeracyjny, inny jest przebieg algorytmu, oraz jego ostateczny rezultat.

Metody aglomeracyjne rozpoczynają tworzenie hierarchii od podziału zbioru n obserwacji na n jednoelementowych grup, które w kolejnych krokach są ze sobą scalane. Metody deglomeracyjne inicjowane są jedną grupą n-elementową, a hi- erarchia tworzona jest poprzez sukcesywny podział na coraz mniejsze grupy. W praktyce rzadko dąży się do utworzenia pełnej hierarchii podziałów, ponieważ ostatni jej etap (tzn. n grup jednoelementowych lub jedna grupa n-elementowa) nie wnosi zbyt wielu nowych informacji na temat charakterystyki analizowanego zbioru danych. Zazwyczaj proces tworzenia hierarchii przerywa się w pewnym, z góry założonym momencie, kiedy zostanie spełniony tzw. warunek stopu.

Warunkiem takim może być np. pożądana liczba skupień, stopień (nie) podobieństwa pomiędzy wydzielonymi grupami itp. Optymalnym wydaje się kryterium maksy- malnego podobieństwa wewnątrz grup - minimalnego między grupami. Inaczej mówiąc, proces aglomeracji jest uzasadniony tak długo dopóki podobieństwo wewnątrz tworzonych grup jest zawsze większe niż podobieństwo między którąkol- wiek z grup.

2.2.1 Dendrogram

Najbardziej popularnym i naturalnym sposobem reprezentacji wyników grupowa- nia hierarchicznego jest graficzny zapis w postaci drzewa binarnego nazywanego dendrogramem. Zapis taki można wzbogacić o informację dotyczącą stopnia niepodobieństwa (dendrogram niepodobieństwa) pomiędzy poszczególnymi gru- pami poprzez dodanie osi skojarzonej zużytą miarą niepodobieństwa — poziom łączenia grup odpowiada wówczas wartości ich niepodobieństwa. Fakt, że budu- jemy drzewo binarne jest bardzo istotny. Okazuje się, że będąc na k-tym poziomie w drzewie wiemy na pewno, że utworzonych jest wówczas c grup, gdzie c = n− k + 1. Wobec tego poziom pierwszy odpowiada podziałowi na n

(6)

grup, natomiast poziom n-ty jednej grupie. Przykład dendrogramu przedstawia rysunek 2.

Rysunek 2: Przykład dendrogramu

2.2.2 Algorytmy aglomeracyjne

Najprostsza wersja algorytmu aglomeracyjnego składa się z następujących kroków:

1. niech c będzie oczekiwaną liczbą grup, a N liczebnością analizowanego zbioru (oczywiście c ≤ N); wstępna inicjalizacja: podziel zbiór na N jedno elementowych grup,

2. znajdź dwie najbliższe (w sensie przyjętej miary) grupy; nazwijmy je Gi oraz Gj,

3. scal ze sobą Gi i Gj zmniejszając w ten sposób liczbę grup o 1,

4. powtarzaj dwa poprzednie kroki tak długo, aż liczba otrzymanych grup osiągnie założoną na wstępie wartość c.

Niezwykle istotne są kroki: 2 i 3. Otóż znajdowanie dwóch najbliższych grup, za- leży od wybranej metryki podobieństwa bądź odległości. Nie wszystkie bowiem miary nadają się do określonego typu danych. Źle dobrana metryka może wskazywać jako najbardziej w danym momencie podobne do siebie grupy, które tak naprawdę wcale podobnymi nie są. Jeszcze ważniejszym i bardziej wpły- wowym - jest sposób (określony krokiem 3) scalenia ze sobą grup Gi oraz Gj, gdyż wiąże się on także z budową nowej grupy Gk, ale i jej reprezentanta. W pierwszym kroku algorytmu, podział ma postać:

P odz0N(N ) ={Gi={xi}, i = 1, ..., N}

a w kolejnych krokach algorytmu przyjmuje odpowiednio postać:

P odztN−t(N ) ={P odztN−1−t+1(N ){Gi, Gj}} ∪ {Gk}

, gdzie t oznacza kolejny krok algorytmu, a jednocześnie poziom w hierarchii.

W każdym kroku spośród wszystkich par grup (Gr, Gs) wybiera się taką parę (Gi, Gj), że D(Gi, Gj) = min D(Gr, Gs), Gr, Gs ∈ P odztN−1−t+1, Gr ̸= Gs. W macierzy niepodobieństwa P (t) postaci:

P (i, j, t) = D(Gi, Gj), i, j = 1, ..., N− t,

(7)

konieczna jest po każdym scaleniu dwóch grup Gi i Gj aktualizacja, polegająca na tym, że w usuwa się z macierzy kolumnę o większym indeksie i lub j, a w kolumnie o mniejszym indeksie wpisujemy wartości odległości każdej grupy do nowo powstałej grupy Gk. Metody łączenia obiektów związane są właśnie z obliczeniem tej odległości. Jeśli Gk = Gi∪ Gj, Gk ∈ P odztN−t(N ) oraz Gi, Gj, Gs ∈ P odztN−1−t+1(N ) są parami różne, macierz niepodobieństwa jest aktualizowana w następujący sposób:

• dla metody najbliższego sąsiada: D(Gk, Gs) = min{D(Gi, Gs), D(Gj, Gs)},

• dla metody najdalszego sąsiada: D(Gk, Gs) = max{D(Gi, Gs), D(Gj, Gs)},

• dla metody średniej: D(Gk, Gs) = 12{D(Gi, Gs) + D(Gj, Gs)}

Metoda najbliższego sąsiada jest najczęściej wykorzystywana, ze względu na małą złożoność, oraz dużą intuicyjność wybranego podobieństwa. Jednak jest też podatna na tzw. zjawisko łańcuchowania, polegające na przypisywaniu długich ciągów punktów do tego samego skupienia (w odróżnieniu od tworzenia zwartych kulistych skupień), co — w zależności od oczekiwanego kształtu grup

— może być traktowane jako wada algorytmu. Na przykład, jeśli pomiędzy dwoma wyraźnie odrębnymi, kulistymi skupieniami znajdzie się punkt tworzący pewnego rodzaju most je łączący, metoda dokona niepożądanego scalenia obu skupień i w rezultacie powstanie duża, wydłużona grupa, niezgodna z właściwą charakterystyką zbioru. Inną wadą tej metody łączenia skupień jest podat- ność na szumy oraz niewielkie zmiany pozycji obiektów. Ilustracją graficzną tej metody jest rysunek 3.

Rysunek 3: Metoda najbliższego sąsiada

Metoda najdalszego sąsiada — w przeciwieństwie do poprzedniej — nie ma tendencji do przyrostu wydłużonych skupień. Łączone są skupienia zawierające punkty, które w ustalonej przestrzeni metrycznej są położone najdalej od siebie.

Metoda wykazuje tendencję do grupowania elementów znajdujących się na brze- gach obszaru określoności w jedno skupienie, natomiast bardziej wewnętrzne punkty przydzielane są do reszty zadeklarowanych skupień. Ilustracją graficzną tej metody jest rysunek 4.

Metody najbliższego i najdalszego sąsiada reprezentują dwa skrajne podejś- cia do pomiaru odległości pomiędzy skupieniami. Żadne z nich nie jest pozbaw- ione wad, podczas gdy użycie metod pośrednich wydaje się być najbardziej oczywistym sposobem na ich uniknięcie. Ilustracją graficzną tej metody jest rysunek 5.

(8)

Rysunek 4: Metoda najdalszego sąsiada

Rysunek 5: Metoda średniej odległości

Podane miary nie wyczerpują wszystkich możliwości definiowania kryterium kolejnych połączeń. Metody te mogą być zestawiane ze sobą tworząc nowe bardziej specjalizowane rozwiązania.

3 Analiza skupień w środowisku R

Zakładamy, że przed wykonywaniem analiz w środowisku R student zapoznał się z podstawowymi algorytmami grupowania. Podstawową kwestią jest podział metod analizy skupień na hierarchiczne i niehierarchiczne (k-optymalizacyjne).

Istotnym na tym etapie jest świadomość, że efektem metody hierarchicznej jest algomeracja bądź deglomeracja obiektów, która przyjmuje najczęściej postać dendrogramu (drzewo z korzeniem i liścmi). Metody niehierarchiczne - jak sama nazwa wskazuje - nie budują hierarchii. Tutaj obiekty mogą być prezentowane jako punkty na płaszczyźnie, i zakłada się, że te z punktów, które na wykresie rozrzutu są w dość bliskiej odległości wobec siebie, tworzą skupienie. Proble- mem jest fakt, że algorytmy (te bardziej klasyczne) wymagają podania z góry liczby skupień, podczas gdy bardzo często nie znamy tej liczby. Stosuje się oczywiście różne modyfikacje, które starają się tę optymalną liczbę skupień os- zacować, jednak proces taki wymaga wielokrotnych uruchomień dla zmienionych parametrów, co znaczenie wydłuża czas grupowania. Inną zupełnie kwestią jest spory zbiór wad tych algorytmów, które czasami mogą wręcz uniemożliwić ich zastosowanie.

Wykorzystanie metod analizy skupień w środowisku R jest możliwe dzięki użyciu następujących pakietów: standardowego pakietu stats, pakietu cluster oraz dodatkowo pakietów flexclust i mclust02. Zakładamy, że czytelnikowi znany jest zbiór danych o nazwie IRIS z repozytorium UCI Machine Learning udostępniony również w ramach środowiska R. Zbiór przedstawia informacje o 150 kwiatach (irysach) opisanych czterema cechami numerycznymi (Sepal.Length, Sepal.W idth, P etal.Length, P etal.W idth) i jednym atrybutem jakościowym species (klasyfikującym kwiaty do jednej z trzech grup: setosa, virginica lub versicolor). Wiedząc, że algorytm k-średnich (ang. k-means) wymaga, aby wszystkie cechy były ilościowymi (podczas gdy ostatnia kolumna w zbiorze IRIS

(9)

zawiera dane jakościowe) pominiemy tę kolumnę w obliczeniach i przedstawimy podstawowe informacje o takim zbiorze danych, czego efektem będzie następu- jący ciąg informacji pakietu R:

> dane = iris[,1:4]

> summary(dane)

Sepal.Length Sepal.Width Petal.Length Petal.Width Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 Median :5.800 Median :3.000 Median :4.350 Median :1.300 Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500

>

Wywołanie algorytmu k-średnich gdy znamy optymalną liczbę skupień (dla zbioru IRIS to 3 grupy) jest dość proste. Realizacja grupowania przy użyciu metody k-means może być następująca:

> klaster = kmeans(dane,3)

> plot(dane, pch=klaster$cluster)

czego wynikiem będzie wykres z rozkładem wartości obserwacji w zbiorze iris osobno dla każdej z 4 cech opisujących te obserwacje: P etal.Length, P etal.W idth, Sepal.Length, Sepal.W idth. Efekt będzie zbliżony do tego co przedstawia rysunek refirisA1.

Sepal.Length

2.0 3.0 4.0 0.5 1.5 2.5

4.55.56.57.5

2.03.04.0

Sepal.Width

Petal.Length

1234567

4.55.56.57.5

0.51.52.5

1234567 Petal.Width

Rysunek 6: Realizacja funkcji kmeans dla zbioru iris - cztery zmienne

Gdybyśmy chcieli jednak sprawdzić jak wygląda podział obiektów na również 3 skupienia, ale biorąc pod uwagę jedynie dwie pierwsze zmienne je opisujące:

Sepal.Length oraz Sepal.W idth, wówczas koniecznym jest wywołanie następu- jących komend środowiska R:

dane = iris[,1:2]

> klaster = kmeans(dane,3)

> plot(dane, pch=klaster$cluster)

, czego efekt będzie zbliżony do tego, co przedstawia rysunek 7.

(10)

4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0

2.02.53.03.54.0

Sepal.Length

Sepal.Width

Rysunek 7: Realizacja funkcji kmeans dla zbioru iris - dwie zmienne

Wykres będzie czarnobiały i bez dodatkowych opcji odnośnie kolorów czy sym- boli nie będzie zbyt atrakcyjny wizualnie. Dlatego warto wspomóc się chociażby ingerencją w kolorystykę (parametr col) oraz symbol obserwacji (parametr pch, np pch = 3 to symbol ’+’). Wynikiem wywołania następujących komend:

> cl<-kmeans(dist(dane),3,20)

> plot(dane,pch=19,col=cl$cluster,main="k-means") będzie wykres taki jak na rysunku 8.

Problem z umiejętnością oszacowania prawidłowej liczby skupień obrazuje następujący fragment kodu dla środowiska R:

> cl<-kmeans(dist(dane),8,20)

> plot(dane,pch=18,col=cl$cluster,main="k-means") którego efektem będzie następujący wykres (rysunek 9):

Wykresy tak generowane są odpowiednio jasne do interpretacji gdy znamy praw- idłową liczbę grup. Jednak gdy dla zbioru IRIS próbowalibyśmy zbudować nie 3 (jak być powinno) lecz 8 grup, otrzymany podział nie jest już wogóle czytelny.

Podobnie widać to, gdy zmieniejszymy liczbę zmiennych analizowanych w pro- cesie grupowanie obiektów zbioru IRIS. Mianowicie, gdy weźmiemy pod uwagę tylko dwie pierwsze zmienne: Sepal.Lenght oraz Sepal.W idth, i spróbujemy podzielić te 150 obserwacji na 8 grup, wykonamy następujący kod środowiska R:

> dane = iris[,1:2]

> cl<-kmeans(dist(dane),8,20)

> plot(dane,pch=18,col=cl$cluster,main="k-means")

a efekt takiego wykonania będzie taki jak to przedstawia rysunek 10.

(11)

Sepal.Length

2.0 3.0 4.0 0.5 1.5 2.5

4.55.56.57.5

2.03.04.0

Sepal.Width

Petal.Length

1234567

4.5 5.5 6.5 7.5

0.51.52.5

1 2 3 4 5 6 7

Petal.Width k−means

Rysunek 8: Realizacja funkcji kmeans dla zbioru iris

Poświęcając więcej uwagi funkcji kmeans, zauważymy, że ogólna formuła tej funkcji ma postać:

kmeans(x, centers, iter.max = 10, nstart = 1,

algorithm = c("Hartigan-Wong", "Lloyd", "Forgy",

"MacQueen")) , gdzie:

x - to macierz z danymi podlegającymi grupowaniu,

centers - to albo liczba skupień, które chcemy utworzyć, albo podane początkowe centra skupień. Jeśli jest to liczba skupień, wówczas procedura wyboru po- tencjalnych centrów skupień odbywa się w sposób losowy,

iter.max - to maksymalna liczba iteracji,

nstart - jeśli w center podano liczbę grup, to parametr nstart określa liczbę losowych zbiorów branych pod uwagę w grupowaniu,

algorithm - określa, który algorytm będzie wykonany spośród dostępnych:

Hartigan and Wong (1979) (domyślny), MacQueen (1967), Lloyd (1957) czy Forgy (1965).

(12)

Sepal.Length

2.0 3.0 4.0 0.5 1.5 2.5

4.55.56.57.5

2.03.04.0

Sepal.Width

Petal.Length

1234567

4.5 5.5 6.5 7.5

0.51.52.5

1 2 3 4 5 6 7

Petal.Width k−means

Rysunek 9: Realizacja funkcji kmeans dla zbioru iris - 8 grup

Odpowiednio manipulując tymi parametrami można optymalizować budowane skupienia obiektów w danym zbiorze.

Grupowanie realizowane jest także poprzez metodę mclust z pakietu o tej samej nazwie. W podstawowej wersji wywołania metody nie podaje się liczby skupień, a jedynie zbiór danych, które chcemy pogrupować (patrz poniżej na komendy R).

> dane.mcl<-Mclust(dane)

> skupienia<-dane.mcl$classification

> plot(dane,pch=19,col=skupienia,main="Mclust")

Utworzony w wyniku wykres będzie bardzo podobny do tego utworzonego przez metodę kmeans. W pakiecie stats dostępna jest funkcja, pozwalająca klasyfikować obiekty do jednej z utworzonych grup, pozwalając jednocześnie na sterowanie nie tylko liczbą tworzonych skupień, ale i poziomem odcięcia w tworzonym drzewie. Mowa tutaj o funkcji cutree. Ogólna formuła ma postać:

cutree(tree, k = NULL, h = NULL) gdzie odpowiednio:

tree - jest rezultatem wywołania funkcji hclust, k - liczba skupień,

h - poziom odcięcia drzewa (tree).

(13)

4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0

2.02.53.03.54.0

k−means

Sepal.Length

Sepal.Width

Rysunek 10: Realizacja funkcji kmeans dla zbioru iris - 8 grup - 2 zmienne

Przykład komendy zawierającej wywołanie tej funkcji wygląda następująco dla znanego już zbioru iris:

> hc <- hclust(dist(dane))

> cutree(hc, k=3)

Rezultatem takiego wywołania jest wektor prezentujący przydział poszczegól- nych obserwacji zbioru wejściowego do utworzonej liczby grup:

[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 [43] 1 1 1 1 1 1 1 1 2 2 2 3 2 3 2 3 2 3 3 3 3 2 3 2 3 3 2 3 2 3 2 2 2 2 2 2 2 3 3 3 3 2 [85] 3 2 2 2 3 3 3 2 3 3 3 3 3 2 3 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 [127] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Fakt, że algorytm k - średnich cechuje się licznymi wadami, sprawia, że chętniej używanym jest algorytm np. k-medoidów. W środowisku R, w ramach pakietu cluster, dostępna jest funkcja pam() realizująca algorytm o nazwie PAM (ang. Partitioning Around Medoid ). Przykładem jej wywołania dla zbioru iris jest następująca komenda:

> kluster <- pam(dane,3)

> sil <- silhouette(kluster)

> summary(sil)

czego efektem będą następujące wyniki:

Silhouette of 150 units in 3 clusters from pam(x = dane, k = 3) : Cluster sizes and average silhouette widths:

(14)

50 62 38 0.7981405 0.4173199 0.4511051 Individual silhouette widths:

Min. 1st Qu. Median Mean 3rd Qu. Max.

0.02636 0.39110 0.56230 0.55280 0.77550 0.85390

Możemy odczytać podział algorytmem pam tych 150 obiektów (kwiatów ze zbioru IRIS) do 3 skupień. Widzimy rozkład obiektów do 3 klas oraz podstawowe statystyki tj. mediana, moda, pierwszy i trzeci kwartyl oraz elementy minimalny i maksymalny.

Dodając polecenie:

> plot(sil, col = c("red", "green", "blue")) zobrazujemy ów podział (rysunek 11).

Silhouette width si

0.0 0.2 0.4 0.6 0.8 1.0

Silhouette plot of pam(x = dane, k = 3)

Average silhouette width : 0.55

n = 150 3 clusters Cj

j : nj | avei∈Cj si

1 : 50 | 0.80

2 : 62 | 0.42

3 : 38 | 0.45

Rysunek 11: Wykres metody k-medoidów

Jeżeli dla tego samego zbioru danych chcemy zastosować algorytm grupowa- nia hierarchicznego, możemy użyć funkcji hclust a do jej graficznej reprezentacji funkcji plot, tak jak to pokazuje kod:

> d <- dist(dane, method = "euclidean")

> fit <- hclust(d, method="ward")

> plot(fit)

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 aglom- eracyjny, którego jednym z wersji jest algorytm o nazwie agnes (ang. AGlom- erative NESting). Został on również zaimplementowany w środowisku R i real- izowany jest przez wywołanie komendy o tej samej nazwie co nazwa algorytmu a więc agnes:

klaster = agnes(dane, method="average")

> plot(klaster)

(15)

Oczywiście drugi argument wywołania fuknkcji: method może przyjmować różne wartości w zależności od tego jaką metodę łączenia skupień wybierzemy mając do dyspozycji metody: najbliższego sąsiada, najdalszego sąsiada, średnich wiązań itp. Efektem wywołania funkcji plot z argumentem w postaci rezul- tatu funkcji agnes będzie dendrogram, który już jest bardziej czytelny, gdyż poszczególne poziomy drzewa są prezentowane na różnej wysokości na wykresie (jak to przedstawia rysunek 12).

118 41 28 298

40 5053836

24 27 44 21 3237 6 19

11 49 20 22 47 17 45

246 13 10 35 263 4

48 30 31

7

12 25 9 3943 14

2315 16 33 34

42

51 53 8777 78 55 5966 7652 5786

64 92 7974 7275 98 69 88

12071 128 13915073 84

134124 127147 102 143

114 122 11554 90 70 81 82

60 65 80 56 91

67 8562 89 96 97 9510068

83 93 63107

58 94 9961 101

121 144 141 145125 116 137 149 104 117 138112 105

129 133111 148 113 140 142 146 109 135

103126 130 108 131

136

106 123119110 118 132

01234

Dendrogram of agnes(x = dane, method = "average")

Agglomerative Coefficient = 0.93 dane

Height

Rysunek 12: Dendrogram

Jeśli chcielibyśmy sprawdzić różnice w postaci dendrgramu w zależności od tego jaką metodę łączenia skupień zastosowano: najbliższego sąsiada, najdalszego sąsiada czy metoda średniej odległości możemy wywołać następujące komendy w środowisku R:

> par(mfrow=c(3,2))

> klaster = agnes(dane, method="average")

> plot(klaster)

(16)

> klaster = agnes(dane, method="single")

> plot(klaster)

> klaster = agnes(dane, method="complete")

> plot(klaster)

Wówczas efektem będzie jeden wykres z trzema dendrogramami dla zbioru iris (rysunek 13).

Height

Banner of agnes(x = dane, method = "average")

Agglomerative Coefficient = 0.93

0 0.5 1 1.5 2 2.5 3 3.5 4

118 41 28 298 40 50538 36 24 27 44 21 32 376

19 11 49 20 22 47 17 45 2 46 13 10 35 263 448 30 317 12 25 9 39 43 1423 15 16 33 3442

51 53 87 77 78 55 59 66 76 52 57 86 64 92 79 74 72 75 98 69 88 120 71128 139 15073 84

134 124 127 147 102 143 114 122 11554 90 70 81 82 60 65 80 56 91 67 85 62 89 96 97 9510068 83 9363 10758 94 9961 101121 144 141 145 125 116 137 149 104 117 138 112 105 129 133 111 148 113 140 142 146109 135 103 126 130 108 131 136 106 123 119110 118 132

024

Dendrogram of agnes(x = dane, method = "average")

Agglomerative Coefficient = 0.93 dane

Height

Height

Banner of agnes(x = dane, method = "single")

Agglomerative Coefficient = 0.85

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6

118 415 38 8 40 50 28 29 36 11 49 24 27 442

10 35 46 13 30 31 263 448939 43 127 20 22 47 1425 37 21 32 17619 33 34 45 16 15 2342

51 53 87 52 57 55 59 66 76 75 98 78 77 72 54 90 70 81 82 68 83 93 89 95 96 9710091 62 56 67 85 64 92 79 74 8086 6071 128 139 124 127 147 150 102 143114 12273 84

134 104 117 138 105 129 133 111 148 112 142 146 113 140 121 144 141 145 125 116 137 149103 126 13065101 120108 13111563 69 88106 123119 136 135 109110

58 9461 99107 118 132

0.01.0

Dendrogram of agnes(x = dane, method = "single")

Agglomerative Coefficient = 0.85 dane

Height

Height

Banner of agnes(x = dane, method = "complete")

Agglomerative Coefficient = 0.96

0 1 2 3 4 5 6 7

118 418

40 50 28 29538 12 30 31 25246 13 10 35 26 363 448 437 939 1423 42 6 19 11 49 37 21 32 20 22 47 45 24 27 44 15 16 17 33 34 54 90 70 81 82 60 65 80 63 56 91 67 85 62 72 68 83 93 89 96 97 95100107 58 94 99 61 51 53 87 78 55 59 77 66 76 52 57 86 64 92 79 74 75 98 69 88 120 71128 139 150 102 143 114 122 11573 84

134 124 127 112 147135 101 137 149 121 144 125 141 145 104 117 138 105 129 133 109 111 148 116 113 140 142 146 103 126 130 108 131 106 123 119 110 136 118 132

0246

Dendrogram of agnes(x = dane, method = "complete")

Agglomerative Coefficient = 0.96 dane

Height

Rysunek 13: Dendrogramy dla różnych metod łączenia skupień

Podobna w działaniu do agnes() jest omówiona już po krótce wcześniej metoda grupowania hierarchicznego dostępna w funkcji hclust(stats).

4 Bibliografia

Opracowanie przygotowano w oparciu o prace:

1. J. Koronacki, J. Ćwik: Statystyczne systemy uczące się, wydanie drugie, Exit, Warsaw, 2008, rozdział 9.

2. J. Ćwik, J. Mielniczuk: Statystyczne systemy uczące się - ćwiczenia w oparciu o pakiet R, Oficyna Wydawnicza PW, Warszawa, 2009.

(17)

3. Biecek P.: Na przełaj przez Data Mining, http://www.biecek.pl/R/

naPrzelajPrzezDM.pdf

Cytaty

Powiązane dokumenty

Możliwe jest aby po lewej stronie znaku równości (nierówności, nieostrej równości) była umieszczona para (trójka, itd.) wartości (kolumn). Musi jej odpowiadać liczba kolumn lub

Jeśli zaś chcemy szukać obserwacji odstających globalnie (nie dla pojedynczej zmiennej objaśniającej ale dla wielu) wówczas możemy analizować rezydua lub rezydua studentyzowane

Wektory tworzymy za pomoc¡ konstruktora - funkcji c(elementy) np: wektor &lt; −c(3, 4, 2, 4, 5, 7), gdzie kolejne elementy wektora o nazwie wektor s¡ indeksowane od warto±ci 1, i

Widz- imy także, że pierwszym atrybutem wybranym do budowy drzewa jest cecha Petal.Length, która w przypadku, gdy wartość Petal.Length jest mniejsza od 2.45 od razu prowadzi

• Jeśli wykres szeregu rozdzielczego cechy populacji jest symetryczny względem pewnej prostej prostopadłej do osi odciętych (prostej o równaniu postaci x = a),

• dla szeregu szczegółowego i rozdzielczego punktowego W szeregach szczegółowych i rozdzielczych punktowych dominantą jest wartość cechy, której

SMAD – Statystyczne metody analizy danych.. Agnieszka Nowak

 diss logical flag: if TRUE (default for dist or dissimilarity objects), then x is assumed to be a dissimilarity matrix. If FALSE, then x is treated as a matrix of observations by