PCA i losowe lasy

12

W ostatnim konkursie Kaggle (ręcznie) zdefiniowałem 10 dodatkowych funkcji dla mojego zestawu treningowego, które następnie zostaną wykorzystane do wyszkolenia losowego klasyfikatora lasów. Postanowiłem uruchomić PCA w zestawie danych z nowymi funkcjami, aby zobaczyć, jak się ze sobą porównują. Odkryłem, że ~ 98% wariancji było przenoszone przez pierwszy składnik (pierwszy wektor własny). Następnie kilkakrotnie trenowałem klasyfikator, dodając jedną funkcję na raz, i korzystałem z walidacji krzyżowej i błędu RMS, aby porównać jakość klasyfikacji. Przekonałem się, że klasyfikacje poprawiły się z każdą dodatkową funkcją i że końcowy wynik (ze wszystkimi 10 nowymi funkcjami) był znacznie lepszy niż pierwszy test z (powiedzmy) 2 funkcjami.

  • Biorąc pod uwagę, że PCA twierdziło, że ~ 98% wariancji dotyczyło pierwszego składnika mojego zbioru danych, dlaczego jakość klasyfikacji tak bardzo się poprawiła?

  • Czy dotyczy to innych klasyfikatorów? RF skaluje się na wielu rdzeniach, więc trenowanie jest znacznie szybsze niż (powiedzmy) SVM.

  • Co jeśli przekształciłbym zestaw danych w przestrzeń „PCA” i uruchomiłbym klasyfikator na przestrzeni przekształconej. Jak zmieniłyby się moje wyniki?

Vishal
źródło
2
Czy znormalizowałeś swoje dane przed uruchomieniem PCA? Gdybym miał zgadywać, pomyślałbym, że jedna z twoich funkcji była na znacznie większą skalę niż inne ...
Marc Shivers,
1
Funkcja PCA automatycznie normalizuje wszystko podczas wykonywania obliczeń.
Vishal,
1
Może to tylko ja, ale czy mógłbyś wyjaśnić następujące: pierwszy krok polegał na dodaniu 10 (surowych) funkcji, pojedynczo, czy też pracowałeś bezpośrednio z komponentami PCA? Jak już wspomniano, rozumiem, że jest to pierwszy przypadek i zastanawiasz się, czy możesz pracować bezpośrednio z wynikami z PCA. W obu przypadkach, czy zastosowałeś PCA do wszystkich zmiennych, w tym nowych funkcji, czy tylko później?
chl
Zastosowałem PCA do oryginalnej matrycy z 10 dodatkowymi funkcjami. Następnie wyszkoliłem klasyfikatora, dodając jedną funkcję na raz, aby móc zmierzyć przyrostową poprawę wynikającą z dodania każdej cechy. Moje pytanie brzmiało: jeśli przekształcę zestaw danych (z 10 nowymi funkcjami) w przestrzeń PCA, a następnie uruchomię klasyfikator bezpośrednio w zestawie danych w przestrzeni PCA
Vishal

Odpowiedzi:

7

Podczas modelowania predykcyjnego próbujesz wyjaśnić zmienność odpowiedzi, a nie zmienność funkcji. Nie ma powodu sądzić, że wtłoczenie tak dużej liczby wariantów funkcji w jedną nową funkcję uchwyci dużą moc predykcyjną funkcji jako całości.

Wyjaśnia się to często jako różnicę między regresją głównego elementu zamiast częściowych najmniejszych kwadratów.

Shea Parkes
źródło
„Nie ma powodu sądzić, że wtłoczenie tak dużej liczby wariantów funkcji w jedną nową funkcję uchwyci dużą moc predykcyjną funkcji jako całości”. Nigdy nie o to chodziło, a zrobienie tego spowodowałoby bardzo zdezorientowany klasyfikator! Celem było posiadanie szeregu funkcji, z których wszystkie ilustrują różne aspekty zestawu danych, z zamiarem zmniejszenia błędu uogólnienia. Punktem podjęcia PCA było sprawdzenie, jak różne były te funkcje. A moim celem opublikowania było to, że moje funkcje nie były tak różne, ale wyniki RF wciąż się poprawiały.
Vishal
1
Ta sama logika może nadal obowiązywać. Nowa funkcja jest bardzo zbliżona do poprzedniej, a poprzednia funkcja może nadal zapewniać większą moc predykcyjną. Specjalnie dla randomForest: jeśli funkcja prawie duplikatu jest ogólnie ważna, bardziej prawdopodobne jest, że jedna lub inna wersja zostanie wybrana jako kandydaci do podziału.
Shea Parkes,
To nasuwa kolejne pytanie: w jaki sposób a priori wybierasz funkcje losowego klasyfikatora lasów, aby poprawić klasyfikację, bez faktycznego uruchamiania klasyfikatora? Czy istnieje proces kontroli bezpieczeństwa? Jak ty to robisz? :)
Vishal,
Nie znam żadnych użytecznych metod selekcji a priori. Można zrobić wiele zagnieżdżone pętle znaczenie i selekcji poprzez niektórych pakietach R jak Boruta. Nie uważam ich też za użytecznych. Uważam za nieuzasadnione, aby wierzyć, że jakakolwiek funkcja nie ma żadnego efektu. Mogę wierzyć, że podkreślenie niektórych funkcji w stosunku do innych może być przydatne, ale podstawowy algorytm randomForest robi to już całkiem dobrze. Jeśli jesteś tak głęboko zaangażowany w modelowanie i chcesz większej wydajności, sugerowałbym zestawianie innych algorytmów, na przykład przyspieszonych drzew, z twoim randomForest.
Shea Parkes,
1
Możesz z góry obliczyć pewne miary separacji dla swoich klas na podstawie twoich cech (odległość Jeffriesa-Matusity, dywergencja itp.) Może to pomóc w ustaleniu, które funkcje pomagają rozróżnić klasy, ale ze względu na działanie RF nie jest łatwo wybrać, które cechy zapewniają najlepszy zestaw do klasyfikacji. Jedną z wyraźnych przeszkód jest to, że RF samodzielnie znajduje zmienne interakcje.
JEquihua
6

Pierwszym głównym elementem jest liniowa kombinacja wszystkich funkcji. Fakt, że wyjaśnia prawie całą zmienność, oznacza po prostu, że większość współczynników zmiennych w pierwszym głównym składniku jest znacząca.

Teraz generowane przez ciebie drzewa klasyfikacyjne są trochę innym zwierzęciem. Dokonują podziałów binarnych na ciągłe zmienne, które najlepiej oddzielają kategorie, które chcesz sklasyfikować. Nie jest to dokładnie to samo, co znalezienie ortogonalnych kombinacji liniowych zmiennych ciągłych, które dają kierunek największej wariancji. W rzeczywistości ostatnio dyskutowaliśmy o artykule na temat CV, w którym do analizy skupień wykorzystano PCA, a autor (autorzy) stwierdzili, że istnieją sytuacje, w których najlepsze rozdzielenie nie występuje w pierwszych kilku głównych składnikach, ale w ostatnich.

Michael R. Chernick
źródło
3
„W rzeczywistości ostatnio rozmawialiśmy o artykule na temat CV, w którym PCA” masz link do tego? Jestem bardzo zainteresowany :)
użytkownik603
Poszukam dyskusji.
Michael R. Chernick
Czy zechcesz spojrzeć na powiązane pytanie ?
nadya