Sabtu, 17 Agustus 2013

Simplified Matlab Code of Truncated Power Method for PCA-Part for K-Means Initialization

function [V D] = tpower(A)
%Input: A (vector ora matrice of the data)
%output: Maximum eigenvalue and eigenvector
%Source:
%Yuan, X.T., Zhang T., 2013. Truncated Power Method for Sparse Eigenvalue Problems. Journal of Machine Learning Research, 14.pp. 899-925
optTol = 1e-6;
maxIter = 100;
cardinality = max(size(A));

[~,idx]=max(diag(A));
x0 = zeros(size(A,1),1);
x0(idx) = 1;

V = sparse(x0);
s = A*V;
g = 2*s;
D = V'*s;
V = truncate_operator(g, cardinality);
D_old = D;

i = 1;
while i <= maxIter

s = A*V;
g = 2*s;
V = truncate_operator(g, cardinality);
D = V'*s;

if ( abs(D - D_old) < optTol )
break;
end

D_old = D;
i = i+1;
end
V=V/(max(V));
end

function u = truncate_operator(v , k)

u = zeros(length(v), 1);
[~, idx] = sort(abs(v), 'descend');

v_restrict = v(idx(1:k));
u(idx(1:k)) = v_restrict / norm(v_restrict);

u = sparse(u);
end

Tidak ada komentar:

Posting Komentar

bermanfaat? mohon tinggalkan jejak..