Staram się zmniejszyć wymiarowość i hałas zestawu danych, wykonując PCA na zbiorze danych i wyrzucając kilka ostatnich komputerów. Następnie chcę użyć niektórych algorytmów uczenia maszynowego na pozostałych komputerach, dlatego chcę znormalizować dane, wyrównując wariancję komputerów, aby algorytmy działały lepiej.
Jednym prostym sposobem jest po prostu znormalizowanie wariancji wartości jednostkowych. Jednak pierwszy komputer zawiera więcej wariancji w stosunku do oryginalnego zestawu danych niż kolejne, a ja nadal chcę nadać mu większą „wagę”. Dlatego zastanawiałem się: czy istnieje prosty sposób, aby po prostu podzielić jego wariancję i udostępnić ją komputerom z mniejszymi wariancjami?
Innym sposobem jest odwzorowanie komputerów PC z powrotem do pierwotnej przestrzeni funkcji, ale w takim przypadku wymiar również by wzrósł do pierwotnej wartości.
Wydaje mi się, że lepiej jest zachować wynikowe kolumny prostopadłe, ale w tej chwili nie jest to konieczne.
źródło
Odpowiedzi:
Nie jest dla mnie do końca jasne, że to, o co pytasz, jest tym, czego naprawdę potrzebujesz: wspólnym krokiem wstępnego przetwarzania w uczeniu maszynowym jest redukcja wymiarów + wybielanie, co oznacza robienie PCA i standaryzację komponentów, nic więcej. Niemniej jednak skupię się na twoim pytaniu w formie, w jakiej zostało sformułowane, ponieważ jest bardziej interesujące.
Niech będzie wyśrodkowaną macierzą danych z punktami danych w wierszach i zmiennymi w kolumnach. PCA równa się rozkładowi liczby pojedynczej gdzie do wykonania zmniejszenia wymiarów trzymamy tylko komponentów. Ortogonalna „rotacja czynnikowa” tych składników oznacza wybranie ortogonalnej macierzy macierzy i podłączenie jej do rozkładu:X n×d
Teraz jesteśmy gotowi sformułować problem w kategoriach matematycznych: biorąc pod uwagę , znajdź macierz obrotu tak, że obrócone ładunki , ma równą sumę kwadratów w każdej kolumnie.L=VkSk/n−1−−−−−√ R LR
Rozwiążmy to. Sumy kolumn kwadratów po obrocie są równe elementom ukośnym Ma to sens: obrót po prostu redystrybuuje wariancje składników, które pierwotnie podano przez , między nimi, zgodnie z tym wzorem. Musimy je redystrybuować, aby wszystkie stały się równe ich średniej wartości .
Nie sądzę, aby istniało rozwiązanie w formie zamkniętej, a tak naprawdę istnieje wiele różnych rozwiązań. Ale rozwiązanie można łatwo zbudować sekwencyjnie:
Spowoduje to równomierne rozłożenie wszystkich wariancji przez sekwencję obrotów 2D. Mnożenie macierzy rotacji wszystkie te wspólnie uzyskując całkowitą .(k−1) R
Przykład
Rozważ następującą :Średnia wariancja wynosi . Mój algorytm będzie działał w następujący sposób:S2/(n−1)
Krok 1: Obróć PC1 i PC4, aby PC1 otrzymało wariancję . W rezultacie PC4 dostaje wariancję .5 1+(10−5)=6
Krok 2: obróć PC2 (nowa maksymalna wariancja) i PC3, aby PC2 otrzymało wariancję . W rezultacie PC3 otrzymuje wariancję .5 3+(6−5)=4
Krok 3: obróć PC4 (nowa maksymalna wariancja) i PC3, aby PC4 otrzymało wariancję . W rezultacie PC3 otrzymuje wariancję .5 4+(6−1)=5
Gotowy.
Napisałem skrypt Matlab, który implementuje ten algorytm (patrz poniżej). Dla tej macierzy wejściowej sekwencja kątów obrotu wynosi:
Warianty komponentów po każdym kroku (w rzędach):
Ostateczna macierz obrotu (iloczyn trzech macierzy obrotu 2D):
I ostatnia to:(LR)⊤LR
Oto kod:
Oto kod w Pythonie dostarczony przez @feilong:
Zauważ, że ten problem jest całkowicie równoważny z następującym: biorąc pod uwagę zmiennych nieskorelowanych z wariancjami , znajdź obrót (tj. Nową podstawę ortogonalną), który da zmiennych o równych wariancjach (ale oczywiście już nieskorelowanych).k σ2i k
źródło
mu
.W swojej szczegółowej i wyczerpującej odpowiedzi @amoeba pokazał - jako część odpowiedzi - w jaki sposób można obrócić dwie nieskorelowane zmienne (takie jak na przykład główne składniki), aby uzyskać dla nich pożądane wariancje (oczywiście kosztem utraty nieskorelacji) . Niech zmienne ortogonalne i mają odpowiednio wariancje (większy) i (mniejszy). Obróć je, aby uzyskał dowolną, zmniejszoną wariancję (podczas gdy w konsekwencji stanie się wariancją ).X Y σ2max σ2min X μ2 Y σ2max+σ2min−μ2
@amoeba pokazuje wzór, na podstawie którego możemy obliczyć kąt takiego obrotu, :cosθ
ale nie wykazał, skąd pochodzi to równanie; prawdopodobnie myśląc, że to oczywiste bez wyjaśnienia. Oczywiste czy nie, uważam, że warto to w jakiś sposób wyjaśnić. Moja odpowiedź przedstawia jeden sposób.
I tak, mamy elipsoidalne, koncentrujące danych chmura w przestrzeni zmiennych nieskorelowanych i . Musimy obrócić osie o kąt . Punkt danych w chmurze (taki jak zielony punkt na zdjęciu) o współrzędnej będzie miał tę współrzędną jako po obrocie.X Y θ X x x∗
Zauważ, że rzut współrzędnej wycięcie na obróconą oś jest dana przez (cathetus jako przeciwprostokątna i kąt między nimi). Zauważ też, że jest mniejsze niż o wycięcie długości obliczalne ze współrzędnej : (inny katefus i przeciwprostokątna). A więc,x X∗ x′=xcosθ x∗ x′ x′−x∗ y ysinθ
Znamy (patrz początek) wariancje (lub sumy kwadratów) dwóch zmiennych i wariancję (suma kwadratów) z . Potem następuje:μ2 X∗
Z którego szacujesz , jak pokazano @amoeba, i wykonuj obrót.cosθ
źródło
Jeśli interpretuję wszystko poprawnie, masz na myśli to, że pierwszy składnik podstawowy (wartość własna) wyjaśnia większość wariancji danych. Może się to zdarzyć, gdy metoda kompresji jest liniowa. Jednak w przestrzeni obiektów mogą występować zależności nieliniowe .
Oto przykład scikit, w którym przeprowadzają wyszukiwanie siatki w celu znalezienia optymalnej liczby głównych składników, które należy zachować (hiperparametr) za pomocą PCA. Na koniec stosują regresję logistyczną w dolnej przestrzeni wymiarowej: http://scikit-learn.org/stable/auto_examples/plot_digits_pipe.html#example-plot-digits-pipe-py
Protip: Autoencodery nie mają zamkniętego formularza (afaik), więc jeśli twój kontekst przesyła strumieniowo dane, oznacza to, że możesz ciągle aktualizować autoencoder (skompresowana reprezentacja), a tym samym może kompensować takie rzeczy, jak dryf koncepcji. Dzięki PCA musisz od czasu do czasu ponownie trenować tryb wsadowy, gdy pojawiają się nowe dane.
Jeśli chodzi o nadawanie niektórym funkcjom większej „wagi”, zobacz regularyzację (zacznę od norm https://en.wikipedia.org/wiki/Norm_(mathematics) ). Możesz być również zaskoczony, jak podobna jest regresja logistyczna do perceptronu.
źródło