Uczenie Maszynowe – klasyfikatory złożone (classifier ensembles)

W tym ćwiczeniu prowadzimy praktyczne eksperymenty z różnymi architekturami zespołów klasyfikatorów.

"Quiz" (czyli raport z tych eksperymentów) w moodle można dowolnie wiele razy edytować i zapisywać przed upłynięciem terminu.

  1. Przypomnij sobie z wykładu, w jaki sposób możemy łączyć klasyfikatory ze sobą (kilka architektur) oraz co jest niezbędne (jakie warunki muszą być spełnione) do tego, żeby takie połączenia działały skuteczniej od ich elementów składowych.
  2. Przeczytaj dokumentację pakietu scikit-learn na temat metod zespołowych w klasyfikacji.
  3. Pobierz zbiór danych o nazwie odpowiadającej Twojemu numerowi albumu i przeprowadź jego wstępną eksplorację: proporcja klas, liczba i rodzaje atrybutów, ich zakresy i rozkłady wartości. Nie musisz załączać wykresów rozkładów do sprawozdania – wystarczy, że je obejrzysz i opiszesz wnioski. Alternatywnie możesz oprócz min,max użyć jakichś podstawowych statystyk charakteryzujących rozkład typu średnia, odchylenie standardowe, itp. – i analizując takie charakteryzujące parametry rozkładu pogrupować (o ile to możliwe) atrybuty pisząc np. "73 atrybuty są takie a takie, 22 atrybuty charakteryzują się tym a tym, wyjątkowy jest atrybut taki a taki", itp.
  4. Stosując wiedzę nabytą na laboratorium z transformacji przestrzeni atrybutów, zwizualizuj ten zbiór w 2D i 3D podając procent wariancji zachowany przy rzutowaniu oryginalnej przestrzeni do 2D i 3D. Na wykresach pokaż przypadki obu klas jako kropki o dwóch różnych kolorach. Czy na podstawie tej wizualizacji możesz dostrzec pole do współpracy różnych klasyfikatorów – czy pewne fragmenty przestrzeni wydają się trudne dla jednych metod, a proste dla innych?
  5. Przejrzyj dokumentację RandomForestClassifier, AdaBoostClassifier, VotingClassifier, StackingClassifier. Które z nich mają parametr n_estimators? Czym on się różni od parametru estimators oraz base_estimator? Pamiętaj o różnorodnych, poznanych do tej pory klasyfikatorach – DecisionTreeClassifier, SVC, MLPClassifier, GaussianNB i QuadraticDiscriminantAnalysis.
  6. Postaraj się uzyskać na swoim zbiorze danych jak najwyższą trafność klasyfikacji za pomocą czterech wymienionych w poprzednim punkcie metod zespołowych. Używaj oryginalnych (niezmienionych) atrybutów. W przypadku AdaBoost, Voting i Stacking poeksperymentuj z różnymi zestawami bazowych klasyfikatorów – to może być iteracyjna praca, polegająca na odkrywaniu, które klasyfikatory nawzajem sobie pomagają podnosząc jakość klasyfikacji. Opisz przeprowadzone próby; jakość klasyfikacji oceniaj za pomocą G-mean i techniki 10-fold stratified CV.
  7. Powtórz cały poprzedni eksperyment (poszukiwanie najwyższej jakości) jeszcze raz, aby porównać wyniki (robiąc np. wykres różnic) wykorzystania oryginalnych atrybutów oraz atrybutów znormalizowanych. Wybierz jedną metodę normalizacji i uzasadnij, dlaczego taką wybrałe/aś. Zwróć uwagę, jak należy podejść do skalowania, kiedy mamy zbiór uczący i testujący, i nie wolno nam "dotykać" zbioru testowego podczas uczenia.
  8. Wybierz najbardziej obiecującą złożoną architekturę i spróbuj dostroić jej parametry – zarówno samej architektury, jak i klasyfikatorów bazowych. Możesz się częściowo wspomóc znanym już GridSearchCV. Ponieważ klasy nie są zbalansowane, sprawdź czy użycie class_weight='balanced' przynosi poprawę. Ile wynosi zysk z dostrojenia parametrów w porównaniu do rozwiązania początkowego?
  9. Obejrzyj macierze pomyłek dla najlepszych uzyskanych zespołów klasyfikatorów i podsumuj wnioski: jaki był wpływ normalizacji? Jakie architektury i ich parametry dały najlepsze G-mean i ile ono wyniosło? Czy widzisz zysk ze współpracy klasyfikatorów i ich uzupełniające się kompetencje? Jak duże są odchylenia standardowe wartości zwracanych przez 10-fold stratified CV i czy różnice w jakościach porównywanych klasyfikatorów są istotne?