function [f,d] = dualkmeans(K,N) %function [f,d] = dualkmeans(K,N) % % Performs dual K-means for ell samples specified by the kernel K % %INPUTS % K = the kernel matrix % N = the number of clusters desired % %OUTPUTS % f = the cluster allocation vector % d = the distances of the samples to their respective cluster centroids % % %For more info, see www.kernel-methods.net % original kernel matrix stored in variable K % clustering given by a ell x N binary matrix A % and cluster allocation function f % d gives the distances to cluster centroids ell=size(K,1); A = zeros(ell,N); f = ceil(rand(ell,1)* N); for i=1:ell A(i,f(i)) = 1; end change = 1; while change == 1 change = 0; E = A * diag(1./sum(A)); Z = ones(ell,1)* diag(E'*K*E)'- 2*K*E; [d, ff] = min(Z, [], 2); for i=1:ell if f(i) ~= ff(i) A(i,ff(i)) = 1; A(i, f(i)) = 0; change = 1; end end f = ff; end