1 % Copyright (C) 2008 VZLU Prague, a.s., Czech Republic
3 % Author: Jaroslav Hajek <highegg@gmail.com>
5 % This file is part of OctGPR.
7 % OctGPR is free software; you can redistribute it and/or modify
8 % it under the terms of the GNU General Public License as published by
9 % the Free Software Foundation; either version 3 of the License, or
10 % (at your option) any later version.
12 % This program is distributed in the hope that it will be useful,
13 % but WITHOUT ANY WARRANTY; without even the implied warranty of
14 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 % GNU General Public License for more details.
17 % You should have received a copy of the GNU General Public License
18 % along with this software; see the file COPYING. If not, see
19 % <http://www.gnu.org/licenses/>.
23 % @deftypefn {Function File} {[U, ur, iu]} = rbf_centers (@var{X}, @var{nu}, @var{theta})
24 % Selects a given number of RBF centers based on Lloyd's clustering algorithm.
27 function [U, ur, iu] = rbf_centers (X, nu, theta)
35 % the D^2 weighting initialization
42 jj = sum (rand() * cp(end) < cp);
46 D = min (D, pdist2_mw(X, U, 'ssq')');
51 % now perform the k-means algorithm
54 D = pdist2_mw (U, X, 'ssq');
60 U(:,i) = accumarray (j.', X(:,i), [nu, 1]);
62 N = accumarray (j.', ones (1, length (j)), [nu, 1]);
64 i = find (all (U == 0, 2));
65 U(i,:) = X(ceil (rand (1, length (i)) * rows (X)), :);
67 D = pdist2_mw (U, X, 'ssq');
69 fprintf (stderr, "k-means iteration %d\r", ++it);
71 fprintf (stderr, "\n");
81 ur(i) = sqrt (max (D(i,ij)));
86 U = dmult (U, 1./theta);