Rozpoznávanie obrazcov šk.r. 2015-16 PCA a LDA Doc. RNDr. Milan Ftáčnik, CSc.
Redukcia počtu príznakov Principal Component Analysis – PCA Independent Component Analysis – ICA Kernel PCA Linear Discriminant Analysis – LDA Rozpoznávanie obrazcov 2015-16
PCA otočí súradnicovú sústavu tak, aby prvá os bola v smere najväčšej variability a ďalšie boli na ňu kolmé v smeroch najväčšej zvyšnej variability Rozpoznávanie obrazcov 2015-16
PCA – motivačný príklad Rozpoznávanie obrazcov 2015-16
PCA – motivačný príklad II Pohyb pružiny sa dá opísať ako rovnica s premennou x Troma kamerami budeme zaznamenávať dvojrozmernú polohu červenej gule 2 min Pohľady kamier nie sú na seba kolmé Ako môžeme z týchto dát získať rovnicu závislú iba od x? Rozpoznávanie obrazcov 2015-16
PCA – motivačný príklad III Máme príliš veľa dimenzií problému, teda zbytočne viacrozmerné dáta A dáta sú ešte zaťažené šumom, lebo kamery ani pohyb pružiny nie sú dokonalé PCA má pomôcť inak vyjadriť zašumené a skomolené dáta a nájsť ten dôležitý smer dynamiky javu, ktorým je os x Rozpoznávanie obrazcov 2015-16
Dáta v motivačnom príklade 12 tisíc 6 rozmerných vektorov (za každú kameru dve súradnice) Vo všeobecnosti máme n záznamov m-rozmerných vektorov Každé meranie je vektor v m-rozmernom vektorovom priestore, ktorý má svoju bá-zu a vektor je jej lineárnou kombináciou Rozpoznávanie obrazcov 2015-16
Úloha pre PCA Existuje iná báza, ktorá je lineárnou kom-bináciou pôvodnej bázy, ktorá najlepšie vyjadruje dáta? Hľadáme lineárnu transformáciu P, ktorá zobrazuje pôvodné dáta X na lepšie vyjadrené dáta Y, tak že platí PX = Y Geometricky P je otočenie a natiahnutie Rozpoznávanie obrazcov 2015-16
Úloha pre PCA II Riadky matice P sú nové bázové vektory a nazývajú sa hlavné komponenty X Okrem linearity treba ďalšie predpoklady, aby sme „najlepšie“ vyjadrili X: chceme odstrániť šum a nadbytočnosť dát Ukážeme obrázok na šum a nadbytočnosť dát Rozpoznávanie obrazcov 2015-16
Šum a nadbytočnosť dát Rozpoznávanie obrazcov 2015-16
Ako riešiť šum a nadbytočnosť Šum budeme riešiť cez rozptyl (varianciu) jednotlivých dát a nadbytočnosť cez kovariančnú maticu vyjadrujúcu závislosť meraní navzájom Na diagonále matice máme rozptyl (varianciu) jednotlivých meraní Ak je na ostatných miestach kovariancia = 0, tak je táto dvojica meraní nekorelovaná Rozpoznávanie obrazcov 2015-16
Sumarizácia predpokladov Linearita – ako od nej upustíme, tak dostaneme inú metódu, kernel PCA Rozptyl dostatočne charakterizuje rozde-lenie pravdepodobnosti, to platí iba ak majú normálne (Gaussovské) rozdelenie Väčšie rozptyly majú väčšiu dynamiku – tie s menšími rozptylmi vyjadrujú šum Rozpoznávanie obrazcov 2015-16
Sumarizácia predpokladov II Hlavné komponenty sú na seba kolmé – preto sa dajú dobre počítať metódami lineárnej algebry Samotný výpočet PCA bol na prednáške, buď cez kovariančnú maticu, alebo cez SVD Ako sa dospeje k redukcii príznakov? Rozpoznávanie obrazcov 2015-16
PCA MATLAB [COEFF,SCORE] = princomp(X) [COEFF,SCORE,latent] = princomp(X), kde COEFF je usporiadaná matica hlavných komponentov, SCORE je vyjadrenie pôvodných dát v novej báze a latent obsahuje vlastné hodnoty kovariančnej matice ako ich príspevok ku variancii dát Rozpoznávanie obrazcov 2015-16
PCA MATLAB – príklad data=rand(10,1000); data=data-repmat(mean(data,2),1,size(data,2)); [W, EvalueMatrix] = eig(cov(data)); Evalues = diag(EvalueMatrix); Evalues = Evalues(end:-1:1); W = W(:,end:-1:1); W=W'; pc = W * data; figure, plot(pc(1,:),pc(2,:),'.')
PCA MATLAB – príklad II X = [2.5 2.4; 0.5 0.7; 2.2 2.9; 1.9 2.2; 3.1 3.0; 2.3 2.7; 2 1.6; 1 1.1; 1.5 1.6; 1.1 0.9]; figure, plot(X(:,1), X(:,2),'.'); [COEFF,SCORE,latent] = princomp(X) figure, plot(SCORE(:,1), SCORE(:,2),'r.'); Rozpoznávanie obrazcov 2015-16
PCA MATLAB – príklad III https://www.youtube.com/watch?v=oBhm2V_cGZk Tento príklad ukazuje, že PCA naozaj predstavuje otočenie súradnicových osí do takého smeru, ktorý predstavuje najväčšiu variabilitu dát a nezávisí od translácie dát Rozpoznávanie obrazcov 2015-16
Limity a rozšírenia PCA Je to neparametrická metóda, odpoveď je deterministická a nezávisí od používateľa, to je jej sila ale aj slabosť Pri upustení od linearity – dostaneme parametrickú metódu kernel PCA, kde používateľ vyberá jadro Rozpoznávanie obrazcov 2015-16
Limity a rozšírenia PCA II Ak upustíme od ortogonality osí a Gaussovského charakteru dát, tak môžeme riešiť situácie, kde PCA zlyhá a dostaneme metódu ICA – požadujeme štatistickú nezávislosť Rozpoznávanie obrazcov 2015-16
PCA vs. LDA Rozpoznávanie obrazcov 2015-16
PCA vs. LDA II PCA nepotrebuje informáciu o zaradení jednotlivých meraní do tried LDA ju potrebuje, pretože maximalizuje medzitriednu vzdialenosť a minimalizuje vnútrotriednu vzdialenosť Ak je C tried, tak LDA transformuje m-roz-merný priestor na C-1 -rozmerný Rozpoznávanie obrazcov 2015-16
LDA pre dve triedy Rozpoznávanie obrazcov 2015-16
LDA pre dve triedy - príklad Rozpoznávanie obrazcov 2015-16
LDA pre dve triedy – príklad II Rozpoznávanie obrazcov 2015-16
LDA pre dve triedy – príklad III Rozpoznávanie obrazcov 2015-16
LDA pre dve triedy – príklad IV Rozpoznávanie obrazcov 2015-16
LDA pre dve triedy – príklad V Rozpoznávanie obrazcov 2015-16
LDA pre C tried Rozpoznávanie obrazcov 2015-16
LDA pre C tried II Rozpoznávanie obrazcov 2015-16
Toolboxy Matlab Toolbox for Dimensionality Reduction http://homepage.tudelft.nl/19j49/Matlab_Toolbox_for_Dimensionality_Reduction.html Statistical Pattern Recognition Toolbox http://cmp.felk.cvut.cz/cmp/software/stprtool/
Matlab Toolbox for Dimensionality Reduction [X, labels] = generate_data('helix', 2000); figure, scatter3(X(:,1), X(:,2), X(:,3), 5, labels); title('Original dataset'), drawnow no_dims = round(intrinsic_dim(X, 'MLE')); disp(['MLE estimate of intrinsic dimensionality: ' num2str(no_dims)]); [mappedX, mapping] = compute_mapping(X, 'PCA', no_dims); figure, scatter(mappedX(:,1), mappedX(:,2), 5, labels); title('Result of PCA'); [mappedX, mapping] = compute_mapping(X, 'Laplacian', no_dims, 7); figure, scatter(mappedX(:,1), mappedX(:,2), 5, labels(mapping.conn_comp)); title('Result of Laplacian Eigenmaps'); drawnow
Statistical Pattern Recognition Toolbox % Generate data distrib.Mean = [[5;4] [4;5]]; % mean vectors distrib.Cov(:,:,1) = [1 0.9; 0.9 1]; % 1st covariance distrib.Cov(:,:,2) = [1 0.9; 0.9 1]; % 2nd covariance distrib.Prior = [0.5 0.5]; % Gaussian weights data = gmmsamp(distrib,250); % sample data lda_model = lda(data,1); % train LDA lda_rec = pcarec(data.X,lda_model); lda_data = linproj(data,lda_model); pca_model = pca(data.X,1); % train PCA pca_rec = pcarec(data.X,pca_model); pca_data = linproj( data,pca_model); figure; hold on; axis equal; % visualization ppatterns(data);
Statistical Pattern Recognition Toolbox h1 = plot(lda_rec(1,:),lda_rec(2,:),’r’); h2 = plot(pca_rec(1,:),pca_rec(2,:),’b’); legend([h1 h2],’LDA direction’,’PCA direction’); figure; hold on; subplot(2,1,1); title('LDA'); ppatterns(lda_data); pgauss(mlcgmm(lda_data)); subplot(2,1,2); title('PCA'); ppatterns(pca_data); pgauss(mlcgmm(pca_data));