?? som_denormalize.m
字號:
function sD = som_denormalize(sD,varargin)%SOM_DENORMALIZE Denormalize data.% % sS = som_denormalize(sS, [argID, value, ...]) %% sS = som_denormalize(sS) % sS = som_denormalize(sS,[1:3 10],'remove') % D = som_denormalize(D,sM.comp_norm)% D = som_denormalize(D,sM,[1:3 10])%% Input and output arguments ([]'s are optional): % sS The data to which the denormalization is applied.% The modified and updated data is returned.% (struct) data or map struct% (matrix) data matrix (a matrix is also returned)% [argID, (string) See below. The values which are unambiguous can % value] (varies) be given without the preceeding argID.%% Here are the valid argument IDs and corresponding values. The values which% are unambiguous (marked with '*') can be given without the preceeding argID.% 'norm' *(struct) Normalization struct, or an array of such. % Alternatively, a map/data struct can be given % in which case its '.comp_norm' field is used % (see below).% *(cell array) Of normalization structs. Typically, the% '.comp_norm' field of a map/data struct. The % length of the array must be equal to data dimension.% 'remove' *(string) If 'remove' tag is specified, the% normalization operations are not only undone, % they are also removed from the struct.% 'comps' *(vector) the components to which the denormalization is% applied, default is [1:dim] ie. all components%% For more help, try 'type som_denormalize' or check out online documentation.% See also SOM_NORMALIZE, SOM_NORM_VARIABLE, SOM_INFO.%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% som_denormalize%% PURPOSE%% Undo normalizations of data structs/sets.%% SYNTAX%% sS = som_denormalize(sS)% sS = som_denormalize(...,'argID',value,...);% sS = som_denormalize(...,value,...);% D = som_denormalize(D,sNorm)%% DESCRIPTION%% This function is used to undo normalizations of data structs/sets. If a% data/map struct is given, all normalizations in the '.comp_norm' field are% undone and, thus, the values in the original data context are returned. If% a matrix is given, the normalizations to undo must be given as the second% argument. SOM_DENORMALIZE actually uses function SOM_NORM_VARIABLE to% handle the normalization operations, and only handles the data struct/set% specific stuff itself.%% Normalizations are always one-variable operations. In the data and map% structs the normalization information for each component is saved in the% '.comp_norm' field, which is a cell array of length dim. Each cell% contains normalizations for one vector component in a% struct array of normalization structs. Each component may have different% amounts of different kinds of normalizations. Typically, all% normalizations are either 'undone' or 'done', but in special situations% this may not be the case. The easiest way to check out the status of the% normalizations is to use function SOM_INFO, e.g. som_info(sS,3)% % REQUIRED INPUT ARGUMENTS%% sS The data to which the denormalization is applied.% (struct) Data or map struct. The normalizations in the % '.comp_norm' field are undone for the specified % components.% (matrix) Data matrix. The normalization to undo must be% given in the second argument.%% 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. The% valid IDs and corresponding values are listed below. The values% which are unambiguous (marked with '*') can be given without the% preceeding argID.%% sNorm *(struct) Normalization struct, or an array of structs, which% is undone for all specified components. If the % '.status' field of the struct(s) is 'uninit', % the undoing operation is interrupted - it cannot be % done. Alternatively, the struct may be map or % data struct in which case its '.comp_norm' field % is used (see the cell array option below).% *(cell array) In practice, the '.comp_norm' field of % a data/map struct. The length of the array % must be equal to the dimension of the given % data set (sS). Each cell contains the% normalization(s) for one component. Only the% normalizations listed in comps argument are% undone though.%% 'remove' *(string) If 'remove' tag is specified, the% normalization operations are not only undone, % they are also removed from the struct.%% 'comps' *(vector) The components which are denormalized.% Default is to undo all components.% *(string) 'all'%% OUTPUT ARGUMENTS% % sS Modified and/or updated data.% (struct) If a struct was given as input argument, the% same struct is returned with denormalized data and% updated '.comp_norm' fields. % (matrix) If a matrix was given as input argument, the % denormalized data matrix is returned.% % EXAMPLES%% To undo normalization of a data/map struct: %% sD = som_denormalize(sD); % sM = som_denormalize(sM); %% To completely remove the normalizations, use the 'remove' tag: %% sD = som_denormalize(sD,'remove');%% To undo only a few selected components, use the comps argument: % % sD = som_denormalize(sD,[1 3:5]); % % To denormalize a set of values from a data set D (which must be % of equal dimension as the data in sD): %% D = som_denormalize(D,sD); % or % D = som_denormalize(D,sD.comp_norm); % only denormalize a few components% D = som_denormalize(D,sD,[1 3:5]); % % Assuming you have a few values of a certain vector component (i)% in a vector (x) which you want to denormalize: %% xorig = som_denormalize(x,sD.comp_norm{i}); % or using SOM_NORM_VARIABLE% xorig = som_norm_variable(x,sD.comp_norm{i},'undo');%% To check out the status of normalization in a struct use SOM_INFO: % % som_info(sM,3)% som_info(sD,3)%% SEE ALSO% % som_normalize Add/apply/redo normalizations of a data struct/set.% som_norm_variable Normalization operations for a set of scalar values.% som_info User-friendly information of SOM Toolbox structs.% Copyright (c) 1998-2000 by the SOM toolbox programming team.% http://www.cis.hut.fi/projects/somtoolbox/% Version 2.0beta juuso 151199 150300%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% check argumentserror(nargchk(1, 3, nargin)); % check no. of input arguments is correct% sDstruct_mode = isstruct(sD);if struct_mode, switch sD.type case 'som_map', D = sD.codebook; case 'som_data', D = sD.data; otherwise, error('Illegal struct.') endelse D = sD;end[dlen dim] = size(D);% varargincomps = [1:dim];remove_tag = 0;if struct_mode, sNorm = sD.comp_norm; else sNorm = []; endi=1; while i<=length(varargin), argok = 1; if ischar(varargin{i}), switch varargin{i}, % argument IDs case 'comps', i=i+1; comps = varargin{i}; case {'norm','sNorm','som_norm'}, i=i+1; sNorm = varargin{i}; % unambiguous values case 'remove', remove_tag = 1; otherwise argok=0; end elseif isnumeric(varargin{i}), comps = varargin{i}; elseif isstruct(varargin{i}), sNorm = varargin{i}; elseif iscell(varargin{i}), sNorm = varargin{i}; else argok = 0; end if ~argok, disp(['(som_denormalize) Ignoring invalid argument #' num2str(i+1)]); end i = i+1; end% check compsif ischar(comps), comps = [1:dim]; endif isempty(comps), return; endif size(comps,1)>1, comps = comps'; end % make it a row vector% sNorm% check out the given normalization% (and if necessary, copy it for each specified component)if isstruct(sNorm), switch sNorm(1).type, case {'som_map','som_data'}, csNorm = sNorm(1).comp_norm; case {'som_norm'}, for i=comps, csNorm{i} = sNorm; end otherwise, error('Invalid struct for sNorm.') endelseif iscell(sNorm), csNorm = sNorm; else error('Illegal value for sNorm.')end% check that csNorm and comps possibly agreeif max(comps) > length(csNorm), error('Given normalizations does not match the components.')end if length(csNorm) ~= dim, error('Given normalizations does not match data dimension.')end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% action% undo the normalizations for i = comps, len = length(csNorm{i}); for j=len:-1:1, sN = csNorm{i}(j); if struct_mode, if strcmp(sN.status,'done'), [x,sN] = som_norm_variable(D(:,i), sN, 'undo'); D(:,i) = x; csNorm{i}(j) = sN; end else D(:,i) = som_norm_variable(D(:,i), sN, 'undo'); end endend% remove normalizationsif struct_mode & remove_tag, for i = comps, csNorm{i} = []; endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% output if struct_mode, switch sD.type case 'som_map', sD.codebook = D; case 'som_data', sD.data = D; otherwise, error('Illegal struct.') end sD.comp_norm = csNorm; else sD = D;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -