wolffd@0: function [pc_vec]=pca_kpm(features,N, method); wolffd@0: % PCA_KPM Compute top N principal components using eigs or svd. wolffd@0: % [pc_vec]=pca_kpm(features,N) wolffd@0: % wolffd@0: % features(:,i) is the i'th example - each COLUMN is an observation wolffd@0: % pc_vec(:,j) is the j'th basis function onto which you should project the data wolffd@0: % using pc_vec' * features wolffd@0: wolffd@0: [d ncases] = size(features); wolffd@0: fm=features-repmat(mean(features,2), 1, ncases); wolffd@0: wolffd@0: wolffd@0: if method==1 % d*d < d*ncases wolffd@0: fprintf('pca_kpm eigs\n'); wolffd@0: options.disp = 0; wolffd@0: C = cov(fm'); % d x d matrix wolffd@0: [pc_vec, evals] = eigs(C, N, 'LM', options); wolffd@0: else wolffd@0: % [U,D,V] = SVD(fm), U(:,i)=evec of fm fm', V(:,i) = evec of fm' fm wolffd@0: fprintf('pca_kpm svds\n'); wolffd@0: [U,D,V] = svds(fm', N); wolffd@0: pc_vec = V; wolffd@0: end wolffd@0: wolffd@0: if 0 wolffd@0: X = randn(5,3); wolffd@0: X = X-repmat(mean(X),5,1); wolffd@0: C = X'*X; wolffd@0: C2=cov(X) wolffd@0: [U,D,V]=svd(X); wolffd@0: [V2,D2]=eig(X) wolffd@0: end