Home > demo3 > anchors.m

anchors

PURPOSE ^

choose k centers by the furthest-first method

SYNOPSIS ^

function [centers, mincenter, mindist, lower, computed] = anchors(firstcenter,k,data)

DESCRIPTION ^

 choose k centers by the furthest-first method
 (C) Charles Elkan

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [centers, mincenter, mindist, lower, computed] = anchors(firstcenter,k,data)
0002 % choose k centers by the furthest-first method
0003 % (C) Charles Elkan
0004 
0005 [n,dim] = size(data);
0006 centers = zeros(k,dim);
0007 lower = zeros(n,k);
0008 mindist = Inf*ones(n,1);
0009 mincenter = ones(n,1);
0010 computed = 0;
0011 centdist = zeros(k,k);
0012 
0013 for j = 1:k
0014     if j == 1
0015         newcenter = firstcenter;
0016     else
0017         [maxradius,i] = max(mindist);
0018         newcenter = data(i,:);
0019     end
0020 
0021     centers(j,:) = newcenter;
0022     centdist(1:j-1,j) = calcdist(centers(1:j-1,:),newcenter);
0023     centdist(j,1:j-1) = centdist(1:j-1,j)';
0024     computed = computed + j-1;
0025     
0026     inplay = find(mindist > centdist(mincenter,j)/2);
0027     newdist = calcdist(data(inplay,:),newcenter);
0028     computed = computed + size(inplay,1);
0029     lower(inplay,j) = newdist;
0030         
0031 %    other = find(mindist <= centdist(mincenter,j)/2);
0032 %    if ~isempty(other)
0033 %        lower(other,j) = centdist(mincenter(other),j) - mindist(other);
0034 %    end
0035         
0036     move = find(newdist < mindist(inplay));
0037     shift = inplay(move);
0038     mincenter(shift) = j;
0039     mindist(shift) = newdist(move);
0040 end
0041 
0042 %udist = calcdist(data,centers(mincenter,:));
0043 %quality = mean(udist);
0044 %q2 = mean(udist.^2);
0045 %[k toc quality q2 computed]
0046 %toc

Generated on Sat 22-Aug-2009 22:15:36 by m2html © 2003