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

📄 som_fuzzycolor.m

📁 it is matlab code , som(slef organizing map) tool for matlab
💻 M
字号:
function [color,X]=som_fuzzycolor(sM,T,R,mode,initRGB,S)% SOM_FUZZYCOLOR Heuristic contraction projection/soft cluster color coding for SOM % % function [color,X]=som_fuzzycolor(map,[T],[R],[mode],[initRGB],[S])%%  sM        (map struct)%  [T]       (scalar) parameter that defines the speed of contraction %              T<1: slow contraction, T>1: fast contraction. Default: 1%  [R]       (scalar) number of rounds, default: 30%  [mode]    (string) 'lin' or 'exp', default: 'lin'  %  [initRGB] (string) Strings accepted by SOM_COLORCODE,  default: 'rgb2'%  [S]       (matrix) MxM matrix a precalculated similarity matrix %  color     (matrix) of size MxRx3 resulting color codes at each step %  X         (matrix) of size MxRx2 coordiantes for projected unit weight vectors %             at each step of iteration. (Color code C is calculated using this%             projection.)%% The idea of the projection is to use a naive contraction model which% pulls the units together. Units that are close to each other in the% output space (clusters) contract faster into the same point in the% projection. The original position for each unit is its location in% the topological grid.% % This is an explorative tool to color code the map units so that% similar units (in the sense of euclidean norm) have similar coloring% (See also SOM_KMEANSCOLOR) The tool gives a series of color codings% which start from an initial color coding (see SOM_COLORCODE) and% show the how the fuzzy clustering process evolves.%% The speed of contraction is controlled by the input parameter T. If% it is high the projection contracts more slowly and reveals more% intermediate stages (hierarchy).  A good value for T must be% searched manually. It is probable that the default values do not% yield good results.%% The conatrction process may be slow. In this case the mode can be% set to 'exp' instead of 'lin', however, then the computing becomes% heavier.%% EXAMPLE%%  load iris; % or any other map struct sM %  [color]=som_fuzzycolor(sM,'lin',10);%  som_show(sM,'color',color);%% See also SOM_KMEANSCOLOR, SOM_COLORCODE, SOM_CLUSTERCOLOR%% REFERENCES% % Johan Himberg, "A SOM Based Cluster Visualization and Its% Application for False Coloring", in Proceedings of International% Joint Conference on Neural Networks (IJCNN2000)},% pp. 587--592,Vol. 3, 2000% % Esa Alhoniemi, Johan Himberg, and Juha Vesanto, Probabilistic% Measures for Responses of Self-Organizing Map Units, pp. 286--290,% in Proceedings of the International ICSC Congress on Computational% Intelligence Methods and Applications (CIMA '99)}, ICSC Academic% Press}, 1999%% Outline of the heuristic%% First a matrix D of squared pairwise euclidean distances% D(i,j)=d(i,j)^2 between map weight vectors is calculated. This% matrix is transformed into a similarity matrix S,% s(i,j)=exp(-(D(i,j)/(T.^2*v)), where T is a free input parameter and% v the variance of all elements of D v=var(D(:)). The matrix is% further normalized so that all rows sum to one. The original% topological coordinates X=som_unit_coords(sM) are successively% averaged using this matrix. X(:,:,i)=S^i*X(:,:,1); As the process is% actually a series of successive weighted averagings of the initial% coordinates, all projected points eventually contract into one% point.  T is a user defined parameter that defines how fast the% projection contracts into this center point. If T is too small, the% process will end into the center point at once.% % In practise, we don't calculate powers of S, but compute% %  X(:,:,i)=S.*X(:,:,i-1); % mode: 'lin'%% The contraction process may be slow if T is selected to be large,% then for each step the similarity matrix is squared%%  X(:,:,i)=S*X(:,:,1); S=S*S % mode: 'exp'%% The coloring is done using the function SOM_COLORCODE according to% the projections in X, The coordinates are rescaled in order to% achieve maximum color resolution.% Contributed to SOM Toolbox vs2, 2000 by Johan Himberg% Copyright (c) by Johan Himberg% http://www.cis.hut.fi/projects/somtoolbox/% Previously rownorm function normalized the rows of S erroneously% into unit length, this major bug was corrected 14042003. Now the% rownorm normalizes the rows to have unit sum as it should johan 14042003%% Check input argumentsif isstruct(sM),    if ~isfield(sM,'topol')      error('Topology field missing.');   end   M=size(sM.codebook,1);else   error('Requires a map struct.');endif nargin<2 | isempty(T),   T=1;endif ~vis_valuetype(T,{'1x1'})   error('Input for T must be a scalar.');endif nargin<3 | isempty(R),   R=30;endif ~vis_valuetype(R,{'1x1'})   error('Input for R must be a scalar.');endif nargin < 4 | isempty(mode),   mode='lin';endif ~ischar(mode),   error('String input expected for mode.');else   mode=lower(mode);   switch mode   case {'lin','exp'}      ;      otherwise      error('Input for mode must be ''lin'' or ''exp''.');   endendif nargin < 5 | isempty(initRGB)   initRGB='rgb2';endif ischar(initRGB),      try      dummy=som_colorcode(sM,initRGB);   catch      error(['Color code ''' initRGB ''' not known, see SOM_COLORCODE.']);   endelse   error('Invalid color code string');   endif nargin<6 | isempty(S),   S=fuzzysimilarity(sM,1./T);endif ~vis_valuetype(S,{[M M]}),   error('Similarity matrix must be a MunitsxMunits matrix.')endx = maxnorm(som_unit_coords(sM.topol.msize,sM.topol.lattice,'sheet'));x = x-repmat(mean(x),size(x,1),1);X(:,:,1)=x; color(:,:,1)=som_colorcode(x,'rgb2',1);%%% Actionsfor i=1:R,   switch mode   case 'exp'      S=rownorm(S*S);      tmpX=S*X(:,:,1);   case 'lin'      tmpX=S*X(:,:,i);   end   X(:,:,i+1)=tmpX;   color(:,:,i+1)=som_colorcode(X(:,:,i+1),initRGB);endcolor(isnan(color))=0;function r=fuzzysimilarity(sM,p)  % Calculate a "fuzzy response" similarity matrix  % sM: map  % p: sharpness factor  d=som_eucdist2(sM,sM);  v=std(sqrt(d(:))).^2;  r=rownorm(exp(-p^2*(d./v)));  r(~isfinite(r))=0;  return;function X = rownorm(X)  r = sum(X,2);  X = X ./ r(:,ones(size(X,2),1));   return;function X = maxnorm(X)  for i=1:size(X,2), r = (max(X(:,i))-min(X(:,i))); if r, X(:,i) = X(:,i) / r; end, end  return; 

⌨️ 快捷键说明

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