Jak wybrać jądro dla PCA jądra?

12

Jakie są sposoby wyboru, które jądro spowodowałoby dobre rozdzielenie danych w końcowym wyjściu danych przez jądro PCA (analiza głównych składników) i jakie są sposoby optymalizacji parametrów jądra?

Warunki laika, jeśli to możliwe, byłyby bardzo mile widziane, a linki do artykułów wyjaśniających takie metody byłyby również miłe.

Szczypiorek
źródło
1
Kiedy mówisz „dobra separacja danych”, o co dokładnie chodzi? Jakie masz zastosowanie w jądrze PCA? Jeśli ma to coś wspólnego z „separacją danych”, to może powinieneś użyć jakiejś techniki klasyfikacji (np. Maszyny wektorowej obsługi jądra) zamiast kPCA? Poza tym dobre pytanie, +1. Nie mam doświadczenia w wyborze jądra, więc nie mogę ci pomóc.
ameba
@amoeba Służy do nieliniowej redukcji wymiarów. Moja wiedza na temat wektorów pomocniczych jest nieco ograniczona, ponieważ nigdy nie brałem żadnych kursów CS; Jestem studentem i uczę się przez gazety online. Przez „dobrą separację danych” rozumiem to, co pokazują przedstawione w tym artykule przykłady . Pracuję z Matlabem i mój kod PCA jądra jest gotowy do pracy z prostymi, wielorakimi, jądrowymi i sigmoidalnymi jądrami, ale dobrze byłoby wiedzieć, kiedy użyć tego, aby uzyskać najlepsze wyniki.
Szczypiorek
Myślę, że najlepszym (jedynym?) Sposobem wyboru jądra jest skorzystanie z weryfikacji krzyżowej, zobacz tutaj: Jak wybrać jądro dla SVM? Aby korzystać z walidacji krzyżowej, wystarczy mieć miarę wydajności swojego kPCA. Separacja klasa może być przyzwoity środek jeśli to jest to, czego po, ale uwaga, że PCA / kPCA nie jest zaprojektowane w ogóle doprowadzić do oddzielenia dobra klasy; po prostu maksymalizuje uchwyconą wariancję.
ameba
Przeczytałem trochę i być może będę w stanie odpowiedzieć na twoje pytanie. Ale może to zająć trochę czasu (dni).
ameba
@amoeba Maksymalizacja wariancji ma dla mnie sens teraz, kiedy o niej wspominasz. Zajmę się również weryfikacją krzyżową, ale byłoby wspaniale, gdybyś mógł zajrzeć również trochę, jeśli możesz znaleźć czas! Dziękuję Ci.
Szczypiorek

Odpowiedzi:

7

Ogólne podejście do wyboru optymalnego jądra (albo rodzaju jądra, albo parametrów jądra) w dowolnej metodzie opartej na jądrze to sprawdzanie poprawności krzyżowej. Zobacz tutaj omówienie wyboru jądra dla maszyn wektorów wsparcia: Jak wybrać jądro dla SVM?

Pomysł weryfikacji krzyżowej polega na tym, że pomijamy niektóre dane „testowe”, uruchamiamy nasz algorytm, aby dopasować model do pozostałych danych „szkoleniowych”, a następnie sprawdzamy, jak dobrze model wynikowy opisuje dane testowe (i jak duży jest błąd jest). Jest to powtarzane dla różnych pominiętych danych, błędy są uśredniane w celu utworzenia średniego błędu zweryfikowanego krzyżowo, a następnie można porównywać różne algorytmy, aby wybrać ten, który daje najmniejszy błąd. W SVM można wykorzystać np. Dokładność klasyfikacji (lub powiązane miary) jako miarę wydajności modelu. Następnie należy wybrać jądro, które daje najlepszą klasyfikację danych testowych.

Powstaje zatem pytanie: jakiej miary wydajności modelu można użyć w kPCA? Jeśli chcesz osiągnąć „dobrą separację danych” (przypuszczalnie dobrą separację klas), możesz w jakiś sposób zmierzyć to na danych szkoleniowych i użyć tego, aby znaleźć najlepsze jądro. Należy jednak pamiętać, że PCA / kPCA nie są zaprojektowane w celu uzyskania dobrego oddzielenia danych (oni nie biorą pod uwagę klasy etykiety w ogóle ). Mówiąc ogólnie, ktoś chciałby innej, niezwiązanej z klasą, miary wydajności modelu.

W standardowym PCA można użyć błędu rekonstrukcji jako miary wydajności zestawu testowego. W jądrze PCA można również obliczyć błąd rekonstrukcji, ale problem polega na tym, że nie jest on porównywalny między różnymi jądrami: błąd rekonstrukcji to odległość zmierzona w docelowej przestrzeni cech; a różne jądra odpowiadają różnym obszarom docelowym ... Mamy więc problem.

Jednym ze sposobów rozwiązania tego problemu jest jakoś obliczenie błędu rekonstrukcji w pierwotnej przestrzeni, a nie w przestrzeni docelowej. Oczywiście opuszczony punkt danych testowych znajduje się w pierwotnej przestrzeni. Ale jego rekonstrukcja kPCA żyje w [pod-wymiarowej podprzestrzeni] przestrzeni docelowej. Można jednak znaleźć punkt („obraz wstępny”) w pierwotnej przestrzeni, który byłby zmapowany jak najbliżej tego punktu rekonstrukcji, a następnie zmierzyć odległość między punktem testowym a tym obrazem wstępnym jako błąd rekonstrukcji.

Nie podam tutaj wszystkich wzorów, ale odsyłam do niektórych artykułów i wstawiam tylko kilka cyfr.

Idea „obrazu wstępnego” w kPCA została najwyraźniej wprowadzona w tym dokumencie:

Mika i in. nie przeprowadzają weryfikacji krzyżowej, ale potrzebują obrazów wstępnych do celów usuwania szumów, patrz ten rysunek:

Odszumianie kPCA od Mika i in.

Wyprostowane (grube) punkty to wstępne obrazy projekcji kPCA (tutaj nie ma testu ani szkolenia). Znalezienie tych obrazów wstępnych nie jest trywialnym zadaniem: należy użyć opadania gradientu, a funkcja utraty zależy od jądra.

Oto najnowszy artykuł, w którym wykorzystano wstępne obrazy do celów weryfikacji krzyżowej i wyboru jądra / hiperparametrów:

Oto ich algorytm:

Alam i Fukumizu

A oto kilka wyników (które moim zdaniem są dość oczywiste):

Alam i Fukumizu

ameba
źródło
1
(+1) Warto zauważyć, że ten obraz wstępny jest zbiorem środków Frécheta / Karchera punktów przypisanych do danej gromady, ale to niekoniecznie pomaga w niczym.
Dougal
@Dougal: wow, dzięki, w ogóle nie byłem świadomy tego terminu. Ale nie jestem pewien, czy rozumiem. Zastanówmy się nad pierwszym rysunkiem, który tutaj zamieściłem (od Mika i in.): Każdy punkt 2d jest odwzorowany na 1-wymiarową przestrzeń komputera jądra która następnie jest odwzorowana z powrotem na 2d obraz wstępny . Kiedy mówisz, że pre-image jest „zbiorem środków Frecheta / Karchera punktów przypisanych do danego skupiska”, co masz na myśli przez skupisko i dlaczego istnieje zestaw? x y y z zxxyyzz
ameba
Po namyśle myślę, że wcześniej nie zwracałem wystarczającej uwagi; mój komentarz dotyczy k-średnich jądra, a nie kPCA. Preimage jest zdecydowanie związane z tą koncepcją, ale wcale nie to samo. Przepraszam za hałas. :)
Dougal