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
jest zbiór danych na obserwacji, każdy z zmiennych. Tak więc, biorąc pod uwagę te obserwowane -wymiarowych wektorów danych, -wymiarowych główne osie są , na w gdzie jest wymiar docelowy.
W główne składniki obserwowanej macierzy danych będzie gdzie matryca , matryca i matryca .
Kolumny tworzą ortogonalną podstawę dla funkcji i wyjście jest głównym projekcja składnik, który minimalizuje squared błąd modernizacji:
i optymalnej odbudowy jest podana przez .
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 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.
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 –
Co to jest 'Sr' w tym wierszu' S = S ./ repmat (sqrt (średnia (Sr.^2, 2)), 1, n2); '? –