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

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

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