Browse code

starting som prediction fine-tuned class-performance visualisation

git-svn-id: https://svn.discofish.de/MATLAB/spmtoolbox/SVMCrossVal@112 83ab2cfd-5345-466c-8aeb-2b2739fb922d

Christoph Budziszewski authored on21/01/2009 16:34:25
Showing1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,187 @@
1
+function som_write_cod(sMap, filename)
2
+
3
+%SOM_WRITE_COD Writes a map struct to ascii file in SOM_PAK format.
4
+%
5
+% som_write_cod(sMap,filename)
6
+%
7
+%  som_write_cod(sMap,'map1.cod');
8
+%
9
+%  Input and output arguments: 
10
+%   sMap        (struct) self-organizing map structure
11
+%   filename    (string) name of input file
12
+%
13
+% Note that much of the information in the map struct is lost.
14
+% Typically, when saving map structs into files use the 'save' command.
15
+%
16
+% For more help, try 'type som_write_cod' or check out online documentation.
17
+% See also SOM_READ_COD, SOM_READ_DATA, SOM_WRITE_DATA.
18
+
19
+%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
20
+%
21
+% som_write_cod
22
+%
23
+% PURPOSE
24
+%
25
+% Writes a self-organizing map struct to a file in SOM_PAK format.
26
+%
27
+% SYNTAX
28
+%
29
+%  som_write_cod(sMap,filename); 
30
+%
31
+% DESCRIPTION
32
+%
33
+% This function is offered for compatibility with SOM_PAK, a SOM 
34
+% software package in C. It writes map struct to files in SOM_PAK format.
35
+%
36
+% See SOM_READ_COD for description of the SOM_PAK map file format.
37
+% Because the SOM_PAK package does not support many of the features and
38
+% options of the SOM Toolbox, some of the information is changed, or even
39
+% lost. 
40
+%
41
+% SOM_PAK does not support 3- or higher dimensional map grids. These cannot
42
+%         be exported using this function.  
43
+% SOM_PAK always supposes that the map has 'sheet' shape. 
44
+% SOM_PAK only supports 'bubble' and 'gaussian' neighborhood functions.
45
+%         Any other neighborhood function is changed to 'gaussian'.
46
+% SOM_PAK doesn't support component names. However, the component names are
47
+%         written on a comment line which begins with '#n '. Any spaces (' ') 
48
+%         in the component names are replaced with underscores ('_').      
49
+% Information on map name, mask, training history and normalizations is lost.
50
+%
51
+% This function is only offered for compatibility with SOM_PAK. In general,
52
+% when saving map structs in files, use 'save filename.mat sMap'. This is
53
+% faster and retains all information of the map.
54
+% 
55
+% REQUIRED INPUT ARGUMENTS
56
+%
57
+%  sMap       (struct) the SOM struct to be written
58
+%  filename   (string) the name of the input file
59
+%
60
+% EXAMPLES
61
+%
62
+%  som_write_cod(sMap,'map1.cod');
63
+%
64
+% SEE ALSO
65
+% 
66
+%  som_read_cod     Read a map from a file in SOM_PAK format.
67
+%  som_read_data    Reads data from an ascii file.
68
+%  som_write_data   Writes data struct into a file in SOM_PAK format.
69
+
70
+% Copyright (c) 1997-2000 by the SOM toolbox programming team.
71
+% http://www.cis.hut.fi/projects/somtoolbox/
72
+
73
+% Version 1.0beta ecco 221097
74
+% Version 2.0beta ecco 030899, juuso 151199
75
+
76
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
77
+%% check arguments and initialize
78
+
79
+error(nargchk(2, 2, nargin))  % check no. of input args is correct
80
+
81
+% sMap
82
+msize = sMap.topol.msize;           % map grid size
83
+mdim  = length(msize);              % map grid dimension
84
+[munits dim] = size(sMap.codebook); % input space dimension
85
+
86
+% map dimension check:
87
+% map dimensions higher than 2 are not supported by SOM_PAK
88
+if mdim > 2,      
89
+  error('Cannot write maps with higher dimension than two');
90
+end
91
+
92
+% in SOM_PAK the xy-indexing is used, while in Matlab ij-indexing
93
+% therefore, the codebook vectors have to be reorganized 
94
+order = reshape([1:munits],msize);
95
+order = reshape(order',[munits 1]);
96
+msize = fliplr(msize);
97
+
98
+% open output file
99
+fid = fopen(filename, 'w');
100
+if fid < 0,
101
+  error(['Cannot open file ' filename]);
102
+end
103
+
104
+% check version
105
+v = version;
106
+ver_53_or_newer = (str2num(v(1:3)) >= 5.3);
107
+
108
+
109
+[lines numlabs] = size(sMap.labels);
110
+has_labels = zeros(lines, 1);
111
+if ver_53_or_newer
112
+  has_labels = sum((~(cellfun('isempty', sMap.labels))), 2);
113
+else
114
+  for i = 1:lines
115
+    for j = 1:numlabs
116
+      if ~isempty(sMap.labels{i,j}) 
117
+	has_labels(i) = 1; break; 
118
+      end
119
+    end
120
+  end
121
+end
122
+
123
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
124
+%% write map into a file
125
+
126
+% write header
127
+
128
+fprintf(fid, '%d %s ', dim, sMap.topol.lattice); % dimension and lattice
129
+fprintf(fid, '%d ', msize);                      % map size
130
+% neighborhood type ('ep' and 'cutgauss' are not supported by SOM_PAK; 
131
+% they are converted to 'gaussian')
132
+if strcmp(sMap.neigh,'bubble'), fprintf(fid, 'bubble\n');
133
+else 
134
+  if ~strcmp(sMap.neigh,'gaussian'), 
135
+    warning(['Neighborhood type ''' sMap.neigh ''' converted to ''gaussian''']);
136
+  end
137
+  fprintf(fid,'gaussian\n'); 
138
+end
139
+
140
+% write the component names as a SOM_PAK comment line
141
+
142
+fprintf(fid,'#n ');
143
+for i=1:dim, fprintf(fid, '%s ', strrep(sMap.comp_names{i},' ','_')); end
144
+fprintf(fid,'\n');
145
+
146
+% write codebook
147
+
148
+form  = [repmat('%g ',[1 dim]) '\n'];
149
+if ~has_labels  % no labels; fast
150
+  fprintf(fid, form, sMap.codebook(order,:)');
151
+else            % has labels; slow
152
+  for i=1:munits, 
153
+    fprintf(fid, '%g ', sMap.codebook(order(i),:));
154
+
155
+    if has_labels(order(i))
156
+      temp = '';
157
+      if ver_53_or_newer
158
+	nonempty = ~(cellfun('isempty', sMap.labels(i,:)));
159
+      else
160
+	for j = 1:numlabs, nonempty(j) = ~isempty(sMap.labels{i, j}); end
161
+      end
162
+      labs = char(sMap.labels{order(i), nonempty});
163
+      labs(:,end + 1) = ' ';
164
+      temp = reshape(labs',[1 prod(size(labs))]);
165
+      temp(findstr('  ', temp))='';
166
+      fprintf(fid, '%s\n', temp(1:end-1));
167
+    else
168
+      fprintf(fid, '\n');
169
+    end
170
+  end
171
+end
172
+
173
+% close file
174
+
175
+if fclose(fid) 
176
+  error(['Cannot close file ' filename]);
177
+else
178
+  fprintf(2, 'map write ok\n');
179
+end
180
+
181
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
182
+
183
+
184
+
185
+
186
+
187
+