SKRYPT PRZYGOTOWANY NA ZAJĘCIA INDUKOWANYCH REGUŁ DECYZYJNYCH PROWADZONYCH PRZEZ PANA PAWŁA WOJTKIEWICZA ALGORYTM RANDOM FOREST Katarzyna Graboś 56397 Aleksandra Mańko 56699 2015-01-26, Warszawa
ALGORYTM RANDOM FOREST Eksploracja danych to proces odkrywania uogólnionych reguł i wiedzy zawartej w bazach danych, oparty na metodach statystycznych i technikach sztucznej inteligencji. Idea eksploracji danych polega na wykorzystaniu szybkości komputera do znajdowania ukrytych dla człowieka (z uwagi na ograniczone możliwości czasowe) prawidłowości w danych zgromadzonych w hurtowniach danych (ang. data warehouse). Istnieje wiele technik eksploracji danych, które wywodzą się z ugruntowanych dziedzin nauki takich jak statystyka i uczenie maszynowe. Jednym z najistotniejszych zagadnień z dziedziny uczenia się maszyn jest wybór metody klasyfikacji. Machine learning uczenie maszynowe Gałąź sztucznej inteligencji zajmująca się konstrukcją i analizą systemów, które mogą uczyć się na podstawie danych. Drzewa decyzyjne to graficzna metoda wspomagania procesu decyzyjnego. Algorytm drzew decyzyjnych jest również stosowany w uczeniu maszynowym do pozyskiwania wiedzy na podstawie przykładów. Koncepcja Bugging polega na budowie ekspertów dla podzbioru zadań. W tym przypadku, ze wszystkich problemów do rozwiązania losowany jest ze zwracaniem podzbiór problemów a następnie dla tego podzbioru szukany jest ekspert. W algorytmie tym z całego zbioru danych uczących losowany jest podzbiór (losowanie ze zwracaniem) i dla tego podzbioru budowany jest model predykcyjny, następnie po raz kolejny ze zwracaniem losowany jest inny podzbiór wektorów i dla niego budowany jest kolejny model. Całość powtarzana jest k krotnie a na koniec wszystkie zbudowane modele użyte są do głosowania. Drzewa decyzyjne Algorytm Random Forest Koncepcja Bugging
Algorytm Random Forest To metoda klasyfikacji (i regresji) polegająca na tworzeniu wielu drzew decyzyjnych na podstawie losowego zestawu danych. Idea tego algorytmu polega na zbudowaniu konsylium ekspertów z losowych drzew decyzyjnych, gdzie w odróżnieniu od klasycznych drzew decyzji, losowe drzewa budowane są na zasadzie, iż podzbiór analizowanych cech w węźle dobierany jest losowo. Ponadto, poszczególne drzewa z losowych lasów drzew budowane są zgodnie z koncepcją Bugging. Cechy Algorytmu Random Forest jest najlepszy jeśli chodzi o dokładność wśród pozostałych algorytmów działa skutecznie na dużych bazach danych utrzymuje dokładność w przypadku braku danych daje oszacowanie, które zmienne są istotne w klasyfikacji nie ma potrzeby przycinania drzew lasy mogą być zapisane i wykorzystane w przyszłości dla innego zbioru danych nie wymaga wiedzy eksperckiej nie jest podatny na overfitting Lasy losowe są uznawane za jedna z najlepszych metod klasyfikacji. Pojedyncze klasyfikatory lasu losowego to drzewa decyzyjne. Algorytm RandomForest bardzo dobrze nadaje się do badania próby, gdzie wektor obserwacji jest dużego wymiaru. Ich dodatkową zaletą jest możliwość użycia nauczonego lasu losowego do innych zagadnień niż tylko do klasyfikacji. Przykładowo, na podstawie drzew z lasu można wyznaczyć ranking zmiennych, a tym samym określić, które zmienne mają lepsze właściwości predykcyjne. Podczas generowania drzew zbiór wejściowy zostaje podzielony na dwa podzbiory: treningowy oraz zbiór OOB (out-of-bag), który składa się z ok. 1 3 obserwacji. Zbiór OOB służy do estymacji błędów klasyfikacji oraz istotności poszczególnych zmiennych. Błąd predykcji OOB pokazuje ile elementów ze zbioru testowego nie zostało przyporządkowanych poprawnie do ich właściwych klas. Jest on różnicą między wszystkimi elementami znajdującymi się w macierzy trafności, a elementami znajdującymi się poza przekątną macierzy.
Jak działa algorytm Random Forest? 1. Losujemy ze zwracaniem z n-elementowej próby uczącej n wektorów obserwacji. Na podstawie takiej pseudopróby stworzone zostanie drzewo. 2. W każdym węźle podział odbywa się poprzez wylosowanie bez zwracania m spośród p atrybutów, następnie w kolejnym węźle k spośród m atrybutów itd (p m k) (parametr m jest jedynym elementem algorytmu, który trzeba ustalić, wartość dająca dobre wyniki dla modeli decyzyjnych to około m = p, dla modeli regresyjnych ). 3. Proces budowania drzewa bez przycinania trwa, jeżeli to możliwe do momentu uzyskania w liściach elementów z tylko jednej klasy. Proces klasyfikacji 1. Dany wektor obserwacji jest klasyfikowany przez wszystkie drzewa, ostatecznie zaklasyfikowany do klasy, w której wystąpił najczęściej. 2. W przypadku elementów niewylosowanych z oryginalnej podpróby, każdy taki i-ty element zostaje poddany klasyfikacji przez drzewa, w których budowie nie brał udziału. Taki element zostaje następnie przyporządkowany klasie, która osiągana była najczęściej (w ten sposób zaklasyfikowane zostały wszystkie elementy z oryginalnej próby). Algorytm Random Forest wykorzystuje indeks Giniego, który służy jako podstawowe kryterium oceny jakości podziału węzła w drzewie decyzyjnym. Wzrost wartości współczynnika oznacza wzrost nierówności rozkładu. Zatem w rankingu należy wybrać klasę charakteryzującą się najniższym współczynnikiem Giniego. T oznacza zbiór zawierający n klas, a pj względną częstotliwość występowania danej klasy w zbiorze T.
START TAK Czy algorytm został przeprowadzony dla każdego drzewa? Wybierz podzbiór zmiennych m NIE Wybierz zbiór treningowy Czy została jeszcze jakaś zmienna? TAK NIE Czy został jeszcze jakiś węzeł do podziału? NIE Próbka (1) TAK Posortuj(2) Zbuduj kolejny podział Policz indeks Giniego dla każdego punktu podziału (3) Policz błąd predykcji (4) Wybierz najlepszy podział KONIEC
Przykład 1. W celu zilustrowania procesu tworzenia lasów losowych oraz sposobu posługiwania się wyżej opisanym algorytmem zaprezentujemy przykład oparty na danych Iris zapożyczonych z pakietu Weka. Postaramy się w sposób szczegółowy opisać kolejne etapy naszej analizy wraz z interpretacją otrzymanych wyników. Cały proces zostanie przeprowadzony z wykorzystaniem programu R. Pierwszym krokiem jest podzielenie zbioru danych Iris na dwa podzbiory: treningowy (zawierający 80% obserwacji) i testowy (zawierający 20% obserwacji). Tak dobrane proporcje zwiększają prawdopodobieństwo otrzymania lepszych wyników. test = iris[ c(1:10, 51:60, 101:110), ] train = iris[ c(11:50, 61:100, 111:150), ] Lasy losowe możemy wygenerować za pomocą funkcji randomforest, która znajduje się w pakiecie randomforest. Przy konstrukcji lasów losowych uzyskiwane są losowe wersje zbioru danych. Aby móc odtworzyć uzyskane wyniki należy skorzystać z funkcji set.seed() Poniżej przedstawiamy funkcje, które umożliwiają otrzymanie lasu losowego. iris.rf <- randomforest(species ~., data=train, ntree=500) print(iris.rf) Wyniki prezentują się następująco: Wartość błędu klasyfikacji dla pierwszej klasy wynosi zero, natomiast zarówno dla drugiej i trzeciej klasy 0,1. Błąd klasyfikacji dla wszystkich danych jest na poziomie 6,67%.
Aby uzyskać wgląd na proces redukcji błędu klasyfikacyjnego obliczonego dla zbioru OOB po dodaniu kolejnych drzew należy ustawić parametr do.trace. Wywołanie procesu odbywa się za pomocą funkcji: iris.rf <- randomforest(species ~., data=train, ntree=500, do.trace=50) I daje następujące rezultaty: Następnie posłużymy się procedurą plot(), która pozwali nam obserwować wpływ liczby poszczególnych modeli na wielkość błędu klasyfikacji. plot(iris.rf) W wyniku wywołania procedury otrzymujemy wykres informujący o błędzie klasyfikacji w zależności od liczby drzew.
Kolejną z zalet algorytmu randomforest jest wyznaczeni rankingu zmiennych, który bierze pod uwagę średnie zmiany indeksu Giniego. Służy to ocenie istotności poszczególnych zmiennych a tym samym określa, które zmienne mają lepsze właściwości predykcyjne. Taką informacje możemy uzyskać dzięki zastosowaniu poniższej komendy: importance(iris.rf) Generuje ona następujący wydruk. Interpretując powyższe wartości można wnioskować, że najlepszą zmienną pod względem wartości predykcyjnych jest zmienna Sepal.width (1.970850), natomiast najgorszą Petal.length (35.103479). Za pomocą funkcji varimpplot możemy uzyskać graficzne przedstawienie wcześniej otrzymanych wartości. varimpplot(iris.rf)
Kolejnym etapem jest wygenerowanie prognozy za pomocą funkcji predict dla próby testowej. iris.predict = predict(iris.rf, test) Następną komendą wywołujemy wynik. iris.predict Nieparzyste wiersze przedstawiają numer obserwacji, natomiast parzyste wartość klasy, do której dana obserwacja została przydzielona. Ostatnim etapem analizy będzie przedstawienie macierzy trafności zbudowanej ze zbioru testowego. Wywołujemy ją poleceniem: tab <- table(observed=test[,'species'], predict=iris.predict) tab Jak pokazuje poniższa tabela, klasy setosa i versicolor zostały przydzielone poprawnie, natomiast klasa virginica charakteryzowała się błędem predykcji, ponieważ jedna jej obserwacji została błędnie przyporządkowana. Naszą interpretację możemy również potwierdzić za pomocą poniższej procedury, która zwraca liczbę błędów predykcji. sum(tab)-sum(diag(tab)) W wyniku otrzymujemy 1, co oznacza, że na 30 elementów zawartych w zbiorze testowym tylko jeden został źle przyporządkowany.