subplot(4,4,k);
plot(sDiris.data(:,i),sDiris.data(:,j),'k.') %右上区域(i
xlabel(sDiris.comp_names{i})
ylabel(sDiris.comp_names{j})
end
k=k+1;
end
end
echo on
% 绘图效果如下:
% STEP 2: DATA NORMALIZATION
% ==========================
% 由于SOM算法采用欧式距离进行相似性度量,不同变量如果取值范围不同,
% 那么取值较大的变量将可能占据主导地位,因此需要对变量进行归一化处理。
% 即将每个变量的取值范围都归一化到[0,1]范围。命令很简单,而且还可通过som_denormalize进行逆操作。
sDiris = som_normalize(sDiris,'var');
x = sDiris.data(1,:)
orig_x = som_denormalize(x,sDiris)
% STEP 3: MAP TRAINING
% ====================
% SOM_MAKE函数用于训练 SOM. 缺省情况下,它
% 首先确定som大小, 然后采用线性方法进行初始化
% 最后才有批量算法(batch algorithm)进行训练
% SOM_DEMO1 对训练过程有更详细的描述。
sMap = som_make(sDiris);
% 由于iris数据集中对每个数据有分类标注,可以采用如下函数进行自动标注。
sMap = som_autolabel(sMap,sDiris,'vote');
% STEP 4: VISUALIZING THE SELF-ORGANIZING MAP: SOM_SHOW
% =====================================================
% 采用som_show即可将som可视化展示
colormap(1-gray) %采用反转灰度
som_show(sMap,'norm','d')
% SOM_SHOW_ADD和subplot可用于在所有图形中加标记,如下:
h=zeros(sMap.topol.msize); h(1,2) = 1;
som_show_add('hit',h(:),'markercolor','r','markersize',0.5,'subplot','all')
som_show(sMap,'umat','all','empty','Labels')
som_show_add('label',sMap,'Textsize',8,'TextColor','r','Subplot',2)
h = som_hits(sMap,sDiris);
som_show_add('hit',h,'MarkerColor','r','Subplot',1)
som_show_clear('hit',1);%还可采用此函数来清除上一步添加的绘图信息
som_show_clear('lab',2); %清除上图右边的标签标记
h1 = som_hits(sMap,sDiris.data(1:50,:));
h2 = som_hits(sMap,sDiris.data(51:100,:));
h3 = som_hits(sMap,sDiris.data(101:150,:));
som_show_add('hit',[h1, h2, h3],'MarkerColor',[1 0 0; 0 1 0; 0 0 1],'Subplot',1)
%相当于R;G;B
%分类统计命中直方图
clf
clc
% 采用SOM_GRID可以绘制输出层的Som图形
subplot(2,2,1)
som_grid(sMap,'Linecolor','k')
view(0,-90), title('Map grid')
% 采用表面曲线(surface plot)还可以绘制距离矩阵
subplot(2,2,2)
Co=som_unit_coords(sMap);
U=som_umat(sMap);
U=U(1:2:size(U,1),1:2:size(U,2));
som_grid(sMap,'Coord',[Co, U(:)],'Surf',U(:),'Marker','none');
view(-80,45), axis tight, title('Distance matrix')
% 绘制原始数据点信息,前三维作为坐标,第四维用于确定标记点大小
subplot(2,2,3)
M = som_denormalize(sMap.codebook,sMap);
som_grid(sMap,'Coord',M(:,1:3),'MarkerSize',M(:,4)*2)
view(-80,45), axis tight, title('Prototypes')
% 在上述基础上,采用不同颜色绘制数据点的分类信息
subplot(2,2,4)
som_grid(sMap,'Coord',M(:,1:3),'MarkerSize',M(:,4)*2)
hold on
D = som_denormalize(sDiris.data,sDiris);
plot3(D(1:50,1),D(1:50,2),D(1:50,3),'r.',...
D(51:100,1),D(51:100,2),D(51:100,3),'g.',...
D(101:150,1),D(101:150,2),D(101:150,3),'b.')
view(-72,64), axis tight, title('Prototypes and data')
% STEP 5: ANALYSIS OF RESULTS
% ===========================
% 这一步的使用,主要还是取决于用户根据不同的应用场景进行编程实现,toolbox提供的简单函数如:
[qe,te] = som_quality(sMap,sDiris)
%主要用于统计数据质量误差和拓扑误差。