Do zmniejszenia wymiarów można zastosować analizę głównych składników (PCA). Po przeprowadzeniu takiej redukcji wymiarowości, w jaki sposób można w przybliżeniu zrekonstruować oryginalne zmienne / cechy z niewielkiej liczby głównych składników?
Alternatywnie, w jaki sposób można usunąć lub odrzucić kilka głównych składników z danych?
Innymi słowy, jak odwrócić PCA?
Biorąc pod uwagę, że PCA jest ściśle związane z rozkładem wartości osobliwych (SVD), to samo pytanie można zadać w następujący sposób: jak odwrócić SVD?
pca
dimensionality-reduction
svd
ameba
źródło
źródło
Odpowiedzi:
PCA oblicza wektory własne macierzy kowariancji („główne osie”) i sortuje je według ich wartości własnych (ilość wyjaśnionej wariancji). Wyśrodkowane dane można następnie rzutować na te główne osie, aby uzyskać główne składowe („wyniki”). W celu zmniejszenia wymiarów można zachować tylko podzbiór głównych składników, a resztę odrzucić. (Zobacz tutaj dla laika wprowadzenie do PCA .)
Niech będzie macierzą danych z wierszami (punktami danych) kolumnami (zmiennymi lub cechami). Po odjęciu średnią wektor z każdego rzędu, otrzymujemy wyśrodkowany macierzy danych . Niech będzie macierz niektórych wektorów własnych, które chcemy użyć; te będą najczęściej być wektory z największych wartości własnych. Wtedy macierz projekcji PCA („wyniki”) zostanie po prostu podana przez .Xraw n×p n p μ X V p×k k k n×k Z=XV
Jest to zilustrowane na poniższym rysunku: pierwsza podgrupa pokazuje niektóre wyśrodkowane dane (te same dane, których używam w moich animacjach w połączonym wątku) i ich rzuty na pierwszej osi głównej. Drugi wykres podrzędny pokazuje tylko wartości tego rzutu; wymiarowość została zmniejszona z dwóch do jednego:
Aby móc zrekonstruować oryginalne dwie zmienne z tego jednego głównego składnika, możemy odwzorować go z powrotem do wymiarów pomocą . Rzeczywiście, wartości każdego komputera powinny być umieszczone na tym samym wektorze, co używany do projekcji; porównaj podploty 1 i 3. Wynik jest następnie podawany przez . Wyświetlam to na trzeciej podplocie powyżej. Aby uzyskać ostateczną rekonstrukcję , musimy dodać do tego średni wektor :p V⊤ X^=ZV⊤=XVV⊤ X^raw μ
Zauważ, że można przejść bezpośrednio z pierwszej podploty do trzeciej, mnożąc przez matrix; nazywa się to macierzą projekcji . Jeśli wszystkie stosuje się wektory, a jest macierzą tożsamości (nie odbywa się redukcja wymiarów, a tym samym „przebudowa” jest doskonały). Jeśli używany jest tylko podzbiór wektorów własnych, nie jest to tożsamość.X VV⊤ p VV⊤
Działa to dla dowolnego punktu przestrzeni komputera; można go zmapować do oryginalnej przestrzeni za pomocą .z x^=zV⊤
Odrzucanie (usuwanie) wiodących komputerów
Czasami ktoś chce odrzucić (usunąć) jeden lub kilka wiodących komputerów i zatrzymać resztę, zamiast zatrzymywać wiodące komputery i odrzucać pozostałe (jak wyżej). W takim przypadku wszystkie formuły pozostają dokładnie takie same , ale powinien składać się ze wszystkich głównych osi, z wyjątkiem tych, które chce się odrzucić. Innymi słowy, powinien zawsze obejmować wszystkie komputery, które chce się zachować.V V
Zastrzeżenie dotyczące PCA dotyczące korelacji
Kiedy PCA jest wykonywane na macierzy korelacji (a nie na macierzy kowariancji), surowe dane są nie tylko wyśrodkowane przez odjęcie ale także skalowane przez podzielenie każdej kolumny przez jej odchylenie standardowe . W tym przypadku, aby zrekonstruować oryginalne dane, należy przeskalować kolumny pomocą a dopiero potem dodać z powrotem wektor średni .Xraw μ σi X^ σi μ
Przykład przetwarzania obrazu
Ten temat często pojawia się w kontekście przetwarzania obrazu. Zastanów się nad Lenną - jednym ze standardowych obrazów w literaturze poświęconej przetwarzaniu obrazów (skorzystaj z linków, aby dowiedzieć się, skąd pochodzi). Poniżej po lewej stronie wyświetlam wariant w skali szarości tego obrazu (plik dostępny tutaj ).512×512
Możemy potraktować ten obraz w skali szarości jako macierz danych . Wykonuję na nim PCA i obliczam przy użyciu pierwszych 50 głównych składników. Wynik jest wyświetlany po prawej stronie.512×512 Xraw X^raw
Cofanie SVD
PCA jest bardzo ściśle związana z rozkładem wartości osobliwych (SVD), patrz Relacja między SVD a PCA. Jak korzystać z SVD do wykonywania PCA? po więcej szczegółów. Jeśli macierz macierz jest edytowana SVD jako i jeden wybiera wymiarowy wektor który reprezentuje punkt w „zmniejszonej” przestrzeni z wymiarów, a następnie odwzorować go z powrotem do wymiarów należy go pomnożyć przez .n×p X X=USV⊤ k z U k p S⊤1:k,1:kV⊤:,1:k
Przykłady w R, Matlab, Python i Stata
Przeprowadzę PCA na danych Fisher Iris, a następnie zrekonstruuję je przy użyciu dwóch pierwszych głównych elementów. Wykonuję PCA na macierzy kowariancji, a nie na macierzy korelacji, tj. Nie skaluję tutaj zmiennych. Ale nadal muszę dodać średnią z powrotem. Niektóre pakiety, takie jak Stata, zajmują się tym poprzez standardową składnię. Dzięki @StasK i @Kodiologist za pomoc w kodzie.
Sprawdzimy rekonstrukcję pierwszego punktu danych, czyli:
Matlab
Wynik:
R
Wynik:
Dla opracowanego przykładu R rekonstrukcji obrazów PCA zobacz także tę odpowiedź .
Pyton
Wynik:
Pamiętaj, że różni się to nieco od wyników w innych językach. Jest tak, ponieważ wersja zestawu danych Iris w Pythonie zawiera błędy .
Stata
źródło
nComp