自组织特征映射神经网络(SOM)

  • 自组织特征映射神经网络简介:

        自组织特征映射神经网络(SOM)也是无教师学习网络,主要用于对输入向量进行区域分类。其结构与基本竞争型神经网络很相似。与自组织竞争网络的不同之处:SOM网络不但识别属于区域邻近的区域,还研究输入向量的分布特性和拓扑结构。

  • 自组织特征映射神经网络结构

       1981年,科霍恩(Kohonen)教授提出一种自组织特征映射网(Self-Organizing feature Map,简称SOM,又称Kohonen网)。科霍恩认为,一个生物神经网络在接受外界输入模式时,将会分为不同的对应区域,各区域对输入模式具有不同的响应特征,而且这个过程是自动完成的。以此为基础,科霍恩创建了SOM。并且自提出以来,自组织特征映射网络得到快速发展和改进,目前广泛应用于样本分类、排序和样本检测等方面,和工程、金融、医疗、军事等领域,并成为其他人工神经网络的基础。

      与自组织竞争网络不同的是,在自组织映射神经网络中邻近的神经元能够识别输入空间中邻近的部分。

      自组织特征映射神经网络包含输入层、输出层两层网络,但在输出层引入网络的拓扑结构,以更好地模拟生物学中的侧抑制现象。

      输入神经元与输出神经元通过权值相连,同时,近邻的输出神经元之间也通过权值向量相连。输出神经元被放置在一维、二维甚至多维的网格节点中,最常见的是二维拓扑结构。

如图所示,SOM包括一个输入层和一个表示层。假设输入数据是n维,表示层有个神经元。每个神经元赋予位置和权值

                                                                 自组织特征映射神经网络(SOM)_第1张图片

  • 自组织特征映射学习算法原理

Kohonen自组织特征映射算法,能够自动找出输入数据之间的类似度,将相似的输入在网络上就近配置。因此是一种可以构成对输入数据有选择地给予响应的网络。

类似度准则

欧式距离:

                                                                      

  • 自组织特征映射学习算法步骤

SOM的步骤分为两个阶段:a)学习阶段,随机选择训练数据,根据欧氏距离选择获胜神经元,更新获胜神经元及其邻域神经元的权值;b)聚类阶段,将测试数据映射到神经元,相似的数据会映射到相邻神经元。

整体流程如下所示:

1.网络初始化

用随机数设定输入层和映射层之间权值的初始值。

2.输入向量

把输入向量输入给输入层。

3.计算映射层的权值向量和输入向量的距离映射层的神经元和输入向量的距离,按下式给出:

                                                                        

4.选择与权值向量的距离最小的神经元

计算并选择使输入向量和权值向量的距离最小的神经元,把其称为胜出神经元并记为,j并给出其邻接神经元集合。

5.调整权值

胜出神经元和位于其邻接神经元的权值,按下式更新:

                                                                   

6.是否达到预先设定的要求如达到要求则算法结束,否则返回2,进入下一轮学习。

SOM简单应用程序如下:

%%四个坐标点分类
clc
clear
close all;

%输入数据
p = [0.2 0.8 0.1 0.9;0.3 0.5 0.4 0.5];
plot(p(1,:),p(2,:),'o');
%axis([0.1,0.1]);
set(gcf,'color','W');
grid on
title('四个坐标点的分类');

%网络训练
net = newsom(p,2);
net = train(net,p);
Y = net(p);
Yc = vec2ind(Y);
%SOM网络拓扑结构
figure 
plotsomtop(net);
title('SOM网络拓扑结构');

figure
%查看邻近神经元直接的距离情况
plotsomnd(net)
title('邻近神经元直接的距离')

p
c1 = p(:,Yc==1);%绘制分类结果
c2 = p(:,Yc==2);
figure 
plot(c1(1,:),c1(2,:),'ro','LineWidth',2);
hold on
plot(c2(1,:),c2(2,:),'k^','LineWidth',2);
title('四个坐标点的分类结果')

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

 

你可能感兴趣的:(机器学习)