数据的多流形结构分析 - 图文 联系客服

发布时间 : 星期三 文章数据的多流形结构分析 - 图文更新完毕开始阅读bea57c7fa58da0116d174935

thr2 = thr(1);

elseif (length(thr) == 2) thr1 = thr(1); thr2 = thr(2); end

N = size(Y,2);

% setting penalty parameters for the ADMM mu1 = alpha1 * 1/computeLambda_mat(Y); mu2 = alpha2 * 1;

if (~affine)

% initialization

A = inv(mu1*(Y'*Y)+mu2*eye(N)); C1 = zeros(N,N);

Lambda2 = zeros(N,N);

err1 = 10*thr1; err2 = 10*thr2; i = 1;

% ADMM iterations

while ( err1(i) > thr1 && i < maxIter ) % updating Z

Z = A * (mu1*(Y'*Y)+mu2*(C1-Lambda2/mu2)); Z = Z - diag(diag(Z)); % updating C C2 = max(0,(abs(Z+Lambda2/mu2) - 1/mu2*ones(N))) sign(Z+Lambda2/mu2);

C2 = C2 - diag(diag(C2));

% updating Lagrange multipliers

Lambda2 = Lambda2 + mu2 * (Z - C2); % computing errors

err1(i+1) = errorCoef(Z,C2); err2(i+1) = errorLinSys(Y,Z); %

C1 = C2; i = i + 1; end

fprintf('err1: %2.4f, err2: %2.4f, iter: %3.0f \\n',err1(end),err2(end),i); else

% initialization

A = inv(mu1*(Y'*Y)+mu2*eye(N)+mu2*ones(N,N)); C1 = zeros(N,N);

Lambda2 = zeros(N,N); lambda3 = zeros(1,N);

28

.*

err1 = 10*thr1; err2 = 10*thr2; err3 = 10*thr1; i = 1;

% ADMM iterations

while ( (err1(i) > thr1 || err3(i) > thr1) && i < maxIter ) % updating Z Z = A * (mu1*(Y'*Y)+mu2*(C1-Lambda2/mu2)+mu2*ones(N,1)*(ones(1,N)-lambda3/mu2)); Z = Z - diag(diag(Z)); % updating C C2 = max(0,(abs(Z+Lambda2/mu2) - 1/mu2*ones(N))) .* sign(Z+Lambda2/mu2);

C2 = C2 - diag(diag(C2));

% updating Lagrange multipliers

Lambda2 = Lambda2 + mu2 * (Z - C2);

lambda3 = lambda3 + mu2 * (ones(1,N)*Z - ones(1,N)); % computing errors

err1(i+1) = errorCoef(Z,C2); err2(i+1) = errorLinSys(Y,Z);

err3(i+1) = errorCoef(ones(1,N)*Z,ones(1,N)); %

C1 = C2; i = i + 1; end end

warning off;

N = size(CKSym,1);

MAXiter = 1000; % Maximum number of iterations for KMeans REPlic = 20; % Number of replications for KMeans

% Normalized spectral clustering according to Ng & Jordan & Weiss % using Normalized Symmetric Laplacian L = I - D^{-1/2} W D^{-1/2}

DN = diag( 1./sqrt(sum(CKSym)+eps) ); LapN = speye(N) - DN * CKSym * DN; [uN,sN,vN] = svd(LapN); kerN = vN(:,N-n+1:N); for i = 1:N

kerNS(i,:) = kerN(i,:) ./ norm(kerN(i,:)+eps); end

groups = kmeans(kerNS,n,'maxiter',MAXiter,'replicates',REPlic,'EmptyAction','singleton');

29