% András példája PCA-ra

format shortG

% Tegyük fel, hogy adott három csatorna és N = 10 mérést végeztünk:

y1 = [1,1,4,3,4,5,1,3,2,5];
y2 = [4,2,2,1,4,4,2,3,1,1];
y3 = [3.35,1.85,2.90,1.80,4.40,4.75,1.85,3.30,1.45,2.50];

% Az átlagok levonásával megkapjuk a centralizált vektorokat:
y1cent = y1 - mean(y1) * ones(1,length(y1));
y2cent = y2 - mean(y2) * ones(1,length(y2));
y3cent = y3 - mean(y3) * ones(1,length(y3));

% Ezekb?l létrehozhatunk egy mátrixot:
ycent = [y1cent; y2cent; y3cent]'
% Most a csatornákból oszlopok lettek.

% A mérések száma:
N = length(y1);

% Ehhez a méréssorozathoz tartozó kovariancia mátix:
VY = (ycent' * ycent) / (N-1)

% NB: Matlabban ugyanezt így is lehet:
% VY = cov(ycent);

% A spektrális felbontása ennek a mátrixnak a következ?:
[U,D] = eig(VY)

% D átlójában vannak a sajátértékek növekv? sorrendben.
% U oszlopaiban vannak az egyes sajátértékekhez tartozó sajátvektorok.

% VY = UDUT alakban írható fel.
% Próbáljuk ki:

VYreconst = U * D * U'
% Ez hajszálra megegyezik a VY-nal.

% Mivel a D mátrix egyik sajátértéke (ti. a bal fels?) gyakorlatilag 0,
% ezért a V mátrix rangja 2.

% Így VY közelíthet? a maradékból is:

% El?ször dobjuk el a legkisebb sajátértéket és a hozzá tartozó
% sajátvektort:
Dred = D(2:end, 2:end);
Ured = U(:, 2:end);

VYred = Ured * Dred * Ured'

% Ez majdnem megegyezik VY-nal:
Vdiff = VY - VYred

% The end.