Pakiet R w analizie uk³adów z³o¿onych

LABORATORIUM 9

Eksploracja danych

Eksploracja danych (data mining) to proces odkrywania znaczacych nowych powi±zañ, wzorców i trendów poprzez przeszukiwanie du¿ych ilo¶ci danych zgromadzonych w bazach danych przy u¿yciu metod matematycznych. Tu zajmiemy siê problemem klasyfikacji, czyli jak na podstawie cech pewnych obiektów przypisaæ je do okre¶lonych klas (inaczej: jak dokonaæ podzia³u na poszczególne klasy), jak równie¿ kwesti± redukcji wymiaru. W ogólno¶ci mo¿emy wyró¿niæ dwa typu klasyfikacji: pod nadzorem (supervised learning) i bez nadzoru (unsupervised learning). W pierwszym przypadku musimy dysponowaæ pewnym zbiorem danych, w którym istniej± ju¿ dane skalsyfikowane (czyli posiadaj±ce przypisan± klasê, tzw. "próba ucz±ca"). Algorytm "uczy siê" cech zwi±zanych z obiektami, a nastêpnie korzystaj±c z takiej wiedzy, klasyfikuje nowe dane. W przypadku klasyfikacji bez nadzoru, rozdzia³ na klasy nastêpuje bez uprzedniego procesu uczenia.

Klasyfikacja pod nadzorem

Prawdopodobnie najprostsz± metod± klasyfikacji pod nadzorem jest LDA (linear discriminant analysis - liniowa analiza dyskryminacji). U jej podstaw le¿y za³o¿enie, ¿e rozk³ady zmiennych w ka¿dej klasie s± opisane wielowymiarowym rozk³adem Gaussa. Ponadto, macierze kowariancji wszystkich klas s± takie same. Mo¿na wtedy udowodniæ, ¿e klasy najlepiej rozdziela hiperp³aszczyzna (czyli prosta dla dwóch wymiarów). Zaczynamy od prostego przyk³adu dwóch klas, ka¿da z nich jest reprezntowana przez punkty wylosowane z dwuwymiarowego rozk³adu normalnego (funkcja mvrnorm(liczba_danych, wartosc_oczekiwana, macierz_kowariancji) z biblioteki MASS)

W pakiecie R LDA jest realizowane przez funkcjê lda(), gdzie jako argumenty podajemy zale¿no¶æ pomiêdzy polami ramki danych (np. z ~ x + y). W efekcie otrzymamy warto¶ci prawdopodobieñstw a priori (czêsto¶ci klas), warto¶ci oczekiwane punktów nale¿±cych do klas a tak¿e kierunek, na który nale¿y rzutowaæ obserwacje tak, aby dokonaæ najlepszego rozdzielenia klas. Je¿eli warto¶æ tak dokonanego rzutowania danej (punktu) jest wiêksza od zera, przypisujemy go do klasy "1", w przeciwnym wypadku do klasy "2".

## Call:
## lda(klasy ~ wsp1 + wsp2, data = dataf)
## 
## Prior probabilities of groups:
##    1    2 
## 0.75 0.25 
## 
## Group means:
##        wsp1      wsp2
## 1  2.253803  2.058642
## 2 -1.199486 -1.385207
## 
## Coefficients of linear discriminants:
##             LD1
## wsp1 -0.4044101
## wsp2 -0.4077440

Oczywi¶cie "najlepsze" rozdzielenie klas nie oznacza, ¿e otrzymamy podzia³, w którym wszystkie punkty z klasy "1" faktycznie zostan± skalsyfikowane jako nale¿±ce do tej grupy - widaæ to na powy¿szym rysunku. Za pomoc± biblioteki klaR i zaimplementowanej w niej funkcji partimat() mo¿na otrzymaæ explicite prost± rozdzielaj±c± klasy, a tak¿e szybko zweryfikowaæ, które punkty zosta³y b³êdnie sklasyfikowane.

Skuteczno¶æ klasyfikatora

Kluczow± spraw± oprócz samej klasyfikacji jest jest skuteczno¶æ, czyli mówi±c inaczej, jak dobrze dany klasyfikator przewiduje przynale¿no¶æ do klas. W tym celu mo¿emy u¿yæ funkcji predict(), której argumentami s± klasyfikator wytrenowany na próbie ucz±cej oraz zbiór danych. Oczywi¶cie, w docelowych zastosowaniach skuteczno¶æ klasyfikatora jest sprawdzana na tzw. "próbie walidacyjnej", która powinna byæ rodzielna z prób± ucz±c±. Dla naszych potrzeb bêdziemy testowaæ klasyfikatory LDA i QDA na próbie ucz±cej, otrzymuj±c w ten sposób bardzo "optymistyczne" oszacowanie b³êdu. Interesowaæ nas bêdzie pole class zmiennej otrzymanej z dzia³ania funkcji predict, która prównamy za pomoc± polecenia table() z oryginalnymi klasami. Dla danych binarnych (tzn. dla dwóch klas) otrzymamy tzw. macierz pomy³ek (confusion matrix), której pola maj± nazwy jak na rysunku poni¿ej (numenklatura jest zwi±zana z testami medycznymi, maj±cymi na celu okre¶lenie nosicielstwa danej choroby).

sklasyfikowani jako ZDROWI sklasyfikowani jako CHORZY
faktycznie ZDROWI TRUE NEGATIVE (TN) FALSE POSITIVE (FP)
faktycznie CHORZY FALSE NEHATIVE (FN) TRUE POSITIVE (TP)
##  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [39] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 2 2 2 2 1 2 2 2 2 2
## [77] 1 2 2 2
## Levels: 1 2
##  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [39] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 2 2 2 2 1 2 2 2 2 2
## [77] 1 2 2 2
## Levels: 1 2
##    
##      1  2
##   1 58  3
##   2  2 17

Aby w ³atwy sposób porównaæ poszczególne klasyfikatory (lub te¿ ich warianty) korzysta siê czêsto z nastêpuj±cych trzech wielko¶ci:

Pierwsza wielko¶æ mówi po prostu na ile dobrze algorytm przewiduje dowoln± klasê. Dwie kolejne s± prawdopodobieñstwami warunkowymi dobrej klasyfikacji, pod warunkiem, ¿e obiekt faktycznie nale¿y do danej klasy. Maj± one szczególne znaczenie, je¶li rozk³ad liczebno¶ci klas jest nierówny.

## Accuracy LDA:  0.938
## Recall LDA:  0.951
## Specifity LDA:  0.895

Klasyfikacja bez nadzoru

Jedn± z metod klasyfikacji bez nadzoru jest analiza skupieñ (klastrów), realizowana tu przez metodê k-¶rednich (k-means, w R funkcja kmeans()). Mamy do dyspozycji pewien zestaw danych, które chcieliby¶my pogrupowaæ tak, aby dane podobne do siebie znalazly siê w jednej klasie, natomiast ró¿ne w odrêbnych klasach. Podobieñstwo i ró¿nicê definiujemy poprzez odleg³o¶æ - w przypadku przez nas rozwa¿anym jest to odleg³o¶æ euklidesowa. Algorytm ma za zadanie tak rodzieliæ punkty, aby do jednego skupiska trafi³y te, które s± sobie najbli¿sze. Parametrem algorytmu jest liczba skupieñ, na która ma zostaæ podzielony zestaw danych.

Redukcja wymiaru

Jednym z zadañ eksploracji danych jest redukcja wymiaru, czyli okre¶lenie, które ze sk³adowych wektora obserwacji s± nieistotne lub te¿ jakie inne kombinacje sk³adowych mog± siê okazaæ przydatne do dalszej analizy. Standartow± metod± redukcji wymiaru jest analiza sk³adowych g³ównych (PCA - principal component analysis). Polega ona na znalezieniu nowego kierunku, który maksymalizuje wariancjê zrzutowanych na niego obserwacji. Nastêpnie szukamy kolejnego kierunku, równie¿ o jak najwiêkszej wariancji, tyle, ¿e ortogonalnego do poprzedniego etc. Okazuje siê, ¿e takie cechy odpowiadaj± wektorom w³asnym zwi±zanym z kolejnymi warto¶ciami w³asnymi (pocz±wszy od najwiêkszej). W poni¿szym przyk³adzie mamy do czynienia z "zaszumion±" relacj± y=x, alogrytm PCA (funkcja princomp()) wykrywa jako nowe kierunki wektory [1,1] i [-1,1] (pole loadings). Warto¶ci oryginalnych danych zrzutowane na nowe kierunki otrzymamy za pomoc± opcji scores, natomiast przeci±¿ona funkcja plot() prezentuje warto¶ci wariancji w kolejnych nowych kierunkach.