46、基于自组织映射神经网络的鸢尾花聚类(matlab)

发布于:2024-06-23 ⋅ 阅读:(40) ⋅ 点赞:(0)

1、自组织映射神经网络的鸢尾花聚类的原理及流程

自组织映射神经网络(Self-Organizing Map, SOM)是一种用于聚类和数据可视化的人工神经网络模型。在鸢尾花聚类中,SOM 可以用来将鸢尾花数据集分成不同的类别,同时保留数据间的拓扑关系。

SOM的原理是通过竞争学习和自组织的过程,将高维输入空间映射到低维的神经网络结构上。在鸢尾花聚类中,SOM会根据鸢尾花的特征(如花萼长度和宽度,花瓣长度和宽度)将其映射到一个二维的网络中,使得相似的鸢尾花样本被映射到相邻的神经元上。

流程如下:

  1. 初始化 SOM 神经网络:确定神经网络的结构,设定神经元的初始权重。
  2. 随机选取一个鸢尾花样本作为输入,并计算该样本与神经元之间的距离。
  3. 竞争学习:选取距离最近的神经元为胜者,同时调整周围神经元的权重,使得它们也向该样本靠拢。
  4. 更新权重:根据竞争学习的结果,调整神经元的权重。
  5. 重复步骤 2-4 直至达到收敛条件。

经过上述流程,SOM会将鸢尾花样本映射到不同的神经元上,形成了聚类结果。同时,SOM的拓扑结构也能够让我们在二维空间中直观地看到各个类别的分布情况,从而实现了数据的可视化。

2、 基于自组织映射神经网络的鸢尾花聚类说明

1)问题说明

自组织映射神经网络以拓扑方式将鸢尾花聚类为各个类,提供对花类型的深入了解以及用于进一步分析的实用工具。

2)输入参数

每朵鸢尾花都用四个特征进行描述:萼片长度 (cm)/萼片宽度 (cm)/花瓣长度 (cm)/花瓣宽度 (cm)

 3)方案

构建一个将鸢尾花聚类成多个自然类的神经网络,以使相似的类分组在一起。

4)自组织映射特点

自组织映射 (SOM) 非常擅长创建分类。分类保留了关于哪些类与其他类最相似的拓扑信息。自组织映射可以创建为任何所需的详细程度级别。它们特别适合对存在于多个维度且具有复杂形状的相连特征空间的数据进行聚类。 (SOM) 非常擅长创建分类。分类保留了关于哪些类与其他类最相似的拓扑信息。自组织映射可以创建为任何所需的详细程度级别。它们特别适合对存在于多个维度且具有复杂形状的相连特征空间的数据进行聚类。

3、实验数据集

1)说明

将数据组织成输入矩阵 X,为 SOM 设置聚类问题数据
输入矩阵的每个第 i 列具有四个元素,表示在一朵花上获取的四个测量值。

加载数据集代码

x = iris_dataset;
size(x)

ans =

     4   150

 4、使用神经网络进行聚类

1)使用神经网络进行聚类

说明:使用 selforgmap 创建自组织映射,通过选择每个层维度中的神经元数量来对样本进行所需详细程度的分类。
尝试具有以 8×8 六边形网格排列的 64 个神经元的二维层。使用更多神经元可以获得更多细节,而使用更多维度则可对更复杂特征空间的拓扑进行建模。

代码

net = selforgmap([8 8]);
view(net)

视图效果

 2)使用 train 优化网络

说明:神经网络训练工具显示正在接受训练的网络和用于训练该网络的算法。

代码

[net,tr] = train(net,x);

试图效果

 3)使用自组织映射计算每个训练输入的类向量

说明:这些分类涵盖了已知花朵所填充的特征空间,它们现在可用于对新花朵进行相应分类。网络输出将是一个 64×150 矩阵,其中每个第 i 列表示第 i 个输入向量(其第 j 个元素为 1)的第 j 个聚类。
函数 vec2ind 针对每个向量返回输出为 1 的神经元的索引。对于由 64 个神经元表示的 64 个聚类,索引值范围在 1 到 64 之间。

代码

y = net(x);
cluster_index = vec2ind(y);

5、结果显示

1)自组织映射拓扑

说明:使用 plotsomtop 绘制位于 8×8 六边形网格中的 64 个神经元的自组织映射拓扑。
每个神经元都已经过学习,可代表不同的花类,相邻的神经元通常代表相似的类。

代码

figure(1)
plotsomtop(net)
title('自组织映射拓扑')

视图效果

2) 每个类中的花朵数量

说明:使用 plotsomhits 计算每朵花的类,并显示每个类中的花朵数量。
具有大量命中的神经元区域所表示的类代表相似的填充度高的特征空间区域。而命中较少的区域表示填充稀疏的特征空间区域。

代码

figure(2)
plotsomhits(net,x)
title('花数量')

视图效果

 3)邻点通常用于对相似样本进行分类

说明:使用 plotsomnc 显示神经元邻点连接。邻点通常用于对相似样本进行分类。

代码

figure(3)
plotsomnc(net)
title('神经元邻点连接')

视图效果

4) 显示每个神经元的类与其邻点的距离

说明:plotsomnd 显示每个神经元的类与其邻点的距离(以欧几里德距离表示)。
浅色连接表示输入空间的高度连接区域。而深色连接表示的类代表相距很远且相互之间很少或没有花朵的特征空间区域。

代码

figure(4)
plotsomnd(net)
title('神经元类与邻点距离')

视图效果

5) 显示四个输入特征中每个特征的权重平面

说明:使用 plotsomplanes 显示四个输入特征中每个特征的权重平面。
权重可视化,这些权重将每个输入连接到以 8×8 六边形网格排列的 64 个神经元中的每一个。深色代表较大权重。如果两个输入具有相似的权重平面(它们的颜色梯度可能相同或相反),则表明它们高度相关。

代码

figure(5)
plotsomplanes(net)
title('权重平面')

视图效果

6、总结 

在 MATLAB 中实现基于自组织映射神经网络的鸢尾花聚类可以按照如下步骤进行:

  1. 准备数据:加载鸢尾花数据集,并对数据进行标准化处理。

  2. 初始化 SOM 神经网络:确定神经网络的结构,包括输入层和输出层的神经元数量,以及神经元的初始权重。

  3. 竞争学习:随机选取一个鸢尾花样本作为输入,并计算该样本与输出层神经元之间的距离,找到距离最近的胜者神经元。

  4. 更新权重:根据胜者神经元和其邻近神经元的位置关系,调整神经元的权重。

  5. 重复步骤 3 和 4 直至达到收敛条件,即神经网络的权重不再发生显著变化。

  6. 聚类结果展示:根据训练好的神经网络,将鸢尾花数据样本映射到相应的神经元上,从而得到聚类结果。

具体实现中,可以使用 MATLAB 的神经网络工具箱中的 selforgmaptrain 和 sim 等函数来构建和训练自组织映射神经网络。最后,利用可视化工具如散点图或热力图等方法,展示不同类别鸢尾花在自组织映射网络上的分布情况,进一步分析聚类结果。

7、源代码

代码

%% 基于自组织映射神经网络的鸢尾花聚类
%说明:自组织映射神经网络以拓扑方式将鸢尾花聚类为各个类,提供对花类型的深入了解以及用于进一步分析的实用工具。
%每朵鸢尾花都用四个特征进行描述:萼片长度 (cm)/萼片宽度 (cm)/花瓣长度 (cm)/花瓣宽度 (cm)
%试构建一个将鸢尾花聚类成多个自然类的神经网络,以使相似的类分组在一起。
%自组织映射 (SOM) 非常擅长创建分类。分类保留了关于哪些类与其他类最相似的拓扑信息。自组织映射可以创建为任何所需的详细程度级别。它们特别适合对存在于多个维度且具有复杂形状的相连特征空间的数据进行聚类。
%% 数据集
%将数据组织成输入矩阵 X,为 SOM 设置聚类问题数据
%输入矩阵的每个第 i 列具有四个元素,表示在一朵花上获取的四个测量值。
%加载数据集
x = iris_dataset;
size(x)
%% 使用神经网络进行聚类
%使用神经网络进行聚类
%使用 selforgmap 创建自组织映射,通过选择每个层维度中的神经元数量来对样本进行所需详细程度的分类。
%尝试具有以 8×8 六边形网格排列的 64 个神经元的二维层。使用更多神经元可以获得更多细节,而使用更多维度则可对更复杂特征空间的拓扑进行建模。
net = selforgmap([8 8]);
view(net)
%使用 train 优化网络
%神经网络训练工具显示正在接受训练的网络和用于训练该网络的算法。
[net,tr] = train(net,x);
%使用自组织映射计算每个训练输入的类向量。
%这些分类涵盖了已知花朵所填充的特征空间,它们现在可用于对新花朵进行相应分类。网络输出将是一个 64×150 矩阵,其中每个第 i 列表示第 i 个输入向量(其第 j 个元素为 1)的第 j 个聚类。
%函数 vec2ind 针对每个向量返回输出为 1 的神经元的索引。对于由 64 个神经元表示的 64 个聚类,索引值范围在 1 到 64 之间。
y = net(x);
cluster_index = vec2ind(y);
%使用 plotsomtop 绘制位于 8×8 六边形网格中的 64 个神经元的自组织映射拓扑。
%每个神经元都已经过学习,可代表不同的花类,相邻的神经元通常代表相似的类。
figure(1)
plotsomtop(net)
title('自组织映射拓扑')
%使用 plotsomhits 计算每朵花的类,并显示每个类中的花朵数量。
%具有大量命中的神经元区域所表示的类代表相似的填充度高的特征空间区域。而命中较少的区域表示填充稀疏的特征空间区域。
figure(2)
plotsomhits(net,x)
title('花数量')
%使用 plotsomnc 显示神经元邻点连接。邻点通常用于对相似样本进行分类。
figure(3)
plotsomnc(net)
title('神经元邻点连接')
%plotsomnd 显示每个神经元的类与其邻点的距离(以欧几里德距离表示)。
%浅色连接表示输入空间的高度连接区域。而深色连接表示的类代表相距很远且相互之间很少或没有花朵的特征空间区域。
figure(4)
plotsomnd(net)
title('神经元类与邻点距离')
%使用 plotsomplanes 显示四个输入特征中每个特征的权重平面。
%权重可视化,这些权重将每个输入连接到以 8×8 六边形网格排列的 64 个神经元中的每一个。深色代表较大权重。如果两个输入具有相似的权重平面(它们的颜色梯度可能相同或相反),则表明它们高度相关。
figure(5)
plotsomplanes(net)
title('权重平面')


网站公告

今日签到

点亮在社区的每一天
去签到