diff toolboxes/MIRtoolbox1.3.2/somtoolbox/som_quality.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_quality.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,156 @@
+function [mqe,tge] = som_quality(sMap, D)
+
+%SOM_QUALITY Calculate the mean quantization and topographic error.
+%
+% [qe,te] = som_quality(sMap, D)
+%
+%  qe = som_quality(sMap,D);
+%  [qe,te] = som_quality(sMap,sD);
+%
+%  Input and output arguments: 
+%   sMap     (struct) a map struct
+%   D                 the data
+%            (struct) a data struct
+%            (matrix) a data matrix, size dlen x dim
+%
+%   qe       (scalar) mean quantization error
+%   te       (scalar) topographic error
+%
+% The issue of SOM quality is a complicated one. Typically two
+% evaluation criterias are used: resolution and topology preservation.
+% If the dimension of the data set is higher than the dimension of the 
+% map grid, these usually become contradictory goals. 
+%
+% The first value returned by this function measures resolution and the
+% second the topology preservation.
+%  qe : Average distance between each data vector and its BMU.
+%  te : Topographic error, the proportion of all data vectors
+%       for which first and second BMUs are not adjacent units.
+%
+% NOTE: when calculating BMUs of data vectors, the mask of the given 
+%       map is used.
+%
+% For more help, try 'type som_quality' or check out the online documentation.
+% See also SOM_BMUS.
+
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% som_quality
+%
+% PURPOSE
+%
+% Calculates two quality measures for the given map.
+%
+% SYNTAX
+%
+%  qe = som_quality(sM,sD);
+%  qe = som_quality(sM,D);
+%  [qe,te] = som_quality(...);
+%
+% DESCRIPTION
+%
+% This function measures the quality of the given map. The measures are
+% data-dependent: they measure the map in terms of the given
+% data. Typically, the quality of the map is measured in terms of the
+% training data. The returned quality measures are average quantization
+% error and topographic error.
+%
+% The issue of SOM quality is a complicated one. Typically two evaluation
+% criterias are used: resolution and topology preservation. There are
+% many ways to measure them. The ones implemented here were chosen for
+% their simplicity.
+%
+%  qe : Average distance between each data vector and its BMU.
+%       Measures map resolution.
+%  te : Topographic error, the proportion of all data vectors
+%       for which first and second BMUs are not adjacent units.
+%       Measures topology preservation.
+%
+% NOTE: when calculating BMUs of data vectors, the mask of the given 
+%       map is used. The mask affects the quantization errors, too.
+%       If you want the quantization errors without the weighting given
+%       by the mask, you can use the following code: 
+%         bmus = som_bmus(sMap,D); % this uses the mask in finding the BMUs
+%         for i=1:length(bmus), 
+%           dx = sMap.codebook(bmus(i),:)-D(i,:); % m - x
+%           dx(isnan(dx)) = 0;                    % remove NaNs 
+%           qerr(i) = sqrt(sum(dx.^2));           % euclidian distance
+%         end
+%         qe = mean(qerr); % average quantization error
+%
+% Please note that you should _not_ trust the measures blindly. Generally,
+% both measures give the best results when the map has overfitted the
+% data. This may happen when the number of map units is as large or larger
+% than the number of training samples. Beware when you have such a case.
+%
+% REFERENCES
+%
+% Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, 
+%    Berlin, 1995, pp. 113.
+% Kiviluoto, K., "Topology Preservation in Self-Organizing Maps", 
+%    in the proceeding of International Conference on Neural
+%    Networks (ICNN), 1996, pp. 294-299.
+%
+% INPUT ARGUMENTS
+%
+%  sMap    (struct) Map struct.
+%  D                The data to be used.
+%          (matrix) A data matrix, size dlen x dim.
+%          (struct) A data struct.
+%
+% OUTPUT ARGUMENTS
+% 
+%  qe      (scalar) mean quantization error
+%  te      (scalar) topographic error
+%
+% EXAMPLES
+%
+%  qe = som_quality(sMap,D);
+%  [qe,te] = som_quality(sMap,sD);
+%
+% SEE ALSO
+% 
+%  som_bmus         Find BMUs for the given set of data vectors.
+
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 1.0beta juuso 220997
+% Version 2.0beta juuso 151199
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+% input arguments
+if nargin < 2, error('Not enough input arguments.'); end
+
+% data
+if isstruct(D), D = D.data; end
+[dlen dim] = size(D);
+
+% calculate topographic error, too?
+if nargout==1, b=1; else b=[1:2]; end
+[bmus qerrs]= som_bmus(sMap,D,b);
+inds = find(~isnan(bmus(:,1)));
+bmus = bmus(inds,:);
+qerrs = qerrs(inds,:);
+l = length(inds);
+if ~l, error('Empty data set.'); end
+
+% mean quantization error
+mqe = mean(qerrs(:,1));
+
+if length(b)==2, % topographic error
+  Ne = full(som_unit_neighs(sMap.topol));
+  tge = 0;
+  for i=1:l, tge = tge+(Ne(bmus(i,1),bmus(i,2)) ~= 1); end
+  tge = tge / l;
+else
+  tge = NaN;
+end
+
+return;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+