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

📄 som_kmeanscolor2.m

📁 很全的som工具箱 四个demo可为初学者提够帮助
💻 M
字号:
function [color,centroids]=som_kmeanscolor2(mode,sM,C,initRGB,contrast,R)% SOM_KMEANSCOLOR2 Color codes a SOM according to averaged or best K-means clustering%% color = som_kmeanscolor2('average',sM, C, [initRGB], [contrast],[R]) %%  color=som_kmeanscolor2('average',sM,[2 4 8 16],som_colorcode(sM,'rgb1'),'enhanced');%  [color,centroid]=som_kmeanscolor2('best',sM,15,[],'flat',R);%  %  Input and output arguments ([]'s are optional):%%   mode       (string) 'average' or 'best', defalut: 'average'%   sM         (struct) a map struct%   C          (vector) number of clusters%   [initRGB]  (string, matrix) a color code string accepted by SOM_COLORCODE%               or an Mx3 matrix of RGB triples, where M is the number%               of map units. Default: SOM_COLORCODEs default%   [contrast] (string) 'flat', 'enhanced' color contrast mode, default:%               'enhanced'.%   [R]        (scalar) number of K-means trials, default: 30.%   color      (matrix) Mx3xC of RGB triples%   centroid   (array of matrices) centroid{i} includes codebook for the best%               k-means for C(i) clusters, i.e. the cluster centroids corresponding to%               the color code color(:,:,i).% % The function gives a set of color codes for the SOM according to K-means % clustering. It has two operation modes: % % 'average': The idea of coloring is that the color of the units belonging to the same %   cluster is the  mean of the original RGB values (see SOM_COLORCODE) of the map units %   belonging to the cluster (see SOM_CLUSTERCOLOR). The K-means clustering is made,%   by default, 30 times and the resulting color codes are averaged for%   each specified number of clusters C(i), i=1,...,k. In a way, the resulting averaged color %   codes reflect the stability of the K-means clustering made on the map units.%% 'best': runs the k-means R times for C(i), i=1,...,n clusters as in previous mode, %   but instead of averaging all the R color codes, it picks the one that corresponds to the %   best k-means clustering for each C(i). The 'best' is the one with the lowest %   quantization error. The result may differ from run to run.%% EXAMPLE% %  load iris; % or any other map struct sM %  color=som_kmeanscolor2('average',sM,[2:6]);%  som_show(sM,'umat','all','color',color);% % See also SOM_KMEANS, SOM_SHOW, SOM_COLORCODE, SOM_CLUSTERCOLOR, SOM_KMEANSCOLOR% Contributed to SOM Toolbox 2.0, 2001 February by Johan Himberg% Copyright (c) by Johan Himberg% http://www.cis.hut.fi/projects/somtoolbox/%%% Check number of inputserror(nargchk(3, 6, nargin));  % check no. of input args%%% Check input args & set defaultsif ~vis_valuetype(mode,{'string'}),   error('Mode must be a string.');endswitch lower(mode),case{'average','best'}   ;otherwise   error('Mode must be string ''average'' or ''best''.');endif isstruct(sM) & isfield(sM,'type') & strcmp(sM.type,'som_map'),   [tmp,lattice,msize]=vis_planeGetArgs(sM);   munits=prod(msize);   if length(msize)>2       error('Does not work with 3D maps.')   endelse   error('Map struct required for the second input argument!');endif ~vis_valuetype(C,{'1xn','nx1'}),   error('Vector value expected for cluster number.');end% Round C and checkC=round(C(:)');if any(C<2),   error('Cluster number must be 2 or more.');end% check initial color codingif nargin<4 | isempty(initRGB)   initRGB=som_colorcode(sM);end% check contrast checkingif nargin<5 | isempty(contrast),   contrast='enhanced';endif ~ischar(contrast),   error('String input expected for input arg. ''contrast''.');else   switch lower(contrast)   case {'flat','enhanced'}      ;   otherwise       error(['''flat'' or ''enhanced'' expected for '...            'input argument ''contrast''.']);   endendif ischar(initRGB),   try       initRGB=som_colorcode(sM,initRGB);   catch      error(['Color code ' initRGB ...            'was not recognized by SOM_COLORCODE.']);   endelseif vis_valuetype(initRGB,{'nx3rgb',[munits 3]},'all'),   ;else   error(['The initial color code must be a string '...         'or an Mx3 matrix of RGB triples.']);endif nargin<6|isempty(R),   R=30;endif ~vis_valuetype(R,{'1x1'}),   error('''R'' must be scalar.');end%%% Action %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%disp('Wait...');index=0; hit_=zeros(munits,munits);switch mode,   %% Averaged k-means coloringcase 'average'   for k=C,      disp(['Running K-means for ' num2str(k) ' clusters...']);       color_=zeros(munits,3);      colord_=color_;      % Average R k-means colorings for C clusters      for j=1:R,         [dummy,c]=som_kmeans('batch',sM,k,100,0); % max 100 iterations, verbose off          color_=color_+som_clustercolor(sM,c,initRGB);      end      index=index+1;      color(:,:,index)=color_./R;   end      %% coloring for 'best' k-means coloringcase 'best'   for k=C,      disp(['Running K-means for ' num2str(k) ' clusters...']);      c=[];err=Inf; div=[];      %% look for the best k-means among R trials      for i=1:R,         [c_,div_,err_(i)]=som_kmeans('batch',sM,k,100,0); % max 100 iterations, verbose off         if err_(i)<err,             err=err_(i); c=c_; div=div_;          end      end      % record the 'best' k-means for C clusters      index=index+1;      color(:,:,index)=som_clustercolor(sM,div,initRGB);      centroid{index}=c;      endend%%% Build outputswitch contrastcase 'flat'   ;case 'enhanced'   warning off;   ncolor=maxnorm(color);   ncolor(~isfinite(ncolor))=color(~isfinite(ncolor));   color=ncolor;   warning on;end%%% Subfunctions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function X=maxnorm(x)% normalize columns of x between [0,1]x=x-repmat(min(x),[size(x,1) 1 1]);X=x./repmat(max(x),[size(x,1) 1 1]);

⌨️ 快捷键说明

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