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
相关推荐: