Wykład 5 Kwadratowa analiza dyskryminacyjna QDA. Metody klasyfikacji oparte na rozkładach prawdopodobieństwa.
Kwadratowa analiza dyskryminacyjna
Przykład analizy QDA Czasem nie jest możliwe rozdzielenie klas za pomocą prostej
Przykład analizy QDA Lepsze rozdzielenie klas dzięki użyciu funkcji kwadratowej
Lepsze rozdzielenie klas dzięki użyciu funkcji kwadratowej
Przykład -dane iris 1 # Linear Discriminant Analysis LDA ( iris data ) 2 require ( MASS ) 3 data ( iris ) 4 iris. lda <- lda ( Species ~ Sepal. Length + Sepal. Width + Petal. Length +Petal. Width, data=iris ) 5 print ( iris. lda ) Call: lda(species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = iris) Prior probabilities of groups: setosa versicolor virginica 0.3333333 0.3333333 0.3333333 Group means: Sepal.Length Sepal.Width Petal.Length Petal.Width setosa 5.006 3.428 1.462 0.246 versicolor 5.936 2.770 4.260 1.326 virginica 6.588 2.974 5.552 2.026
Przykład -dane iris Coefficients of linear discriminants: LD1 LD2 Sepal.Length 0.8293776 0.02410215 Sepal.Width 1.5344731 2.16452123 Petal.Length -2.2012117-0.93192121 Petal.Width -2.8104603 2.83918785 Proportion of trace: LD1 LD2 0.9912 0.0088
Przykład - dane iris 1 table ( iris$species, predict ( iris. lda )$class, dnn=c(" True "," Predicted ") Predicted True setosa versicolor virginica setosa 50 0 0 versicolor 0 48 2 virginica 0 1 49 1 ## proporcja błędnych klasyfikacji 2 mean ( iris$ Species!= predict ( iris. lda )$class ) [1] 0.02
Przykład - dane iris - QDA 1 iris. qda <- qda ( Species ~ Sepal. Length + Sepal. Width + Petal. Length + Petal. Width, data=iris ) Call: qda(species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal. data = iris) Prior probabilities of groups: setosa versicolor virginica 0.3333333 0.3333333 0.3333333 Group means: Sepal.Length Sepal.Width Petal.Length Petal.Width setosa 5.006 3.428 1.462 0.246 versicolor 5.936 2.770 4.260 1.326 virginica 6.588 2.974 5.552 2.026
Przykład - dane iris - QDA 1 table ( iris$species, predict ( iris. qda )$class, dnn=c(" True "," Predicted ") ) Predicted True setosa versicolor virginica setosa 50 0 0 versicolor 0 48 2 virginica 0 1 49 1 ## Proporcja błędnych klasyfikacji 2 mean ( iris$ Species!= predict ( iris. qda )$class ) [1] 0.02
Metody klasyfikacji oparte na rozkładach prawdopodobieństwa.
Wprowadzenie LDA, QDA: rozdzielanie klas za pomocą prostej/ płaszczyzny/ hiperpłaszczyzny/ hiperpowierzchni Wybór kształtu powierzchni rozdzielającej klasy jest arbitralny (zadany przez użytkownika).nie jest efektem konstrukcji modelu.
Podejście probabilistyczne Polega na konstrukcji metod bezpośrednio opartych na rozkładach prawdopodobieństwa obserwacji w klasach. Przykład g = 3 klasy, x - obserwacja k = 1 k = 2 k = 3 p(x k) 1 4 1 2 1 4 Dla g klas i obserwacji x mamy g prawdopodobieństw przynależności do klas, p(x k), dla k = 1, 2,..., g.. g p(x k) = 1 k=1
Prawdopodobieńtwa a priori i a posteriori π k, k = 1, 2,..., g są prawdopodobieństwami a priori tego że obserwacja pochodzi z k-tej klasy. Prawdopodobieństwa a priori są wyznaczane na podstawie posiadanej wiedzy, historii lub przeprowadzonych obserwacji na przykład oszacowanie procentu osób chorych na określoną chorobę w całej populacji odbywa się na podstawie próby osób o których wiemy że są chore i skuteczności leczenia. to daje oszacowanie prawdopodobieństw a priori bycia chorym lub zdrowym. Prawdopodobieństwa a posteriori - tj. p-stwa przynależności do klas po zaobserwowaniu obserwacji x wyznaczane ze wzoru Bayesa: prawdopodobieństwo a posteriori że zaobserwowana wartość x pochodzi z klasy k wynosi: p(k x) = π kp(x k) g j=1 π jp(x j)
Prawdopodobieńtwa a priori i a posteriori Wzór Bayesa wymaga znajomości wartości prawdopodobieństw π k oraz p(x k) W praktyce nie są one znane i ich wartości są szacowane na podstawie obserwacji próby uczącej (zastępujemy wielkości π k i p(x k) ich estymatorami. Klasyfikator bayesowski Zaobserwowany wektor x klasyfikujemy jako pochodzący z tej klasy k dla której wartość p-stwa a posteriori p(k x), k = 1, 2,..., g, jest największa. Równoważnie można wybrać klasę dla której wartość π k p(x k), k = 1, 2,..., g jest największa.
Klasyfikator bayesowski Regułę Bayesa stosowaliśmy wcześniej przyjmując pewne ustalone modele opisujące p-stwa p(k x) LDA - p(k x) opisuje model regresji liniowej w analizie regresji logistycznej - model regresji logistycznej. Obecnie wychodzić będziemy bezpośrednio od rozkładów prawdopodobieństwa π k i p(x k), zakładając, że je znamy.
Przypadek dwóch klas Zakładamy że obserwacje pochodzą z dwóch klas (g = 2) i obserwacje w każdej z klas pochodzą z rozkładu normalnego. Zakładamy że rozkłady w klasach mają taką samą macierz kowariancji Σ, tj p(x k) N (m k Σ), k = 1, 2. Zadanie maksymalizacji po k wielkości p(x k) w tym przypadku prowadzi do rozwiązania postaci δ k (x) = x T Σ 1 m k + ln(π k ). Funkcje δ k (x) dla k = 1, 2,..., g nazywamy funkcjami dyskryminacyjnymi dla klasy k.
Na podstawie porównania p-stw p(1 x) i p(2 x) uzyskujemy regułę klasyfikacyjną Obserwację x przypiszemy do klasy 1, gdy p(1 x) > p(2 x), tzn gdy ( ) p(1 x) δ 1,2(x) = ln > 0 p(2 x). Analogicznie obserwację x przypiszemy do klasy 2, gdy ( ) p(1 x) δ 1,2(x) = ln < 0 p(2 x). W rozważanym przypadku wyliczenie δ 1,2 (x) prowadzi do uzyskania ( ) π1 δ 1,2 (x) = ln 1 2 (m 1 m 2 ) T Σ 1 (m 1 +m 2 )+(m 1 m 2 ) T Σ 1 x = 0. π 2 Jest to równanie hiperpłaszczyzny dyskryminacyjnej rozdzielającej klasy.
Więcej klas (g > 2) Gdy rozważamy większą liczbę klas porównujemy p-stwa klas parami. Dla klas k i l porównujemy prawdopodobieństwa p(k x) i p(l x) ( ) p(k x) δ k,l (x) = ln p(l x) Równanie hiperpłaszczyzny dyskryminacyjnej rozdzielającej klasy : ( ) πk δ k,l (x) = ln 1 2 (m k m l ) T Σ 1 (m k +m l )+(m k m l ) T Σ 1 x = 0. π l Funkcje δ k,l (x) nazywamy funkcjami dyskryminacyjnymi między klasami k i l. Przykład: 3 klasy Obserwacja x zostaje zaklasyfikowana do klasy 1, gdy δ 1,2 (x) > 0 i δ 1,3 (x) > 0 2, gdy δ 1,2 (x) < 0 i δ 2,3 (x) > 0 3, gdy δ 1,3 (x) < 0 i δ 2,3 (x) < 0
Trzy klasy, ta sama macierz kowariancji
Trzy klasy, ta sama macierz kowariancji, metoda QDA
Rozkłady normalne o różnych macierzach kowariancji Rozważamy sytuację, gdy rozkłady w grupach są normalne, ale mają różne macierze kowariancji: p(x k) N (m k, Σ k ), k {1, 2,..., g}. Wówczas powierzchnia rozdzielająca klasy jest funkcją kwadratową. Dla dwóch klas (g = 2) reguła klasyfikacyjna przyjmuje postać Przypisz obserwację x do klasy 2 jeżeli ( ) π2 ln + x T (Σ 1 2 m 2 Σ 1 1 m 1) 1 2 x T (Σ 1 2 Σ 1 1 )x + k > 0, π 1 gdzie k = 1 ( ) 2 ln Σ1 + 1 ( m T Σ 2 2 1 Σ 1 1 m 1 m T 2 Σ 1 2 m ) 2
Trzy klasy, różne macierze kowariancji, metoda QDA
Metoda największej wiarogodności
Metoda największej wiarogodności Jest to najbardziej intuicyjna metoda oparta na rozkładach prawdopodobieństw obserwacji w klasach. Polega na wyborze klasy maksymalizującej prawdopodobieństwo p(x k), tj. jest to reguła spełniająca d(x) = argmax k {1,2,...,g} p(x k). Jest równoważna regule Bayesa, gdy prawdopodobieństwa a priori są równe tj. π 1 = π 2 = = π g. W regule Bayesa maksymalizujemy p-stwo a posteriori, czyli wielkość proporcjonalną do. π k p(x k) Jeśli π1 = π 2 = = π g, jest to równoważne maksymalizacji po k wartości p(x k).
Metoda największej wiarogodności
Metoda największej wiarogodności Jeśli obserwacje pochodzą z rozkładów normalnych o takiej samej macierzy kowariancji to metoda największej wiarogodności może być zapisana jako Zaklasyfikuj obserwację x do tej klasy k, dla której kwadrat odległości Mahalanobisa jest najmniejszy. (x m k ) T Σ 1 (x m k )
Optymalność reguły bayesowskiej Reguła bayesowska (lub reguła NW gdy p-stwa a priori są równe) jest optymalna to znaczy minimalizuje ryzyko całkowite postaci R(d) = g π k P [d(x) k klasa = k]. k=1 P [d(x) k klasa = k] jest oczekiwanym kosztem błędnego zaklasyfikowania obserwacji z klasy k (ryzykiem klasyfikatora)
Wybór i ocena klasyfikatora
Wybór i ocena klasyfikatora Aby wybrać możliwie najlepszy klasyfikator spośród kilku różnych klasyfikatorów porównujemy ich prawdopodobieństwa błędnej klasyfikacji dla nowej obserwacji. Dla dużego zbioru danych wydziela się trzy podpróby : próbę uczącą - służącą do konstrukcji klasyfikatora próbę walidacyjną wyznaczamy na niej procent błędnych klasyfikacji dla danego klasyfikatora porównując klasyfikatory wybieramy ten, który uzyskał najmniejszy procent błędów na próbie walidacyjnej próbę testową dokonujemy na niej ostatecznej oceny prawdopodobieństwa błędnej klasyfikacji przez klasyfikator wybrany na podstawie próby walidacyjnej nie można tego zrobić na próbie walidacyjnej, gdyż posłużyła ona do wyboru klasyfikatora
Podział na podpróby Aby móc wydzielić trzy podpróby potrzebny jest duży zbiór danych. Jak ustalić rozmiary podprób? 50% obserwacji na próbę uczącą i po 25% na próby walidacyjną i testową lub 60% obserwacji na próbę uczącą i po 20% na próby walidacyjną i testową nie ma ustalonej najepszej proporcji Jeśli próba jest zbyt mała do wydzielenia trzech podprób stosuje się kroswalidację czyli tzw. sprawdzanie krzyżowe. Zbiór danych dzielimy na K (np 5) możliwie równych części (tzw. K-krotna kroswalidacja) Usuwamy jeden z K podzbiorów ze zbioru danych Pozostałe K 1 podzbiorów wykorzystujemy do konstrukcji klasyfikatora. Usunięty zbiór traktujemy jako zbiór testowy (do sprawdzenia skonstruowanego klasyfikatora).
Sprawdzenie krzyżowe (kroswalidacja) Na podstawie takiej procedury uzyskujemy K wersji klasyfikatora Każda wersja klasyfikatora jest oceniana poprzez sprawdzenie liczby błędnych klasyfikacji na odpowiednim zbiorze testowym (tzn. na części zbioru danych którą usunęliśmy przed konstrukcją klasyfikatora). a więc oceny klasyfikatora dokonujemy na obserwacjach, które nie brały udziału w jego konstrukcji Sumaryczna liczba błędów klasyfikacji dla wszystkich K wersji klasyfikatora podzielona przez liczność oryginalnego zbioru danych n daje kroswalidacyjne oszacowanie prawdopodobieństwa dokonania błędnej klasyfikacji przez dany klasyfikator. Często stosuje się też tzw. n-krotną kroswalidację, gdzie n oznacza liczność całego zbioru danych. Tą metodę nazywa się czasem leave-one-out cross-validation, gdyż podpróby na których konstruowane są kolejne wersje klasyfikatora powstają poprzez usunięcie tylko jednej obserwacji ze zbioru danych.
Przykład - dane iris Metoda LDA z zastosowaniem kroswalidacji 1 iris. lda. cv <- lda ( Species ~ Sepal. Length + Sepal. Width + Petal. Length +Petal. Width, data=iris, CV=TRUE ) 2 table ( iris$species, iris. lda. cv$class, dnn=c(" True "," Predicted ")) Predicted True setosa versicolor virginica setosa 50 0 0 versicolor 0 48 2 virginica 0 1 49 1 mean ( iris$ Species!= iris. lda. cv$class ) 0.02
Przykład - dane iris LDA - Klasyfikacja nowej obserwacji o wartościach: Sepal.Length = 6.5, Sepal.Width = 2.5, Petal.Length = 5.0, Petal.Width = 1.7 1 ## Klasyfikacja nowej obserwacji - metoda LDA 2 predict ( iris.lda, new=data. frame ( Sepal. Length =6.5, Sepal. Width =2.5, Petal. Length =5.0, Petal. Width =1.7) ) $class [1] virginica Levels: setosa versicolor virginica $posterior setosa versicolor virginica 1 7.748627e-32 0.1754268 0.8245732 $x LD1 LD2 1-4.451597-0.9264922
Przykład - dane iris Metoda QDA z zastosowaniem kroswalidacji 1 iris. qda. cv <- qda ( Species ~ Sepal. Length + Sepal. Width + Petal. Length +Petal. Width, data=iris, CV=TRUE ) 2 table ( iris$species, iris. qda. cv$class, dnn=c(" True "," Predicted ")) Predicted True setosa versicolor virginica setosa 50 0 0 versicolor 0 47 3 virginica 0 1 49 1 mean ( iris$ Species!= iris. qda. cv$class ) [1] 0.02666667
Przykład - dane iris QDA - Klasyfikacja nowej obserwacji o wartościach: Sepal.Length = 6.5, Sepal.Width = 2.5, Petal.Length = 5.0, Petal.Width = 1.7 1 ## klasyfikacja nowej obserwacji - metoda QDA 2 predict ( iris.qda, new=data. frame ( Sepal. Length =6.5, Sepal. Width =2.5, Petal. Length =5.0, Petal. Width =1.7) ) $class [1] virginica Levels: setosa versicolor virginica $posterior setosa versicolor virginica 1 4.778750e-117 0.08211796 0.917882
Bootstrap Inną metodą wielokrotnego wykorzystania elementów tego samego zbioru danych jest metoda bootstrap Polega na dokonaniu wielokrotnego losowania ze zwracaniem elementów z oryginalnego zbioru danych. W ten sposób losuje się np 1000 podprób, każdą o liczności n równej liczności oryginalnego zbioru danych Na ich podstawie konstruuje się kolejne wersje klasyfikatora, a następnie dla każdego elementu oryginalnego zbioru danych oblicza się ułamek błędnych zaklasyfikowań tego elementu przez wszystkie wersje klasyfikatora, w których budowie nie brał on udziału oblicza się średnią wartość ułamków otrzymanych dla wszystkich n elementów oryginalnego zbioru danych taka średnia wartość ułamków błędnych klasyfikacji jest przybliżeniem prawdopodobieństwa błędnego zaklasyfikowania nowej obserwacji.
Przykład - dane iris Porównamy błędy uzyskane przez metody LDA i QDA przy zastosowaniu 10-krotnej kroswalidacji oraz metody bootstrap. 1 # przekształcenie funkcji predict, tak aby zwracała tylko indeksy klas 2 mypredict. lda <- function ( object, newdata ){ 3 predict ( object, newdata = newdata )$class 4 } Wyznaczenie błędu dla metody LDA przy zastosowaniu 10-krotnej kroswalidacji 1 require ( ipred ) 2 # 10 - krotna kroswalidacja dla metody LDA - dane iris 3 errorest ( Species ~., data=iris, model=lda, estimator = " cv", predict = mypredict. lda ) 10-fold cross-validation estimator of misclassification error Misclassification error: 0.02
Przykład - dane iris Wyznaczenie błędu dla metody LDA przy zastosowaniu metody bootstrap 1 # Estymacja błędu metodą bootstrap dla metody LDA - dane iris 2 errorest ( Species ~., data=iris, model=lda, estimator = " boot ", predict = mypredict. lda ) Bootstrap estimator of misclassification error with 25 bootstrap replications Misclassification error: 0.0312 Standard deviation: 0.0035
Przykład - dane iris Dla metody QDA 1 # przekształcenie funkcji predict, tak aby zwracała tylko indeksy klas 2 mypredict. qda <- function ( object, newdata ){ 3 predict ( object, newdata = newdata )$class 4 } Wyznaczenie błędu dla metody QDA przy zastosowaniu 10-krotnej kroswalidacji 1 # 10 - krotna kroswalidacja dla metody LDA - dane iris 2 errorest ( Species ~., data=iris, model=qda, estimator = " cv", predict = mypredict. qda ) 10-fold cross-validation estimator of misclassification error Misclassification error: 0.02
Przykład - dane iris Wyznaczenie błędu dla metody QDA przy zastosowaniu metody bootstrap 1 # Estymacja błędu metodą bootstrap dla metody LDA - dane iris 2 errorest ( Species ~., data=iris, model=qda, estimator = " boot ", predict = mypredict. qda ) Bootstrap estimator of misclassification error with 25 bootstrap replications Misclassification error: 0.0316 Standard deviation: 0.0038
Koszty błędnej klasyfikacji W przypadku zadania konstrukcji klasyfikatora, błędy przez ten klasyfikator popełniane wiążą się często z poniesieniem określonych kosztów. Na przykład w przypadku danych medycznych, klasyfikacja pacjentów chorych do grupy osób zdrowych, jak i osób zdrowych do grupy osób chorych wiąże się z kosztami. W przypadku takich testów znacznie groźniejsza w skutkach jest decyzja o zaklasyfikowaniu osoby jako zdrowej, w sytuacji gdy pacjent jest w rzeczywistości chory. Koszt błędnej decyzji polegającej na stwierdzeniu choroby, gdy pacjent w rzeczywistości jest zdrowy, powinnien być mniejszy. Oznacza to zatem, że nie wszystkie błędne decyzje klasyfikatora są równie kosztowne
Koszty błędnej klasyfikacji A więc liczba błędnych decyzji nie daje pełnej informacji o tym jak dobry jest dany klasyfikator. Chcemy nie tylko ograniczyć liczbę błędnych klasyfikacji, ale również, jeśli już jakieś błędy muszą być popełnione, to wolelibyśmy klasyfikować zdrowych jako chorych a nie odwrotnie. W takich przypadkach definiuje się cztery rodzaje wyników: TP- True Positives - liczba przypadków, gdy test poprawnie dał wynik dodatni (pozytywny) TN- True Negatives - liczba poprawnych wyników ujemnych (negatywnych) FP- False Positives - liczba fałszywych wyników dodatnich (test dał wynik dodatni, mimo że pacjent był zdrowy) FN- False Negatives - liczba fałszywych wyników ujemnych (test dał wynik ujemny, mimo że pacjent był chory)
Koszty błędnej klasyfikacji Możemy to opisać za pomocą tabeli : Osoba klasyfikowana Osoba klasyfikowana jako zdrowa jako chora Osoba jest zdrowa TN FP Osoba jest chora FN TP TN, TP - poprawne decyzje FN, FP - błędy Oszacowanie prawdopodobieństwa błędnej klasyfikacji uwzględniające tylko liczbę błędów: FP + FN TN + FP + FN + TP - nie uwzględnia różnych typów błędów.
Czułość i specyficzność Osoba klasyfikowana Osoba klasyfikowana jako zdrowa jako chora Osoba jest zdrowa TN FP Osoba jest chora FN TP Uwzględnienie dwóch rodzajów błędów prowadzi do pojęć czułości i specyficzności testu: Czułość = Specyficzność = TP TP + FN TN TN + FP = 1 FP TN + FP
Czułość i specyficzność Czułość testu oszacowanie prawdopodobieństwa przewidzenia przez test choroby, pod warunkiem że pacjent jest chory na badaną chorobę. Specyficzność testu oszacowanie prawdopodobieństwa przewidzenia przez test, że pacjent jest zdrowy, pod warunkiem, że rzeczywiście nie jest on chory na badaną chorobę. Chcielibyśmy aby test był czuły, tzn dawał wynik dodatni, gdy pacjent jest chory, i jednocześnie żeby był specyficzny, tzn nie dawał wyniku pozytywnego, gdy pacjent jest zdrowy. Maksymalna czułość (równa 1) oznacza, że test zawsze daje wynik dodatni. Maksymalna czułość zerowa specyficzność
Czułość i specyficzność Czułość i specyficzność są wymaganiami przeciwstawnymi - zwiększenie jednego powoduje spadek drugiego. Jednoczesna maksymalizacja tych dwóch wielkości nie jest możliwa. Optymalny klasyfikator (test) wybieramy na podstawie subiektywnej oceny - jako ten, który zapewnia najlepszy kompromis pomiędzy czułością a specyficznością. Sumarycznej informacji o zachowaniu się danego klasyfikatora przy zmiennych kosztach błędnych decyzji daje krzywa operacyjno-charakterystyczna (krzywa ROC). Jest to wykres zależności między zmiennymi Czułość i 1- Specyficzność
Przykład - dane iris Rozważmy model regresji logistycznej dla danych iris. Aby móc analizować dane w ten sposób zmienna objaśniana musi mieć wartości 0-1. Aby to uzyskać wybieramy jeden z gatunków analizowanych roślin ( np versicolor) i to czy obserwacja pochodzi z tego gatunku czy nie oznaczamy odpowiednio 1 i 0 Taką zmienną traktujemy jako nową zmienną objaśnianą. 1 Z = Species == " versicolor " >Z [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE... [46] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE [61] TRUE TRUE...
Przykład - dane iris Dopasowujemy model logistyczny 1 logistic. model = glm (Z ~ Sepal. Length + Sepal. Width + Petal. Length + Petal. Width, family = binomial ()) Call: glm(formula = Z ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, family = binomial()) Coefficients: (Intercept) Sepal.Length Sepal.Width Petal.Length Petal.Width 7.3785-0.2454-2.7966 1.3136-2.7783
Przykład - dane iris Wartości zmiennej Z dopasowane przez model (Ẑ) 1 ## wartości przewidywane przez model 2 logistic. scores = predict ( logistic. model, type = " response ") > logistic.scores 1 2 3 4 5 0.084913218 0.282917869 0.171982672 0.268014581 0.067075197 Wyznaczenie TP, TN, FP, FN 1 logistic. rocr = prediction ( logistic. scores, Z) Rysunek krzywej ROC: 1 plot ( performance ( logistic. rocr, " tpr ", " fpr "), col = " red ", ylab= Czułość, xlab= 1- Specyficzność )
Przykład - dane iris - krzywa ROC dla modelu regresji logistycznej