From: <car...@us...> - 2012-04-24 16:21:02
|
Revision: 10323 http://octave.svn.sourceforge.net/octave/?rev=10323&view=rev Author: carandraug Date: 2012-04-24 16:20:55 +0000 (Tue, 24 Apr 2012) Log Message: ----------- kmeans: small changes of style and avoid duplication of variables Modified Paths: -------------- trunk/octave-forge/main/statistics/inst/kmeans.m Modified: trunk/octave-forge/main/statistics/inst/kmeans.m =================================================================== --- trunk/octave-forge/main/statistics/inst/kmeans.m 2012-04-24 16:06:07 UTC (rev 10322) +++ trunk/octave-forge/main/statistics/inst/kmeans.m 2012-04-24 16:20:55 UTC (rev 10323) @@ -15,18 +15,18 @@ ## this program; if not, see <http://www.gnu.org/licenses/>. function [classes, centers, sumd, D] = kmeans (data, k, varargin) - [reg, prop] = parseparams(varargin); - - #defaults for options - emptyaction = 'error'; - start = "sample"; - + [reg, prop] = parseparams (varargin); + + ## defaults for options + emptyaction = "error"; + start = "sample"; + #used for getting the number of samples - [N, D] = size (data); + nRows = rows (data); + + ## used to hold the distances from each sample to each class + D = zeros (nRows, k); - #used to hold the distances from each sample to each class - D = zeros (N, k); - #used for convergence of the centroids err = 1; @@ -34,40 +34,37 @@ sumd = Inf; ## Input checking, validate the matrix and k - if (!ismatrix (data) || !isreal (data)) + if (!isnumeric (data) || !ismatrix (data) || !isreal (data)) error ("kmeans: first input argument must be a DxN real data matrix"); - endif - if (!isscalar (k)) + elseif (!isscalar (k)) error ("kmeans: second input argument must be a scalar"); endif - if(length(varargin) > 0) + if (length (varargin) > 0) ## check for the 'emptyaction' property - found = find(strcmpi(prop,'emptyaction') == 1); - switch(lower(prop{found+1})) - case 'singleton' - emptyaction = 'singleton'; + found = find (strcmpi (prop, "emptyaction") == 1); + switch (lower (prop{found+1})) + case "singleton" + emptyaction = "singleton"; otherwise error ("kmeans: unsupported empty cluster action parameter"); endswitch endif ## check for the 'start' property - #found = find(strcmpi(prop,'start') == 1); - switch (lower(start)) + switch (lower (start)) case "sample" - idx = randperm (N) (1:k); + idx = randperm (nRows) (1:k); centers = data (idx, :); otherwise error ("kmeans: unsupported initial clustering parameter"); endswitch - ## Run the algorithm while err > .001 ## Compute distances for i = 1:k - D (:, i) = sumsq(data - repmat(centers(i, :), N, 1), 2); + D (:, i) = sumsq (data - repmat (centers(i, :), nRows, 1), 2); endfor ## Classify @@ -75,55 +72,44 @@ ## Calcualte new centroids for i = 1:k - ## Check for empty clusters - if sum(classes==i)==0 || length(mean(data(classes == i, :))) == 0 + if (sum (classe s== i) ==0 || length (mean (data(classes == i, :))) == 0) - switch(emptyaction) + switch emptyaction ## if 'singleton', then find the point that is the ## farthest and add it to the empty cluster - case 'singleton' - classes(maxCostSampleIndex(data,centers(i,:))) = i; - - ## if 'error' then throw the error - otherwise - error ("kmeans: empty cluster created"); + case 'singleton' + classes(maxCostSampleIndex (data, centers(i,:))) = i; + ## if 'error' then throw the error + otherwise + error ("kmeans: empty cluster created"); endswitch + endif ## end check for empty clusters - endif ## end check for empty clusters - ## update the centroids - centers (i, :) = mean (data (classes == i, :)); - + centers(i, :) = mean (data(classes == i, :)); endfor - + ## calculate the differnece in the sum of distances - err = sumd - objCost(data,classes,centers); + err = sumd - objCost (data, classes, centers); ## update the current sum of distances - sumd = objCost(data,classes,centers); - endwhile + sumd = objCost (data, classes, centers); + endwhile endfunction ## calculate the sum of distances -function obj = objCost(data,classes,centers) - [N D] = size(data); - sum = 0; - - for i=1:N - sum = sum + sumsq(data(i,:)-centers(classes(i),:)); +function obj = objCost (data, classes, centers) + obj = 0; + for i=1:rows (data) + obj = obj + sumsq (data(i,:) - centers(classes(i),:)); endfor - - obj = sum; endfunction -function index = maxCostSampleIndex(data,centers) - [n m] = size(data); +function index = maxCostSampleIndex (data, centers) cost = 0; - index = 1; - for j = 1:n - if cost < sumsq(data(j,:) - centers) - cost = sumsq(data(j,:) - centers); - index = j; + for index = 1:rows (data) + if cost < sumsq (data(index,:) - centers) + cost = sumsq (data(index,:) - centers); endif endfor endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <car...@us...> - 2012-04-24 16:26:18
|
Revision: 10324 http://octave.svn.sourceforge.net/octave/?rev=10324&view=rev Author: carandraug Date: 2012-04-24 16:26:11 +0000 (Tue, 24 Apr 2012) Log Message: ----------- kmeans: added initial documentation block Modified Paths: -------------- trunk/octave-forge/main/statistics/inst/kmeans.m Modified: trunk/octave-forge/main/statistics/inst/kmeans.m =================================================================== --- trunk/octave-forge/main/statistics/inst/kmeans.m 2012-04-24 16:20:55 UTC (rev 10323) +++ trunk/octave-forge/main/statistics/inst/kmeans.m 2012-04-24 16:26:11 UTC (rev 10324) @@ -14,6 +14,13 @@ ## You should have received a copy of the GNU General Public License along with ## this program; if not, see <http://www.gnu.org/licenses/>. +## -*- texinfo -*- +## @deftypefn {Function File} {[@var{idx}, @var{centers}] =} kmeans (@var{data}, @var{k}, @var{param1}, @var{value1, @dots{}) +## K-means clustering. +## +## @seealso{linkage} +## @end deftypefn + function [classes, centers, sumd, D] = kmeans (data, k, varargin) [reg, prop] = parseparams (varargin); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <as...@us...> - 2012-05-01 16:58:07
|
Revision: 10348 http://octave.svn.sourceforge.net/octave/?rev=10348&view=rev Author: asnelt Date: 2012-05-01 16:58:01 +0000 (Tue, 01 May 2012) Log Message: ----------- Fix typo. Modified Paths: -------------- trunk/octave-forge/main/statistics/inst/kmeans.m Modified: trunk/octave-forge/main/statistics/inst/kmeans.m =================================================================== --- trunk/octave-forge/main/statistics/inst/kmeans.m 2012-05-01 16:44:39 UTC (rev 10347) +++ trunk/octave-forge/main/statistics/inst/kmeans.m 2012-05-01 16:58:01 UTC (rev 10348) @@ -80,7 +80,7 @@ ## Calcualte new centroids for i = 1:k ## Check for empty clusters - if (sum (classe s== i) ==0 || length (mean (data(classes == i, :))) == 0) + if (sum (classes == i) ==0 || length (mean (data(classes == i, :))) == 0) switch emptyaction ## if 'singleton', then find the point that is the This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <as...@us...> - 2012-05-01 17:16:16
|
Revision: 10349 http://octave.svn.sourceforge.net/octave/?rev=10349&view=rev Author: asnelt Date: 2012-05-01 17:16:10 +0000 (Tue, 01 May 2012) Log Message: ----------- Fixed a texinfo typo. Modified Paths: -------------- trunk/octave-forge/main/statistics/inst/kmeans.m Modified: trunk/octave-forge/main/statistics/inst/kmeans.m =================================================================== --- trunk/octave-forge/main/statistics/inst/kmeans.m 2012-05-01 16:58:01 UTC (rev 10348) +++ trunk/octave-forge/main/statistics/inst/kmeans.m 2012-05-01 17:16:10 UTC (rev 10349) @@ -15,7 +15,7 @@ ## this program; if not, see <http://www.gnu.org/licenses/>. ## -*- texinfo -*- -## @deftypefn {Function File} {[@var{idx}, @var{centers}] =} kmeans (@var{data}, @var{k}, @var{param1}, @var{value1, @dots{}) +## @deftypefn {Function File} {[@var{idx}, @var{centers}] =} kmeans (@var{data}, @var{k}, @var{param1}, @var{value1}, @dots{}) ## K-means clustering. ## ## @seealso{linkage} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |