实验—采用SOM网络进行聚类

1.SOM网络简介

自组织特征映射网络SOFM又称自组织映射网络SOM,是一种自组织竞争神经网络,一个神经网络接受外界输入模式时,将会分为不同的对应区域,各区域对输入模式具有不同的响应特征,而且这个过程是自动完成的。其特点与人脑的自组织特性相类似。

其主要思想是在学习过程中逐步缩小神经元之间的作用邻域,并依据相关的学习规则增强中心神经元的激活程度,从而去掉各神经元之间的侧向连接,以达到模拟真实大脑神经系统”近兴奋远抑制”的效果。

2.SOM实现聚类实验

(1)导入数据 选用MATLAB自带的数据simplecluster_dataset,该数据包含输入变量simpleclusterInputs,有1000组数据,每组数据为二维向量;目标输出变量simpleclusterTargets,有1000组数据,每组数据为四维向量,表示其类别。

代码如下:

%加载MATLAB自带数据simplecluster_dataset;

load simplecluster_dataset;

%将simpleclusterInputs和simpleclusterTargets分别赋值给x和t

[x,t] = simplecluster_dataset;

%绘制数据分析图

plot(x(1,:),x(2,:),'+')

执行结果如下:

实验---采用SOM网络进行聚类

图1.数据分析图

(2)创建SOM网络 采用函数selforgmap创建SOM网络,该函数定义在两个学习阶段中使用的变量:

排序阶段学习率、排序阶段步骤、调整阶段学习率、调整阶段邻域距离,这些值用于训练和自适应。

创建网络需要指定映射大小,这对应于网格中的行数和列数。对于此示例,可以将映射大小值设置为 10,这对应于 10 行 10 列的网格。神经元的总数等于网格中的点数,在此例中,映射有 100 个神经元。可以在网络窗格中看到网络架构

代码如下:

dimension1=10;

dimension2=10;

%net为一个SOM网络

net = selforgmap([dimension1 dimension2]);

若设计为一维线阵,只写一个参数即可。例如selforgmap([dimension1])

也可以使用以下代码配置网络以输入数据并绘制所有这些数据

net = configure(net,x);

plotsompos(net,x);%绘制未训练前的权值位置

执行结果如下:

实验---采用SOM网络进行聚类

绿点是训练向量。selforgmap 的初始化将初始权重分布到整个输入空间。它们最初离训练向量有一定距离。

(3)训练网络

首先,网络为每个输入向量确定获胜神经元。随后将每个权重向量移至特定位置,即它作为获胜神经元或位于获胜神经元的临域时的所有对应输入向量的平均位置。定义邻域大小的距离在训练过程中的两个阶段会更改。

排序阶段

该阶段持续给定的步数。邻域距离从给定的初始距离开始,并减小到调整邻域距离 (1.0)。随着邻域距离在此阶段逐步减小,网络的神经元通常在输入空间中以与它们自己的物理排序相同的拓扑进行排序。

调整阶段

此阶段持续训练或自适应阶段的其余部分。邻域大小已降至 1 以下,因此只有获胜神经元对每个样本进行学习。

可以使用以下代码对网络进行训练

%net.trainParam.epochs = 1000; %对网络进行1000轮数的训练,也可以不设置系统默认为200轮

net = train(net,x);%查看网络训练界面

plotsompos(net,x);%绘制训练后的权值位置

view(net); 查看网络结构及数据分类结果

执行结果如下:

实验---采用SOM网络进行聚类

实验---采用SOM网络进行聚类

实验---采用SOM网络进行聚类

由上下两个图对比可以看到神经元已开始向不同训练组移动。直到训练到指定轮数。

在神经元更新其权重方面,自组织映射不同于传统的竞争学习。特征图不是只更新获胜神经元,而是更新获胜神经元及其邻点的权重。结果是相邻的神经元倾向于具有相似的权重向量,并对相似的输入向量作出响应。

(4)结果分析

训练结果如上图所示是一个【Neural Network Training】的窗口。

在【Neural Network】图框下可以查看网络结构及数据分类结果,也可以用view(net);命令查看

在【Algorithms】图框中可以看到自组织特征映射中的默认学习在批量模式 (trainbu) 下进行,是以平均平方误差来表现的以及是运用MATLAB来计算的。

在【Progress】图框中显示了网络训练的次数200次以及运行的时间。

在【Plots】图框中显示六个按钮分别可以观察网络的拓扑结构(SOM Topology)、权值连接情况(SOM Neighbor Connections)、领域间的距离(SOM Neighbor Distance)、与输入连接的权值分布情况(SOM Input Planes)、输入激活神经元的情况(SOM Sample Hits)、权值的位置(SOM Weight Positions)。

点击【SOM Topology】按钮或者输入plotsomtop(net)(这里的net为用selforgmap设置的SOM网络,没有数据集中的数据训练)命令可以查看SOM的网络的拓扑结构,如下图所示。每一个蓝色的六边形是一个神经元,在二维平面上排布为10×10的方阵,每一个神经元与其他六个神经元相连(默认为六边形结构,也可以设置为其他结构,边缘神经元除外)

实验---采用SOM网络进行聚类

接着点击【SOM Neighbor Connections】按钮或者输入plotsomtop(net)(这里的net为运用数据集simplecluster_dataset 中的输入变量simpleclusterInputs训练后的,以后输入的net都是)如下图所示。可以看到权值连接情况:红色的线表示两个神经元之间存在连接。

实验---采用SOM网络进行聚类

接着点击【SOM Neighbor Distance】按钮或者输入plotsomnd(net)。如下图所示。可以看到神经元之间的连接强度,也就是神经元之间的距离。颜色越深表示神经元的距离越远,可以比较明显地看出在图中形成了两条交叉的分界线,把区域分成四部分,而每一部分恰好与样本的分布区吻合。

实验---采用SOM网络进行聚类

接着点击【SOM Input Planes】按钮或者输入plotsomplanes(net)。如下图所示。可以看出输入特征的每个元素的权重平面(此例中有两个),该图显示将每个输入连接到每个神经元的权重,颜色越暗,表示权重越大。如果两个特征的连接模式非常相似,则可以假设这两个特征高度相关。此例中输入1与输入2的连接模式非常不同。

实验---采用SOM网络进行聚类

接着点击【SOM Sample Hits】按钮或者输入plotsomhits(net,x)。如下图所示。该拓扑是一个 10×10 网格,因此有 100 个神经元。可以看出拓扑中的神经元位置,并指示每个神经元(簇中心)有多少观测值相关联。此图中数字最大的是29,位于第八行第二列(左下角为原点)表示神经元成为28个输入样本的聚类中心。没有数字的表示该神经元没有被激活。

实验---采用SOM网络进行聚类

最后点击【SOM Weight Positions】按钮与上述输入plotsompos(net,x);命令结果一致都是显示此例中的二维权值向量的位置。每一个深色的点表示神经元对应权值的位置,红线表示拓扑连接,可以看出,尽管网络的拓扑结构发生了变形,但任然保持一定的规律,即相邻神经元的权值位置也比较接近。

实验---采用SOM网络进行聚类

(5)测试网络 网络训练完成后,如果要确定输入向量究竟属于哪一个类别可以输入以下命令:

y = net(x);%根据输入x得到网络的输出

y为100×1000的矩阵,列号表示输入向量的编号,如下图所示。行中的1表示该位置的神经元被激活,0表示未被激活。很明显这是一个稀疏矩阵,不易观察,因此使用以下命令:

classes = vec2ind(y);%vec2ind将单值向量组转换成下标向量组

此时这里的classes为1×1000的向量,也就是每个样本激活函数的神经元的编号。如下图所示。

实验---采用SOM网络进行聚类

实验---采用SOM网络进行聚类

(6)如果对网络性能不满意,可以执行以下操作之一:

①重新训练网络。每次训练都会采用不同网络初始权重和偏置,并且在重新训练后可以产生改进的网络。

②通过增大映射大小来增大神经元的数量。

③使用更大的训练数据集。

还可以评估基于附加测试集的网络性能需要加载附加测试数据来评估网络。

3.实验结果及分析(或实验体会)

本次实验测试了运用SOM网络对数据集进行聚类,自组织映射神经网络, 即Self Organizing Maps (SOM), 可以对数据进行无监督学习聚类。它的思想很简单,本质上是一种只有输入层–隐藏层的神经网络。隐藏层中的一个节点代表一个需要聚成的类。训练时采用”竞争学习”的方式,每个输入的样例在隐藏层中找到一个和它最匹配的节点,称为它的激活节点,也叫”winning neuron”。 紧接着用随机梯度下降法更新激活节点的参数。同时,和激活节点临近的点也根据它们距离激活节点的远近而适当地更新参数。

实验只需要运用简单几个命令即可完成,没有出现错误,但对于用MATLAB绘制SOM网络结构图及训练过程需要完全理掌握。只有理解具体过程才能真正理解SOM网络及运用网络实现各种应用。

Original: https://blog.csdn.net/hanmengyuan2001/article/details/125065207
Author: my0214163
Title: 实验—采用SOM网络进行聚类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/549718/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球