ADIUM/L/z2p

From WikiZMSI

< ADIUM | L

Na zajęciach

  • Przygotuj dla danych olivetti jako klasę decyzyjną nową kolumnę wskazującą, czy dana osoba ma na twarzy okulary. Plik z indeksami tych osób (olivetti_glasses.txt) można wczytać następującym poleceniem: glasses = np.genfromtxt('olivetti_glasses.txt', delimiter=',') .astype(int)
  • Przygotuj dane do rozpoznawania okularów (wraz z podziałem na część uczącą i testową) używając jako cechy wejściowe 50 pierwszych składowych głównych (z PCA).
  • Rozpocznij implementację klasy reprezentującej drzewo decyzyjne (CART) - implementację oprzyj na schemacie z pakietu scikit-learn tzn. niech powstająca klasa rozserza klasy BaseEstimator oraz ClassifierMixin i zawiera w szczególności metody fit oraz predict. Sugestia: zbudowane drzewo decyzyjne można przechować w formie tablicy numpy, gdzie wierszami będą pisane węzły drzewa, a kolumnami istotne informacje: indeks węzła rodzica, nr zmiennej rozcięcia, wartość rozcięcia, indeksy węzłów dzieci (lewe, prawe), odpowiedź węzła (gdy liść), głębokość węzła.
  • Zaimplementuj trzy funkcje nieczystości (błąd klasyfikacji, entropia, indeks Giniego) oraz posiłkową funkcję, która znajdzie warunkowy rozkład prawdopodobieństwa klas w ramach danego zbioru indeksów przykładów uczących.
  • Zaimplementuj rekurencyjną funkcję budującą drzewo. Funkcja ta będzie wywoływana z poziomu funkcji fit.
  • Do konstruktora klasy dodaj dwa dodatkowe parametry (opcjonalne) pozwalające na wcześniejsze zatrzymywanie rekurencji na podstawie: głębokości drzewa, procentowej zawartości przykładów w danym węźle.
  • Dodaj możliwość przycinania drzewa poprzez przeglądanie i ocenianie poddrzew pełnego drzewa. Ocena powinna się odbywać wg funkcji: błąd uczący + liczba liści * kara za liść. Odpowiednia procedura rekurencyjna do tego celu może stanowić drugi etap w ramach funkcji fit (po budowie pełnego drzewa). Przeglądane poddrzewa i ich oceny można rejestrować w słowniku (mapie haszującej). W ramach zajęć należy zaprogramować wariant przeglądający wyczerpująco wszystkie możliwe ukorzenione poddrzewa (exhaustive subtrees).


Do domu

  • Dodaj wariant przycinania drzewa oparty na zachłannym przeglądaniu poddrzew (greedy subtrees) - oszczędniejszy obliczeniowo niż przeglądanie wyczerpujące.
  • Zaimplementuj (jako dodatkową procedurę) algorytm przycinania z automatycznym doborem kary za każdy liść oparty na krzyżowej walidacji.
  • Uporządkuj odpowiednio parametry konstruktora, tak aby użytkownik miał możliwość wyboru każdego z trzech wariantów przycinania polegającego na przeglądaniu poddrzew: (1) przeglądanie wyczerupujące z ustaloną karą, (2) przeglądanie zachłanne z ustaloną karą, (3) przeglądanie (wyczerpujące lub zachłanne) z doborem kary spośród zbioru możliwych wartości. Sugestia: dla oszczędności obliczeniowej w przypadku wariantu (3) warto w słowniku poddrzew rejestrować pary wartości - (błąd uczący, liczba liści) - zamiast gotowych ocen. Ostateczne wartości ocen można obliczyć później.
  • Przeprowadź zestaw eksperymentów i przygotuj sprawozdanie na tema uczenia drzewa decyzyjnego (rozpoznawanie okularów w danych Olivetti) badając wpływ na dokładność testową następujących elementów: liczby użytych cech, funkcji nieczystości, ograniczania drzewa (głębokość, procent przykładów w węźle, przycinanie).