⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 som_supervised.m

📁 最新的SOM神经网络的工具箱,希望对朋友们有用!
💻 M
字号:
function sM  = som_supervised(sData,varargin)%SOM_SUPERVISED SOM training which utilizes class information.%% sM = som_supervised(sData, [ArgID, value,...]))%%  Input and output arguments ([]'s are optional)%   sData    (struct) data struct, the class information is %                     taken from the first column of .labels field%   [argID,  (string) See below. These are given as %    value]  (varies) 'argID', value -pairs.%%   sMap     (struct) map struct%%  Here are the argument IDs and corresponding values: %  'munits'     (scalar) the preferred number of map units%  'msize'      (vector) map grid size%  'mask'       (vector) BMU search mask, size dim x 1%  'name'       (string) map name%  'comp_names' (string array / cellstr) component names, size dim x 1%  'tracking'   (scalar) how much to report, default = 1%  The following values are unambiguous and can therefore%  be given without the preceeding argument ID:%  'algorithm'  (string) training algorithm: 'seq' or 'batch'%  'mapsize'    (string) do you want a 'small', 'normal' or 'big' map%               Any explicit settings of munits or msize override this.%  'topol'      (struct) topology struct%  'som_topol','sTopol' = 'topol'%  'lattice'    (string) map lattice, 'hexa' or 'rect'%  'shape'      (string) map shape, 'sheet', 'cyl' or 'toroid'%  'neigh'      (string) neighborhood function, 'gaussian', 'cutgauss',%                       'ep' or 'bubble'%% For more help, try 'type som_supervised', or check out online documentation.% See also SOM_MAKE, SOM_AUTOLABEL.%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% som_supervised%% PURPOSE%% Creates, initializes and trains a supervised SOM by taking the % class-identity into account.%% SYNTAX%% sMap = som_supervised(sData);% sMap = som_supervised(...,'argID',value,...)% sMap = som_make(...,value,...);%% DESCRIPTION%% Creates, initializes and trains a supervised SOM. It constructs the% training data by adding 1-of-N -coded matrix to the original data% based on the class information in the .labels field. The dimension% of vectors after the process is (the old dimension + number of% different classes). In each vector, one of the new components has% value '1' (this depends on the class of the vector), and others '0'.% Calls SOM_MAKE to construct the map. Then the class of each map unit% is determined by taking maximum over these added components, and a% label is give accordingly. Finally, the extra components (the% 1-of-N -coded ones) are removed.%% REFERENCES%% Kohonen, T., "Self-Organizing Map", 2nd ed., Springer-Verlag, %    Berlin, 1995, pp. 160-161.% Kohonen, T., M鋕ivasara, K., Saram鋕i, T., "Phonetic Maps - %    Insightful Representation of Phonological Features For %    Speech Recognition", In proceedings of International%    Conference on Pattern Recognition (ICPR), Montreal, Canada, %    1984, pp. 182-185.%% REQUIRED INPUT ARGUMENTS%% sData           The data to use in the training.%        (struct) A data struct. '.comp_names' as well as '.name' %                 is copied to the map. The class information is %                 taken from the first column of '.labels' field.%% OPTIONAL INPUT ARGUMENTS %%  argID (string) Argument identifier string (see below).%  value (varies) Value for the argument (see below).%%  The optional arguments can be given as 'argID',value -pairs. If an%  argument is given value multiple times, the last one is used. %  Here are the argument IDs and corresponding values: %   'munits'     (scalar) the preferred number of map units - this may %                 change a bit, depending on the properties of the data%   'msize'      (vector) map grid size%   'mask'       (vector) BMU search mask, size dim x 1%   'name'       (string) map name%   'comp_names' (string array / cellstr) component names, size dim x 1%   'tracking'   (scalar) how much to report, default = 1. This parameter %                 is also passed to the training functions. %   The following values are unambiguous and can therefore%   be given without the preceeding argument ID:%   'algorithm'  (string) training algorithm: 'seq' or 'batch' (default)%   'mapsize'    (string) do you want a 'small', 'normal' or 'big' map%                 Any explicit settings of munits or msize (or topol) %                 override this.%   'topol'      (struct) topology struct%   'som_topol','sTopol' = 'topol'%   'lattice'    (string) map lattice, 'hexa' or 'rect'%   'shape'      (string) map shape, 'sheet', 'cyl' or 'toroid'%   'neigh'      (string) neighborhood function, 'gaussian', 'cutgauss',%                 'ep' or 'bubble'%% OUTPUT ARGUMENTS% %  sMap (struct)  SOM -map struct%% EXAMPLES%%  To simply train a map with default parameters:%%   sMap = som_supervised(sData);%%  With the optional arguments, the initialization and training can be%  influenced. To change map size, use 'msize', 'munits' or 'mapsize'%  arguments:  %%   sMap = som_supervised(D,'mapsize','big'); or %   sMap = som_supervised(D,'big');%   sMap = som_supervised(D,'munits', 100);%   sMap = som_supervised(D,'msize', [20 10]); %%  Argument 'algorithm' can be used to switch between 'seq' and 'batch'%  algorithms. 'batch' is the default, so to use 'seq' algorithm: %%   sMap = som_supervised(D,'algorithm','seq'); or %   sMap = som_supervised(D,'seq'); %%  The 'tracking' argument can be used to control the amout of reporting%  during training. The argument is used in this function, and it is%  passed to the training functions. To make the function work silently%  set it to 0.%%   sMap = som_supervised(D,'tracking',0); %% SEE ALSO% %  som_make         Create, initialize and train Self-Organizing map.%  som_autolabel    Label SOM/data set based on another SOM/data set.% Contributed to SOM Toolbox vs2, Feb 2nd, 2000 by Juha Parhankangas% Copyright (c) by Juha Parhankangas% http://www.cis.hut.fi/projects/somtoolbox/% Juha Parhankangas 050100%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%D0 = sData.data;[c,n,classlabels] = class2num(sData.labels(:,1));%%%%%%%% Checking arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if ~isstruct(sData)  error('Argument ''sData'' must be a ''som_data'' -struct.');else  data_name = sData.name;  comp_names = sData.comp_names;  comp_norm = sData.comp_norm;end[dlen,dim] = size(sData.data);% defaultsmapsize = '';sM = som_map_struct(dim+n); sTopol = sM.topol;munits = prod(sTopol.msize); % should be zeromask = sM.mask; name = sM.name; neigh = sM.neigh; tracking = 1;algorithm = 'batch'; %%%% changes to defaults (checking varargin) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%i=1; while i <= length(varargin)   argok = 1;   if ischar(varargin{i})     switch varargin{i},       % argument IDs     case 'mask',             i=i+1;       mask = varargin{i};      case 'munits',           i=i+1;       munits = varargin{i};      case 'msize',            i=i+1;       sTopol.msize = varargin{i};       munits = prod(sTopol.msize);      case 'mapsize',          i=i+1;       mapsize = varargin{i};      case 'name',             i=i+1;       name = varargin{i};     case 'comp_names',       i=i+1;       comp_names = varargin{i};      case 'lattice',          i=i+1;       sTopol.lattice = varargin{i};     case 'shape',            i=i+1;       sTopol.shape = varargin{i};      case {'topol','som_topol','sTopol'},       i=i+1;       sTopol = varargin{i};       munits = prod(sTopol.msize);      case 'neigh',            i=i+1;       neigh = varargin{i};     case 'tracking',         i=i+1;       tracking = varargin{i};     case 'algorithm',        i=i+1;       algorithm = varargin{i};   % unambiguous values     case {'hexa','rect'},       sTopol.lattice = varargin{i};     case {'sheet','cyl','toroid'},       sTopol.shape = varargin{i};      case {'gaussian','cutgauss','ep','bubble'},       neigh = varargin{i};     case {'seq','batch'},       algorithm = varargin{i};      case {'small','normal','big'},       mapsize = varargin{i};      otherwise argok=0;     end  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'),     switch varargin{i}(1).type,       case 'som_topol',        sTopol = varargin{i};      otherwise argok=0;     end  else    argok = 0;   end  if ~argok,     disp(['(som_supervised) Ignoring invalid argument #' num2str(i+1)]);   end  i = i+1; end%%%%%%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% constructing the training data by adding 1-of-N -coded matrix to the% original data.[dlen,dim] = size(D0);Dc = zeros(dlen,n);for i=1:dlen   if c(i)    Dc(i,c(i)) = 1;  endendD = [D0, Dc];% initialization and training sD = som_data_struct(D,...                     'name',data_name);sM = som_make(sD,...              'mask',mask,...              'munits',munits,...              'name',data_name,...              'tracking',tracking,...              'algorithm',algorithm,...              'mapsize',mapsize,...              'topol',sTopol,...              'neigh',neigh);% add labelsfor i=1:prod(sM.topol.msize),   [dummy,class] = max(sM.codebook(i,dim+[1:n]));  sM.labels{i} = classlabels{class};end%sD.labels = sData.labels;%sM = som_autolabel(sM,sD,'vote');% remove extra components and modify map -structsM.codebook = sM.codebook(:,1:dim);sM.mask = sM.mask(1:dim);sM.comp_names = sData.comp_names;sM.comp_norm = sData.comp_norm;% remove extras from sM.trainhistfor i=1:length(sM.trainhist)  if sM.trainhist(i).mask    sM.trainhist(i).mask = sM.trainhist(i).mask(1:dim);  endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [numbers, n, names] = class2num(class)names = {};numbers = zeros(length(class),1);for i=1:length(class)  if ~isempty(class{i}) & ~any(strcmp(class{i},names))    names=cat(1,names,class(i));  endendn=length(names);tmp_numbers = (1:n)';for i=1:length(class)  if ~isempty(class{i})    numbers(i,1) = find(strcmp(class{i},names));      endend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -