?? democca.m
字號:
function demoCCA()% % demonstration of CCA() %%disp('Running CCA demo...');N = 2000;[data.X data.tt] = swissroll(N);K = 8;d = 10;tol = 1e-3;disp('=====> running LLE <=======');[LLEY, LLEEigenvals, Neighbors] = lle(data.X, K,d, tol);[LLEY, LLEEigenvals] = cleanupLLE(LLEY, LLEEigenvals);% Make Nearest-neighbors a sparse graphsnn = spalloc(N,N, K*N);for idx=1:N snn(Neighbors(:,idx), idx) = 1;end% run CCAopts.method='CCA';[Z, CCAEigen, CCADetails]= cca(data.X, LLEY, snn, opts);opts2.method='MVU';[Z2, CCAEigen2, CCADetails2]= cca(data.X, LLEY, snn, opts2);% display resultsfigure;set(gcf, 'Name','Demo of CCA');set(gcf, 'Position', [77 110 952 632]);colormap(hsv);set(gcf, 'Color', [0 0 0]);subplot(2,3,1);scatter3(data.X(1,:), data.X(2,:), data.X(3,:), 40, data.tt, 'filled');view(15,15);set(gca, 'FontSize', 18);h=title('Original 3D data');set(h, 'Color', [1 1 1]); axis equal; axis off;subplot(2,3,2);scatter(LLEY(1,:), LLEY(2,:), 40, data.tt, 'filled');set(gca, 'FontSize', 18);h=title('2D Embedding by LLE');set(h, 'Color', [1 1 1]); axis equal; axis off;subplot(2,3,3);scatter(Z(1,:), Z(2,:), 40, data.tt, 'filled');set(gca, 'FontSize', 18);h=title('2D Embedding by CCA');set(h, 'Color', [1 1 1]); axis equal; axis off;subplot(2,3,4);scatter(Z2(1,:), Z2(2,:), 40, data.tt, 'filled');set(gca, 'FontSize', 18);h=title('2D Embedding by MVU');set(h, 'Color', [1 1 1]); axis equal; axis off;subplot(2,3,5);bar(LLEEigenvals);set(gca, 'FontSize', 18);h=title('Bottom eigenvalues by LLE');set(h, 'Color', [1 1 1]); set(gca, 'YTick', []); axis tight;set(gca, 'XColor', [1 1 1])subplot(2,3,6);bar(CCAEigen);set(gca, 'FontSize', 18);h=title('Top eigenvalues by CCA');set(h, 'Color', [1 1 1]); set(gca, 'YTick', []); axis tight;set(gca, 'XColor', [1 1 1])colormap(hsv);set(gcf, 'Color', [0 0 0]);return%%%% Auxiliary functionsfunction [a, b] = cleanupLLE(v, eigenvals)%%% sometimes, LLE() returns a near-constant eigenvector (even after removing%%% the bottom one)..this functions cleans it up furthera = v(find(eigenvals>0), :);b = eigenvals(eigenvals>0);if var(a(1,:))< 1e-5 % cannot be the correct eigenvector a = a(2:end,:); b = b(2:end);endreturn;%%%%%% Following codes are based on Sam Rowei's LLE codes:%%%%% http://www.cs.toronto.edu/~roweis/lle/function [X, tt] =swissroll(N)tt = (3*pi/2)*(1+2*rand(1,N)); height = 21*rand(1,N);X = [tt.*cos(tt); height; tt.*sin(tt)];return% LLE ALGORITHM%% function [Y,eigenvals,neighbors] = lle(X,K,d,tol)%% X = data as D x N matrix (D = dimensionality, N = #points)% K = number of neighbors% d = embedding dimensionality% tol = regularizer (defaults to 1e-4)% Y = embedding as d x N matrix%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [Y,eigenvals,neighbors, W] = lle(X,K,d,tol)% PAIRWISE DISTANCES[D,N] = size(X);X2 = sum(X.^2,1);distance = repmat(X2,N,1)+repmat(X2',1,N)-2*X'*X;% NEIGHBORS[sorted,index] = sort(distance);neighbors = index(2:(1+K),:);% RECONSTRUCTION WEIGHTSif (nargin<4), tol=1e-3; end;%if K < D % tol = 0;%endW = zeros(K,N);for i=1:N z = X(:,neighbors(:,i))-repmat(X(:,i),1,K); C = z'*z; C = C + tol*trace(C)*eye(K)/K; % REGULARIZATION invC = C\ones(K,1); % solve Cw=1 W(:,i) = invC/sum(invC);end;% COST MATRIX%M = eye(N);M = sparse(1:N,1:N,ones(1,N),N,N,4*K*N); for i=1:N w = W(:,i); j = neighbors(:,i); M(i,j) = M(i,j) - w'; M(j,i) = M(j,i) - w; M(j,j) = M(j,j) + w*w';end;% CALCULATION OF EMBEDDINGoptions.disp = 0;options.isreal = 1; options.issym = 1;[Y,eigenvals] = eigs(M,d+1,0,options);eigenvals = diag(eigenvals);[eigenvals,indx] = sort(eigenvals);eigenvals = eigenvals(1:d+1);Y = Y(:,indx(1:d+1))'*sqrt(N);return;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -