【MATLAB数据处理实用案例详解(21)】——利用SOM自组织映射网络实现癌症样本数据分类和利用SOM自组织映射网络实现柴油机故障分类详解

一、SOM原理分析

在网络结构上,自组织竞争网络一般是有输入和竞争层构成的单层网络,网络没有掩藏层,输入和竞争层之间的神经元实现双向链接,同时竞争层各神经元之间还存在横向连接。

自组织竞争网络的基本思想是网络竞争层各个神经元竞争对输入模式的响应机会,最后仅一个神经元成为竞争的胜者,并对那些与获胜神经元有关的各连接权值朝向更有利于竞争的方向调整。获胜神经元表示输入模式的分类。

除了竞争方法外,还有通过抑制方法获胜的,即网络竞争层各层神经元都能抑制所有其他神经元对输入模式的响应机会,从而使自己成为胜利者。

此外,还有一种抑制的方法,即每个神经元只抑制与自己临近的神经元,而对远离自己的神经元则不抑制。因此,自组织竞争网络自组织自适应的学习能力进一步拓宽了神经网络在模式识别分类方面的应用。

1981年芬兰Helsink大学的T.Kohonen教授提出一种自组织特征映射网,简称SOM网,又称Kohonen网。生物神经系统中,存在一种“侧抑制”现象,即一个神经细胞兴奋后,通过它的分支会对周围其他神经细胞产生抑制。由于侧抑制的作用,各细胞之间相互竞争的最终结果是:兴奋作用最强的神经细胞所产生的抑制作用战胜了周围所有其他细胞的抑制作用而“赢”了,其周围的其他神经细胞则全“输”了。

Kohonen认为:一个神经网络接受外界输入模式时,将会分为不同的对应区域,各区域对输入模式具有不同的响应特征,而且这个过程是自动完成的。

自组织竞争人工神经网络正是基于上述生物系统结构和现象形成的。它是一种以无导师学习学习方式进行网络,具有自组织功能的神经网络。网络通过自身训练,自动对输入模式进行分类。

二、SOM拓扑结构分析

自组织特征映射神经网络(Self-organizing Feature Maps)简称SOFM或者SOM,也是一种无导师学习的网络,主要用于对输入向量进行区域分类。和自组织竞争网络不同的是,它不但识别输入区域临近的区域,还研究输入向量的分布特性和拓扑特性结构。

SOM网络模拟大脑神经系统自组织特征映射的功能,是一种竞争型网络,并在学习中能无导师进行自组织学习。脑神经学研究结果表明:神经元之间的信息交互具有的共同特征是:最近邻的两个神经元互相激励,较远的神经元互相抑制,更远的则又具有较弱的激励作用。SOM网络模型层结构图如下:
在这里插入图片描述
由于SOM算法是一种无导师的聚类法,它能将任意维输入模式在输出层映射成一维或者二维离散图形,并保持其拓扑结构不变,即在无导师的情况下,通过对输入模式的自组织学习,在竞争层将分类结果表示出来,此外,网络通过对输入模式的反复学习,可以使连接权值空间分布密度与输入模式的概率分布趋于一致,即链接权向量分布能反映输入模式的统计特征。

和自组织竞争网络一样,SOM网络可以用来识别获胜神经元 ,不同的是,自组织竞争网络只修正获胜神经元,而SOM网络依据Kohonen学习规则,要同时修正获胜神经元附近区域Ni(d)内所有神经元。
i w ( q ) = i w ( q − 1 ) + a ( p ( q ) − i w ( q − 1 ) ) {i^{w\left( q \right)}} = {i^{w\left( {q - 1} \right)}} + a\left( {p\left( q \right) - {i^{w\left( {q - 1} \right)}}} \right) iw(q)=iw(q1)+a(p(q)iw(q1))
i w ( q ) = ( 1 − a ) i w ( q − 1 ) + a p ( q ) {i^{w\left( q \right)}} = \left( {1 - a} \right){i^{w\left( {q - 1} \right)}} + ap\left( q \right) iw(q)=(1a)iw(q1)+ap(q)

对于输入向量 p ,一旦获胜神经元以及临近神经元的权值被修正后接近p ,多次循环后,临近神经元会彼此接近。SOM神经元竞争二维临域示意图下图所示。
在这里插入图片描述
在这里插入图片描述
临域可以用集合表示:
N 13 ( 1 ) = { 8 , 12 , 13 , 14 , 18 } {N_{13}}\left( 1 \right) = \left\{ {8,12,13,14,18} \right\} N13(1)={ 8,12,13,14,18}
N 13 ( 2 ) = { 3 , 7 , 8 , 9 , 11 , 12 , 13 , 14 , 15 , 17 , 18 , 19 , 23 } {N_{13}}\left( 2 \right) = \left\{ {3,7,8,9,11,12,13,14,15,17,18,19,23} \right\} N13(2)={ 3,7,8,9,11,12,13,14,15,17,18,19,23}

三、三种SOM拓扑结构

3.1 Gridtop()网格拓扑结构

代码如下:

%% gridtop()网络拓扑结构
pos = gridtop(2,3)
figure,plotsom(pos)

网络结构:
在这里插入图片描述

3.2 Hextop()六角形拓扑结构

代码如下:

pos = hextop(2,3)
figure,plotsom(pos)

网络结构:
在这里插入图片描述
Hextop()六角形拓扑结构8*10 神经元
代码如下:

pos = hextop(8,10)
figure,plotsom(pos)

网络结构:
在这里插入图片描述

3.3 Randtop()随机拓扑结构

代码如下:

pos = randtop(2,3)
figure,plotsom(pos)

网络结构:
在这里插入图片描述
Randtop()随机拓扑结构8*10 神经元
代码如下:

pos = randtop(8,10)
figure,plotsom(pos)

网络结构:
在这里插入图片描述

四、利用SOM自组织映射网络实现癌症样本数据分类

4.1 问题描述

SOM是一类采用无教师学习方式的神经网络模型,它无须期望输出,只是根据数据样本进行学习,并调整自身的权重以达到学习的目的。自组织神经网络的学习规则大都采用竞争型的学习规则。
竞争型神经网络的基本思想是网络竞争层的各神经元通过竞争来获取对输入模式的响应机会,最后仅由一个神经元成为胜利者,并将与获胜神经元有关的各连接权值朝向这更有利于的方向调整。

4.2 输入数据

对于gene.mat样本数据集进行分析,该数据集包含60个人的114种基因表达水平,其中前20个是癌症病人的基因表达水平的样本(其中可能有子类),其后的是20个正常人的基因表达信息样本,其余的20个是待检测的样本(未知他们是否正常)。目标是预测检测样本是癌症还是正常样本:

%% 录入输入数据
% 载入数据并将数据分成训练和预测两类
load gene.mat;
data=gene;
P=data(1:40,:); % 前20个是癌症,后20个是正常样本
T=data(41:60,:); % 待检测样本

% 转置后符合神经网络的输入格式
P=P';
T=T';
% 取输入元素的最大值和最小值Q:
Q=minmax(P);

4.3 网络建立和训练

利用newc( )命令建立竞争网络,Q为训练数据最大最小值,2代表竞争层的神经元个数,也就是要分类的个数,0.1代表学习速率:

net=newc(Q,2,0.1)

% 初始化网络及设定网络参数:
net=init(net); 
% 训练迭代次数
net.trainparam.epochs=20;
% 训练网络:
net=train(net,P);

4.4 验证

a=sim(net,P);
ac=vec2ind(a) % 分类标记

4.5 预测

下面将后20个数据带入神经网络模型中,观察网络输出:

Y=sim(net,T)
% 得到预测的可能性结果
yc=vec2ind(Y)

4.6 运行结果

程序运行结果如下:
在这里插入图片描述

五、利用SOM自组织映射网络实现柴油机故障分类

5.1 问题描述

随着科学与生产技术的发展,现代设备大多数集机电液于一体,结构越来越复杂,自动化成都越来越高。在工作过程中,故障发生的概率相对提高,出现故障后不仅会造成经济损失甚至会导致整个设备遭受灾难性的毁坏。 柴油机由于其本身的结构异常复杂,加
之系统的输入输出不明显,难以用比较完备准确的模型对其机构、功能以及状态等进行有效的描述, 因而给故障诊断带来了很大麻烦。近年来,随着模式识别和神经网络理论的引入,柴油机故障诊断技术有了较快发展。 神经网络技术的出现,为故障诊断问题提供了一种新的解决途径,特别是对于柴油机这类复杂系统。神经网络的输入输出非线性映射特性、信息的分布存储、并行处理和全局集体应用,特别是其高度的白组织和自学习能力,使其成为故障诊断的一种有效方法和手段。下表所示为8种柴油机常见故障集(数据已归一化)。
在这里插入图片描述

5.2 输入数据

% 载入数据
load p;
%转置后符合神经网络的输入格式
P=P';

5.3 网络建立和训练

newsom()用于创建一个自组织特征映射.其调用格式为:
net = newsom(PR,[d1,d2,d3,…],tfcn,dfcd,olr,osteps,tlr,tns)

若输出神经元在输出层的位置与某标准故障样本的位置相同,说明待检样本发生了相应的故障;若输出神经元在输出层的位置介于很多标准故障之间,说明这儿种标准故障都有可能发生,且各故障的程度由该位置与相应标准故障样本位置的欧氏距离确定。
代码如下:

net=newsom(minmax(P),[6 6]);
plotsom(net.layers{
    
    1}.positions)
% 5次训练的步数
a=[10 30 50 100 200 500 1000];
% 随机初始化一个1*10向量。
yc=rands(7,8);
% 训练次数为10次
net.trainparam.epochs=a(1);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(1,:)=vec2ind(y);
plotsom(net.IW{
    
    1,1},net.layers{
    
    1}.distances)

% 训练次数为30次
net.trainparam.epochs=a(2);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(2,:)=vec2ind(y);
plotsom(net.IW{
    
    1,1},net.layers{
    
    1}.distances)

% 训练次数为50次
net.trainparam.epochs=a(3);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(3,:)=vec2ind(y);
plotsom(net.IW{
    
    1,1},net.layers{
    
    1}.distances)


% 训练次数为100次
net.trainparam.epochs=a(4);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(4,:)=vec2ind(y);
plotsom(net.IW{
    
    1,1},net.layers{
    
    1}.distances)


% 训练次数为200次
net.trainparam.epochs=a(5);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(5,:)=vec2ind(y);
plotsom(net.IW{
    
    1,1},net.layers{
    
    1}.distances)

% 训练次数为500次
net.trainparam.epochs=a(6);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(6,:)=vec2ind(y);
plotsom(net.IW{
    
    1,1},net.layers{
    
    1}.distances)

% 训练次数为1000次
net.trainparam.epochs=a(7);
% 训练网络和查看分类
net=train(net,P);
y=sim(net,P);
yc(7,:)=vec2ind(y);
plotsom(net.IW{
    
    1,1},net.layers{
    
    1}.distances)
yc

5.4 分类预测

代码如下:

% 测试样本输入
t=[0.9512 1.0000 0.9458 -0.4215 0.4218 0.9511 0.9645 0.8941]';
% sim( )来做网络仿真
r=sim(net,t);
% 变换函数 将单值向量转变成下标向量。
rr=vec2ind(r)

5.5 查看神经元分布情况

代码如下:

% 查看网络拓扑学结构
figure(1),plotsomtop(net)
% 查看临近神经元直接的距离情况
figure(2),plotsomnd(net)
% 查看每个神经元的分类情况
figure(3),plotsomhits(net,P)

5.6 运行结果

程序输出结果如下:
在这里插入图片描述
SOM网络拓扑结构如下图所示:
在这里插入图片描述

临近神经元之间的距离情况如下图所示:
在这里插入图片描述

每个神经元的分类情况如下图所示:
在这里插入图片描述

5.7 结果分析

由程序输出聚类的结果yc可知,当训练步数为10时,故障原因1、3分为一类,2、7
为一类,4、6为分类,5、8单独一类。可见,网络已经对样本进行了初步的分类,这种分类不够精确。
当训练步数为200时,每个样本都被划分为一类, 这种分类结果更加细化。当训练步数为50或者1000时,同样是每个样本都被划分为一类。 这时如果再提高训练步数,已经没有实际意义了。
由图SOM Topology可知,竞争层神经元有6X6=36个;在图SOM Neighbor中,蓝色代表神经元,红色线代表神经元直接的连接,每个菱形中的颜色表示神经元之间距离的远近,从黄色到黑色,颜色越深说明神经元之间的距离越远;在图Hits中, 蓝色神经元表示竞争胜利的神经元。

六、完整程序

由于文章限制,数据集和本文的完整程序请移步:https://download.csdn.net/download/didi_ya/87741832


ok,以上便是本文的全部内容了,制作不易,如果对你有所帮助,记得点个赞哟~

猜你喜欢

转载自blog.csdn.net/didi_ya/article/details/130438444