2016-08-01 18 views
7

Trudno jest powiązać teorię z wdrożeniem. Byłbym wdzięczny za pomoc w zrozumieniu, gdzie moje zrozumienie jest złe.Jak wykorzystać zredukowane dane - wyniki analizy głównych składników

Notacje - matrix pogrubiony kapitału i wektory pogrubioną czcionką małej litery

**X** jest zbiór danych na <code>n</code> obserwacji, każdy z <code>d</code> zmiennych. Tak więc, biorąc pod uwagę te obserwowane <code>d</code> -wymiarowych wektorów danych, <code>m</code> -wymiarowych główne osie są **w**<sub>j</sub>, na j w {1,...,m} gdzie <code>m</code> jest wymiar docelowy.

W <code>m</code> główne składniki obserwowanej macierzy danych będzie **Y = X W** gdzie matryca **Y** in ℝ<sup> n x m</sup>, matryca **X** in ℝ<sup> n x d</sup> i matryca **W** in ℝ<sup> d x m</sup>.

Kolumny **W** tworzą ortogonalną podstawę dla <code>m</code> funkcji i wyjście **y**<sub>n</sub> jest głównym projekcja składnik, który minimalizuje squared błąd modernizacji:

∑<sub>n</sub> ||**x**<sub>n</sub> - **x̂**<sub>n</sub>||<sup>2</sup>
i optymalnej odbudowy **x**<sub>n</sub> jest podana przez **x̂**<sub>n</sub> = **W*y**<sub>n</sub>.

Model danych

X(i,j) = A(i,:)*S(:,j) + noise 

gdzie PCA powinno być wykonane na X, aby wyjście S. S musi być równy Y.

Zadanie 1: Zmniejszone danych Y nie jest równa S, który jest używany w modelu. Gdzie moje zrozumienie jest złe?

Problem 2: Jak zrekonstruować tak, że błąd jest minimalny?

Proszę o pomoc. Dziękuję Ci.

clear all 
clc 
n1 = 5; %d dimension 
n2 = 500; % number of examples 

ncomp = 2; % target reduced dimension 
%Generating data according to the model 
% X(i,j) = A(i,:)*S(:,j) + noise 
Ar = orth(randn(n1,ncomp))*diag(ncomp:-1:1); 
T = 1:n2; 
%generating synthetic data from a dynamical model 
S = [ exp(-T/150).*cos(2*pi*T/50) 
     exp(-T/150).*sin(2*pi*T/50) ]; 
% Normalizing to zero mean and unit variance 
S = (S - repmat(mean(S,2), 1, n2)); 
S = S ./ repmat(sqrt(mean(Sr.^2, 2)), 1, n2); 
Xr = Ar * S; 
Xrnoise = Xr + 0.2 * randn(n1,n2); 

h1 = tsplot(S); 


    X = Xrnoise; 

XX = X'; 
[pc, ~] = eigs(cov(XX), ncomp); 
Y = XX*pc; 

UPDATE [10 sierpnia]

podstawie Odpowiedź, tutaj jest pełny kod, który

clear all 
clc 
n1 = 5; %d dimension 
n2 = 500; % number of examples 

ncomp = 2; % target reduced dimension 
%Generating data according to the model 
% X(i,j) = A(i,:)*S(:,j) + noise 
Ar = orth(randn(n1,ncomp))*diag(ncomp:-1:1); 
T = 1:n2; 
%generating synthetic data from a dynamical model 
S = [ exp(-T/150).*cos(2*pi*T/50) 
     exp(-T/150).*sin(2*pi*T/50) ]; 
% Normalizing to zero mean and unit variance 
S = (S - repmat(mean(S,2), 1, n2)); 
S = S ./ repmat(sqrt(mean(S.^2, 2)), 1, n2); 
Xr = Ar * S; 
Xrnoise = Xr + 0.2 * randn(n1,n2); 

    X = Xrnoise; 

XX = X'; 
[pc, ~] = eigs(cov(XX), ncomp); 
Y = XX*pc; %Y are the principal components of X' 
%what you call pc is misleading, these are not the principal components 
%These Y columns are orthogonal, and should span the same space 
%as S approximatively indeed (not exactly, since you introduced noise). 

%If you want to reconstruct 
%the original data can be retrieved by projecting 
%the principal components back on the original space like this: 
Xrnoise_reconstructed = Y*pc'; 

%Then, you still need to project it through 
%to the S space, if you want to reconstruct S 
S_reconstruct = Ar'*Xrnoise_reconstructed'; 


plot(1:length(S_reconstruct),S_reconstruct,'r') 
hold on 
plot(1:length(S),S) 

Działka jest plot który bardzo różni się od tego, który jest pokazany na Odpowiedź. Tylko jeden składnik S dokładnie pasuje do S_reconstructed. Czy nie powinna być zrekonstruowana cała oryginalna 2-wymiarowa przestrzeń źródła wejściowego S? Nawet jeśli odetnę hałas, wtedy również jeden składnik S zostanie dokładnie zrekonstruowany.

+0

Domyślam się, że to pytanie jest bardziej odpowiednie dla stosu przetwarzania sygnałów http://dsp.stackexchange.com/, ponieważ zajmuje się raczej teorią niż implementacją kodu –

+0

Co to jest 'Sr' w tym wierszu' S = S ./ repmat (sqrt (średnia (Sr.^2, 2)), 1, n2); '? –

Odpowiedz

3

widzę nikt nie odpowiedział na to pytanie, więc tu idzie:

Co obliczane w Y są główne składniki X' (co nazywasz pc jest mylące, nie są to główne składniki). Kolumny Y są ortogonalne i powinny w przybliżeniu odpowiadać rzeczywistemu przybliżeniu (nie dokładnie, ponieważ wprowadzono szum).

Jeśli chcesz zrekonstruować Xrnoise, trzeba spojrzeć na teorii (np here) i stosuje się go poprawnie: oryginalne dane mogą być pobierane przez wystające główne komponenty z powrotem na oryginalnym miejscu jak ten:

Xrnoise_reconstructed = Y*pc' 

Następnie, jeśli chcesz zrekonstruować numer S, musisz go jeszcze przekształcić przez pinv(Ar)*Xrnoise_reconstructed.

zestawienia ładnie dla mnie: Xrnoise and reconstruction

odpowiedź Update [10 sie]: (wydanej 12 sie)

Twój Ar matryca nie definiuje podstawę ortonormalną, i jako takie, transpozycję Ar' nie jest transformacją odwrotną. Wcześniejsza udzielona przeze mnie odpowiedź była w ten sposób błędna. Odpowiedź została poprawiona powyżej.

+0

Dziękuję za odpowiedź. Mam jedną wątpliwość: czy stwierdzenie Y = XX * pc; błędny? – SKM

+0

'Y = XX * pc;' nie jest instrukcją, jest to równanie, które ustanawia definicję 'Y'. Więc nie jest z natury poprawna lub nieprawidłowa. Ale skutecznie oblicza główne składniki, więc "Y" reprezentuje pierwsze dwa główne składniki 'X'. –

+0

Mógłbyś rzucić okiem na aktualizację? Zawiera pełną implementację zawierającą odpowiedź. Moja fabuła wygląda zupełnie inaczej niż twoja. Tylko jeden składnik S dokładnie pasuje do S_reconstructed. (Pytanie 1) Czy nie powinna być zrekonstruowana cała oryginalna 2-wymiarowa przestrzeń źródła wejściowego S? Czy implementacja i moje zrozumienie są nieprawidłowe? (Pytanie 2) Czy PCA będzie pracować na danych binarnych? Czy mogę zastosować ten sam program do pliku binarnego? Dziękuję za poświęcony czas i wysiłek. – SKM

-3

Można użyć funkcji pca z przybornika Statystyka.

coeff = pca(X) 

Z documentation każda kolumna coeff zawiera współczynniki dla jednego głównego składnika. Możesz więc odtworzyć obserwowane dane przez pomnożenie przez , np. X*coeff

2

Twoje zrozumienie jest całkiem poprawne. Jednym z powodów, dla których ktoś mógłby korzystać z PCA, byłoby zmniejszenie wymiarów danych. Pierwszy główny składnik ma największą wariancję próbki spośród wszystkich znormalizowanych kombinacji liniowych kolumn X. Drugi główny składnik ma maksymalną wariancję zależną od ortogonalności względem następnej itd.

Można wtedy zrobić PCA w zestawie danych i zdecydować o odcięciu ostatniego głównego składnika lub kilku ostatnich głównych składników danych. Ma to na celu zmniejszenie efektu przekleństwa wymiarowego. Przekleństwo wymiarowe jest terminem używanym do zwrócenia uwagi na fakt, że jakakolwiek grupa wektorów jest rzadka we względnie wysoko wymiarowej przestrzeni. Odwrotnie oznacza to, że potrzebna byłaby absurdalna ilość danych do utworzenia dowolnego modelu w zestawie danych o dość dużej wartości, na przykład histogramu tekstu dokumentu tekstowego o potencjalnie dziesiątkach tysięcy wymiarów.

W rezultacie redukcja wymiarów za pomocą PCA usuwa składniki, które są silnie skorelowane. Na przykład weźmy spojrzeć na zdjęcie:

Cameraman

Jak widać, większość wartości są prawie takie same, silnie skorelowane. Można połączyć niektóre z tych skorelowanych pikseli, usuwając ostatnie główne komponenty. Zmniejszy to wymiarowość obrazu, zapakuje go, usuwając niektóre informacje z obrazu.

Nie ma magicznego sposobu na określenie najlepszej ilości głównych składników lub najlepszej rekonstrukcji, o której mi wiadomo.

2

Przebacz mi, jeśli nie jestem matematycznie rygorystyczny. Jeśli przyjrzymy się równaniu: X = A * S, możemy powiedzieć, że przyjmujemy dane dwuwymiarowe i mapujemy je do 2-wymiarowej podprzestrzeni w 5-wymiarowej przestrzeni. Czy A jest podstawą dla tej podprzestrzeni 2-wymiarowej.

Kiedy rozwiązujemy problem PCA dla X i patrzymy na PC (główny składnik), widzimy, że dwa duże wzory (odpowiadające dwóm największym wartościom eignvalues) obejmują tę samą podprzestrzeń, co A. (Wielokrotnie A * * PC i zobaczmy, że dla pierwszych trzech małych wzlotów otrzymujemy 0, co oznacza, że ​​wektory są ortogonalne do A i tylko dla dwóch największych otrzymujemy wartości, które są różne od 0).

Więc myślę, że powodem, dla którego otrzymujemy inną podstawę dla tej dwuwymiarowej przestrzeni, jest to, że X = A * S może być wytworem niektórych A1 i S1, a także dla niektórych innych A2 i S2, a my nadal otrzymamy X = A1 * S1 = A2 * S2. To, co daje nam PCA, jest szczególną podstawą, która maksymalizuje wariancję w każdym wymiarze.

Jak rozwiązać problem? Widzę, że wybrałeś jako dane testowe o niektórych czasach wykładniczych grzechu i cos, więc myślę, że masz do czynienia z konkretnym rodzajem danych. Nie jestem ekspertem od przetwarzania sygnałów, ale przyjrzyjmy się algorytmowi MUZYKI.

+0

Dziękuję za odpowiedź. Moje dane testowe S mogą być generowane z dowolnego systemu. Może być również losowy. X = A * S + szum (eq1) jest modelem danych, a redukcja wymiarów na X odbywa się za pomocą równania S = AX daje główne komponenty i jest danymi o zmniejszonej wymiarowości. Mam 2 pytania, czy możesz pomóc? – SKM

+0

S oznacza zredukowane dane wymiarowe, których rzeczywistymi danymi wielowymiarowymi są X, których wymiarowość musi zostać zmniejszona. Może być również losowy. X = A * S + szum (eq1) jest modelem danych, a redukcja wymiarów na X odbywa się za pomocą równania S = AX daje główne komponenty i jest danymi o zmniejszonej wymiarowości. Mam 2 pytania, czy możesz pomóc? – SKM

+0

(1) To, co jest niejasne, to to, że w ostatniej linii realizacji, gdzie zrobiłem Y = XX * pc. Czy to zdanie dałoby Y jako zredukowane dane wymiarowe równe S, które zastosowano w eq1? Celem jest to, że muszę zastosować najmniejszy kwadratowy estymator, aby oszacować A i S z modelu w eq1. Po oszacowaniu powinienem być w stanie obliczyć błąd średniej kwadratowej między S a jego oszacowaniem. Gdzie moje zrozumienie jest złe? – SKM

Powiązane problemy