当前位置:首页 > 数据的多流形结构分析 - 图文
end end
问题3(a)图主要程序:
load('C:\\Users\\jsw\\Downloads\\2015研究生试题\\2015赛题\\B\\0915版本\\数据\\第3题数据\\3a.mat')
>> data=data'; >> d=pdist(data); >> W=squareform(d); >> N=tril(W,0); >> s=sum(N); >> D=diag(s); >> L=D-N;
>> [Q,A]=eigs(L,2); >> [u re]=KMeans(Q,2); 问题3(b)图主要程序:
>> load('C:\\Users\\jsw\\Downloads\\2015研究生试题\\2015赛题\\B\\0915版本\\数据\\第3题数据\\3b.mat') >> >> X=data;
CMat = admmLasso_mat_func(X,true,100); C = CMat;
CKSym = BuildAdjacency(thrC(C,1)); grps = SpectralClustering(CKSym,2); 问题3(c)图主要程序:
>> load('C:\\Users\\jsw\\Downloads\\2015研究生试题\\2015赛题\\B\\0915版本\\数据\\第3题数据\\3c.mat') X=data;
CMat = admmLasso_mat_func(X,false,20); C = CMat;
CKSym = BuildAdjacency(thrC(C,1)); grps = SpectralClustering(CKSym,2); 问题4(a)图主要程序:
>> load('C:\\Users\\jsw\\Downloads\\2015研究生试题\\2015赛题\\B\\0915版本\\数据\\第4题数据\\4a.mat') if (nargin < 2)
% default subspaces are linear affine = false; end
if (nargin < 3)
% default regularizarion parameters alpha = 800; end
if (nargin < 4)
% default coefficient error threshold to stop ADMM % default linear system error threshold to stop ADMM
24
thr = 2*10^-4; end
if (nargin < 5)
% default maximum number of iterations of ADMM maxIter = 200; end
if (length(alpha) == 1) alpha1 = alpha(1); alpha2 = alpha(1); elseif (length(alpha) == 2) alpha1 = alpha(1); alpha2 = alpha(2); end
if (length(thr) == 1) thr1 = thr(1); 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) - sign(Z+Lambda2/mu2);
25
1/mu2*ones(N))) .*
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);
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
26
*
.*
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'); 问题4(b)图主要程序:
>> load('C:\\Users\\jsw\\Downloads\\2015研究生试题\\2015赛题\\B\\0915版本\\数据\\第4题数据\\4b.mat') if (nargin < 2)
% default subspaces are linear affine = false; end
if (nargin < 3)
% default regularizarion parameters alpha = 800; end
if (nargin < 4)
% default coefficient error threshold to stop ADMM % default linear system error threshold to stop ADMM thr = 2*10^-4; end
if (nargin < 5)
% default maximum number of iterations of ADMM maxIter = 200; end
if (length(alpha) == 1) alpha1 = alpha(1); alpha2 = alpha(1); elseif (length(alpha) == 2) alpha1 = alpha(1); alpha2 = alpha(2); end
if (length(thr) == 1) thr1 = thr(1);
27
共分享92篇相关文档