PODSTAWY STATYSTYCZNEGO MODELOWANIA DANYCH Wykład 6 Drzewa klasyfikacyjne - wprowadzenie. Reguły podziału i reguły przycinania drzew.
Wprowadzenie Drzewo klasyfikacyjne
Wprowadzenie Formalnie : drzewo to graf acykliczny i spójny acykliczność : nie istnieje ciąg krawędzi łączący którykolwiek wierzchołek z nim samym. spójność : każda para jego wierzchołków jest połączona ciągiem krawędzi. Wierzchołki nazywamy węzłami Krawędzie nazywamy gałęziami. Jeśli z węzła wychodzą gałęzie skierowane do innych węzłów to węzeł z którego gałęzie wychodzą nazywamy rodzicem węzłów do których gałęzie prowadzą Te węzły nazywamy dziećmi węzła rodzica. Węzeł, który nie ma dzieci nazywamy liściem. Wierzchołek który nie posiada rodzica nazywamy korzeniem. Do każdego liścia prowadzi od korzenia jedna droga.
Drzewa decyzyjne (klasyfikacyjne) Drzewa pozwalające na rozdział obserwacji do poszczególnych klas. W korzeniu drzewa klasyfikacyjnego skupiona jest cała próba ucząca. Kolejne elementy tej próby przesuwane są wzdłuż gałęzi z góry w dół, przez węzły w każdym z których jest podejmowana decyzja o wyborze gałęzi, wzdłuż której trwać będzie przesuwanie próby. W każdym węźle jest dokonywany podział na podgrupy elementów próby które do danego węzła dotarły Kryterium podiału dokonywanego w danym węźle jest wspólne dla wszystkich elementów próby uczącej w tym węźle. Elementy próby są przesuwane aż do któregoś z liści - przypisuje się mu etykietę klasy z której pochodzi najwięcej elementów próby w tym liściu.
Drzewo klasyfikacyjne- klasyfikacja kobiet z plemienia indian (dane Pima Indians Diabetes). Warunki podziału obok gałęzi W każdym węźle - klasa większościowa ( ta do której należy większość elementów) Pod każdym węzłem podany jest iloraz liczby elementów spoza klasy większościowej do liczby wszystkich elementów w danym węźle. W liściu ten iloraz oznacza ułamek błędnych klasyfikacji popełnionych przez drzewo Na przykład w liściu nr 4 błąd 16 wynosi 214 Numery węzłów nadawane jak na rysunku w każdym drzewie.
Podobnie jak inne klasyfikatory, drzewo klasyfikacyjne budowane na próbie uczącej jest na niej uczone (trenowane). Poddrzewo drzewa T to drzewo będące częścią drzewa T. Zakorzenionym poddrzewem drzewa T jest poddrzewo drzewa T, którego korzeniem jest korzeń drzewa T. Będziemy rozważać tylko drzewa binarne - takie w których węzły mają po dwoje dzieci.
Reguły podziału Podział w danym węźle odbywa się tylko na podstawie tych wektorów obserwacji, które znalazły się w danym węźle. Podział polega na jak najlepszym rozdzieleniu podpróby na dwie części. Rozdzielone części trafiają do węzłów - dzieci. Najlepsze rozdzielenie prób na części polega na zmaksymalizowaniu pewnej miary różnorodności klas: definiujemy miarę różnorodności klas w węźle. definiujemy miarę różnicy między różnorodnością klas w danym węźle i różnorodnością klas w węzłach dzieciach. maksymalizujemy w/w różnicę
Miary różnorodności Rozważamy g klas i próbę uczącą (x i, y i ), i = 1, 2,..., n. m - ustalony węzeł drzewa n m - liczność podpróby w węźle m ˆp mk = 1 n m R m - zbiór warunków w węźle m. I (y i = k) = n mk n m x i R m I (y i = k) = 1, gdy y i = k, oraz I (y i = k) = 0, gdy y i k Obserwacje w węźle m klasyfikujemy do klasy k(m) = argmax k ˆp mk, czyli do klasy najliczniejszej w węźle m.
Miary różnorodności Miara różnorodności klas w węźle powinna być równa zero, gdy wszystkie obserwacje w węźle należą do tej samej klasy Być maksymalna gdy każda klasa jest jednakowo licznie reprezentowana (tj rozkład przynależności do klas jest jednostajny).
Przykłady miar różnorodności klas w węźle m drzewa T Proporcja błędnych klasyfikacji Q m (T ) = 1 ˆp mk(m) Indeks Giniego g Q m (T ) = ˆp mk (1 ˆp mk ) k=1 Entropia g Q m (T ) = ˆp mk log (ˆp mk ) k=1
Przypadek dwóch klas g = 2 Proporcja błędnych klasyfikacji Q m (T ) = 1 max{p, 1 p} Indeks Giniego Q m (T ) = 2p(1 p) Entropia Q m (T ) = p log(p) (1 p) log(1 p) p - prawdopodobieństwo przynależności do klasy o indeksie 1.
Przyjmijmy że miarą różnorodności klas w węzłach drzewa T jest Q m (T ) m L, m R - dzieci rodzica m (lewy, prawy) ˆp L = nm L n m - ułamek elementów które z węzła m przeszły do m L. ˆp R = 1 ˆp L - ułamek elementów które z węzła m przeszły do m R. Łączna miara różnorodności klas w dzieciach węzła m Q ml,m R (T ) = ˆp L Q ml (T ) + ˆp R Q mr (T ) Miara różnicy pomiędzy różnorodnością klas w węźle rodzicu i węzłach dzieciach Q m,ml,m R (T ) = Q m (T ) Q ml,m R (T ) Wskaźnik Giniego i entropia są bardziej czułe na zmiany rozkładów klas niż proporcja błędnych klasyfikacji. Są dlatego preferowane przy konstruowaniu drzewa.
Reguły przycinania drzew
Reguły przycinania drzew Pytanie: Kiedy zakończyć konstrukcję drzewa?? Jakie stosować reguły zatrzymania podziałów? Kontynuacja podziałów aż do momentu gdy w liściach znajdą się obserwacje tylko z jednej klasy prowadzi do przeuczenia (przetrenowania) drzewa. Oznacza to nadmierne dopasowanie do próby uczącej. Takie drzewo będzie prowadziło do uzyskania dużych błędów klasyfikacji na próbie testowej.
Reguły przycinania drzew Aby uzyskać optymalne drzewo (najlepiej klasyfikujące) przeprowadza się następującą procedurę: Konstrukcja maksymalnego drzewa (w liściach tylko obserwacje z jednej klasy) Sprawdzenie jego błędu klasyfikacji na próbie testowej lub walidacyjnej. Przycinanie (odcinanie gałęzi końcowych drzewa) i sprawdzanie przyciętego drzewa na próbie testowej lub walidacyjnej. Takie postępowanie jest kontynuowane aż do momentu uzyskania najlepszych własności klasyfikacyjnych (najmniejszego błędu) na próbie testowej lub walidacyjnej.
Reguły przycinania drzew Inne podejście: lub zaniechanie podziałów w sytuacji gdy w węźle znajdzie się nie więcej niż 5 obserwacji z próby uczącej (parametr minsplit w funkcji rpart). ograniczenie wysokości drzewa (czyli liczby krawędzi od korzenia do liścia). Kryterium kosztu-złożoności Jest to kryterium które prowadzi do uzyskania drzewa minimalizującego koszt (prawdopodobieństwo błędnej klasyfikacji) i o możliwie najmniejszej złożoności (możliwie najmniejszej liczbie liści). Kryterium kosztu-złożoności zostało skonstruowane dla sytuacji gdy nie dysponujemy próbą testową ani walidacyjną
Kryterium kosztu-złożoności T 0 - drzewo pełne (maksymalne) T - poddrzewo drzewa T 0 o tym samym korzeniu (poddrzewo zakorzenione drzewa T 0 ) T - rozmiar drzewa T, tzn liczba liści w drzewie T R(T ) - ułamek błędnych klasyfikacji dla próby uczącej. α - ustalony współczynnik nieujemny, tzw. współczynnik złożoności Kryterium kosztu-złożoności wybiera takie poddrzewo zakorzenione T drzewa T 0, które minimalizuje wyrażenie R α (T ) = R(T ) + α T.
Przykład : Dane Cars93 pakiet MASS Zmienna Type określa rodzaj samochodu: Small, Sporty, Compact, Midsize, Large,Van. Dzielimy dane na 4 grupy poprzez zmienną typ: typ= duży"gdy Type= Van lub Type= Large typ= średni"gdy Type= Compact lub Type= Medium typ= mały"gdy Type= Small typ= sportowy"gdy Type= Sporty Chcemy przypisać obserwacje (samochody) do odpowiedniej klasy (typu samochodu) na podstawie zmiennych określających parametry pojazdów.
Przykład : Dane Cars93 pakiet MASS 1 library ( MASS ) 2 library ( rpart ) 3 data ( Cars93 ) 4 head ( Cars93 ) Podział na grupy: 1 typ = ifelse ( Cars93 $ Typ ==" Large " Cars93 $ Type =="Van "," duży "," średni ") 2 typ2 = ifelse ( Cars93 $ Typ ==" Small "," mały ",typ ) 3 typ3 = ifelse ( Cars93 $ Type ==" Sporty "," sportowy ",typ2 ) 4 Cars = data. frame ( Cars93, typ=typ3 ) Konstrukcja drzewa: 1 drzewo = rpart ( typ~ Length + Weight + EngineSize + Horsepower +RPM, data=cars,cp =0.0001, minsplit =5) cp : współczynnik złożoności (α) minsplit : minimalna liczba elementów, która musi być w węźle, aby jeszcze dokonywać w nim podziału domyślnie stosowany jest indeks Giniego.
Przykład : Dane Cars93 pakiet MASS 1 plot ( drzewo, branch =0.7) 2 text ( drzewo, use.n=true )
Przykład : Dane Cars93 pakiet MASS 1 plot ( drzewo, branch =0.7) 2 text ( drzewo, use.n=false )
Aby użyć entropii ustalamy parametr parms w funkcji rpart na: 1 parms=list ( split=" information ") Wówczas konstrukcja drzewa: 1 drzewo. entr = rpart ( typ~ Length + Weight + EngineSize + Horsepower +RPM, data =Cars, cp =0.0001, minsplit =5, parms=list ( split=" information ")) 2 plot ( drzewo. entr ) 3 text ( drzewo. entr, use.n=true )
Przykład : Dane Cars93 pakiet MASS Na podstawie skonstruowanego drzewa można dokonać predykcji przynależności do klasy dla nowej obserwacji. Jako nową obserwację przyjmujemy wektor median zmiennych Length, Weight, EngineSize, Horsepower, RPM 1 nowe. auto=as. data. frame (t( apply ( Cars [,c (12,13,14,19,25) ],2, median ))) 2 predict ( drzewo, newdata =nowe. auto, type=" class ") 1 sredni Levels: duzy maly sportowy sredni Przewidywana klasa przynależności : średni
Wybór optymalnej wartości współczynnika złożoności : na podstawie rysunku: 1 plotcp ( drzewo ) Optymalna wartość współczynnika złożoności : cp=0.07
Wybór drzewa optymalnego: 1 # Wybor drzewa optymalnego : przycinanie, optymalny wybór współczynnika złożoności 2 drzewo. opt=prune. rpart ( drzewo, cp =0.07) 3 plot ( drzewo. opt ) 4 text ( drzewo.opt, use.n=true )
Kroswalidacja dla drzew klasyfikacyjnych W przypadku braku prób testowej i walidacyjnej (zbyt małej liczności danych) w celu wyboru drzewa optymalnego stosuje się także metodę kroswalidacji (porównań krzyżowych). Podział próby uczącej na k możliwie równych części Konstrukcja drzewa na k 1 częściach zbioru uczącego, takiego, które minimalizuje kryterium kosztu-złożoności. Testujemy skonstruowane drzewo na części danych nie użytych do jego konstrukcji. Procedurę powtarzamy zmieniając kolejno zbiór odrzucany, aż do momentu gdy każda część danych posłużyła jako zbiór testowy. Dostajemy k drzew. Dla każdego wyliczamy błąd klasyfikacji i wyznaczamy średnią tych błędów. Jest to oszacowanie ułamka błędnych klasyfikacji. Wybieramy drzewo dla którego ułamek błędnych klasyfikacji jest najmniejszy.
Przykład : Dane Cars93 pakiet MASS Chcemy oszacować błąd klasyfikacji drzewa większego, na podstawie metody kroswalidacji leave-one-out : w każdym kroku będziemy wyrzucać tylko jedną obserwację. popr.klas - wektor 0-1 : 0 -błąd, 1- poprawna klasyfikacja. 1 n= nrow ( Cars ) 2 # Pusty wektor zer na wpisanie poprawnych klasyfikacji (1) : 3 popr. klas = numeric (n) > popr.klas [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...
Przykład : Dane Cars93 pakiet MASS Procedura kroswalidacji: W każdym kroku wyrzucamy z danych jedną obserwację : Cars[-c(i)] i na takim zbiorze konstruujemy drzewo. Predykcję przeprowadzamy na wyrzuconym elemencie : Cars[c(i),] Jeśli predykcja jest zgodna z wartością faktyczną, w wektorze popr.klas wstawiamy jedynkę. 1 for (i in 1: n){ 2 drzewo.i = rpart ( typ~ Length + Weight + EngineSize + Horsepower +RPM, data= Cars [-c(i),], cp =0.0001, minsplit =5) 3 pred= predict ( drzewo.i, newdata =Cars [c(i),], type=" class ") 4 5 if( pred == Cars$typ [i]) popr. klas [i ]=1 6 } 7 popr. klas > popr.klas [1] 0 1 0 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1...
Przykład : Dane Cars93 pakiet MASS Ułamek poprawnych klasyfikacji wyznaczamy jako 1 upk <- sum ( popr. klas )/n 2 upk > upk [1] 0.7096774 Błąd klasyfikacji na podstawie kroswalidacji: 1 bl.cv <-1- upk 2 bl. cv > bl.cv [1] 0.2903226
Dla drzewa optymalnego (cp=0.07): 1 n= nrow ( Cars ) 2 proc. klas = numeric (n) 3 4 for (i in 1: n){ 5 drzewo.i = rpart ( typ~ Length + Weight + EngineSize + Horsepower +RPM, data= Cars [-c(i),], cp =0.07, minsplit =5) 6 pred= predict ( drzewo.i, newdata =Cars [c(i),], type=" class ") 7 8 if( pred == Cars$typ [i]) popr. klas [i ]=1 9 } Ułamek poprawnych klasyfikacji: 1 upk <- sum ( popr. klas )/n 2 upk > upk [1] 0.8064516 Błąd klasyfikacji na podstawie kroswalidacji: 1 bl.cv <-1- upk 2 bl. cv > bl.cv [1] 0.1935484
Przykład : Dane Cars93 pakiet MASS Wniosek: Drzewo przycięte ma mniejszy błąd klasyfikacji i większy ułamek poprawnych klasyfikacji niż drzewo wyjściowe.