diff toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dmatclusters.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/som_dmatclusters.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,61 @@
+function [base,seed] = som_dmatclusters(sM,linkage,neigh,ignore)
+
+% SOM_DMATCLUSTERS Cluster map based on neighbor distance matrix.
+%
+% base = som_dmatclusters(sM,linkage,neigh,ignore)
+%
+% sM        (struct) map or data struct
+%           (matrix) data matrix, size n x dim
+% [linkage] (string) 'closest', 'single', 'average', 'complete', 
+%                    'centroid', 'ward', and 'neighf' (last for SOM only)
+%                    default is 'centroid'
+% [neigh]   (string) 'kNN' or 'Nk' (which is valid for a SOM only)
+%                    for example '6NN' or 'N1'
+%                    default is '10NN' for a data set and 'N1' for SOM
+%           (matrix) 0/1 matrix of size size n x n, 1=connection exists
+% [ignore]  (vector) indeces of vectors to be ignored in the spreading
+%                    phase, empty vector by default
+%
+% base      (vector) size n x 1, cluster indeces (1...c)
+% seed      (vector) size c x 1, indeces of seed units for the clusters
+%
+% See also  SOM_NEIGHBORS, KMEANS_CLUSTERS, SOM_DMATMINIMA.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% input arguments
+
+if nargin<2 | isempty(linkage), linkage = 'centroid'; end
+
+if nargin<3 | isempty(neigh),
+  if isstruct(sM) & strcmp(sM.type,'som_map'),
+    neigh = 'N1';
+  else
+    neigh = '10NN';
+  end
+end
+
+if nargin<4, ignore = []; end
+n = size(sM.codebook,1);
+
+% neighborhoods
+if ischar(neigh),
+  Ne = som_neighbors(sM,neigh);
+else
+  Ne = neigh;
+end
+
+% find seed points
+seed = som_dmatminima(sM,[],Ne);
+
+% make partition
+base = zeros(n,1);
+base(seed) = 1:length(seed);
+if any(ignore), base(ignore) = NaN; end
+base = som_clspread(sM,base,linkage,Ne,0);
+
+% assign the ignored units, too
+base(isnan(base)) = 0;
+if any(base==0), base = som_clspread(sM,base,linkage,Ne,0); end
+
+return;
+